Hibernate如何配置
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,这篇文章主要为大家展示了"Hibernate如何配置",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Hibernate如何配置"这篇文章吧。1、Hibern
千家信息网最后更新 2025年11月11日Hibernate如何配置根据hibernate.cfg.xml文件自动建表
这篇文章主要为大家展示了"Hibernate如何配置",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Hibernate如何配置"这篇文章吧。
1、Hibernate.cfg.xml 主配置
Hibernate.cfg.xml是主配置文件,其中配置大体分为3部分:数据库连接信息、其他参数、映射信息!
com.mysql.jdbc.Driver jdbc:mysql:///test root root org.hibernate.dialect.MySQL5Dialect false true update
1.1、数据库连接参数配置
## MySQL#hibernate.dialect org.hibernate.dialect.MySQLDialect#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect#hibernate.connection.driver_class com.mysql.jdbc.Driver#hibernate.connection.url jdbc:mysql:///test#hibernate.connection.username gavin#hibernate.connection.password
1.2、自动建表
#hibernate.hbm2ddl.auto create-drop 每次在创建sessionFactory时候执行创建表;当调用sesisonFactory的close方法的时候,删除表!#hibernate.hbm2ddl.auto create 每次都重新建表; 如果表已经存在就先删除再创建#hibernate.hbm2ddl.auto update 如果表不存在就创建; 表存在就不创建;#hibernate.hbm2ddl.auto validate (生成环境时候) 执行验证: 当映射文件的内容与数据库表结构不一样的时候就报错!
根据hibernate.cfg.xml文件自动建表
import org.hibernate.cfg.Configuration;import org.hibernate.tool.hbm2ddl.SchemaExport;public class App{ public static void main(String[] args) { // 创建配置管理类对象 Configuration config = new Configuration(); // 加载主配置文件 config.configure(); // 创建工具类对象 SchemaExport export = new SchemaExport(config); // 建表 // 第一个参数: 是否在控制台打印建表语句 // 第二个参数: 是否执行脚本 export.create(true, true); }}1.3、常用配置参考文件
常用配置参考文件:hibernate-distribution-3.6.0.Final\project\etc\hibernate.properties
######################### Query Language ########################### define query language constants / function nameshibernate.query.substitutions yes 'Y', no 'N'## select the classic query parser#hibernate.query.factory_class org.hibernate.hql.classic.ClassicQueryTranslatorFactory#################### Platforms ###################### JNDI Datasource#hibernate.connection.datasource jdbc/test#hibernate.connection.username db2#hibernate.connection.password db2## HypersonicSQLhibernate.dialect org.hibernate.dialect.HSQLDialecthibernate.connection.driver_class org.hsqldb.jdbcDriverhibernate.connection.username sahibernate.connection.passwordhibernate.connection.url jdbc:hsqldb:./build/db/hsqldb/hibernate#hibernate.connection.url jdbc:hsqldb:hsql://localhost#hibernate.connection.url jdbc:hsqldb:test## H2 (www.h3database.com)#hibernate.dialect org.hibernate.dialect.H2Dialect#hibernate.connection.driver_class org.h3.Driver#hibernate.connection.username sa#hibernate.connection.password#hibernate.connection.url jdbc:h3:mem:./build/db/h3/hibernate#hibernate.connection.url jdbc:h3:testdb/h3test#hibernate.connection.url jdbc:h3:mem:imdb1#hibernate.connection.url jdbc:h3:tcp://dbserv:8084/sample; #hibernate.connection.url jdbc:h3:ssl://secureserv:8085/sample; #hibernate.connection.url jdbc:h3:ssl://secureserv/testdb;cipher=AES## MySQL#hibernate.dialect org.hibernate.dialect.MySQLDialect#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect#hibernate.connection.driver_class com.mysql.jdbc.Driver#hibernate.connection.url jdbc:mysql:///test#hibernate.connection.username gavin#hibernate.connection.password## Oracle#hibernate.dialect org.hibernate.dialect.Oracle8iDialect#hibernate.dialect org.hibernate.dialect.Oracle9iDialect#hibernate.dialect org.hibernate.dialect.Oracle10gDialect#hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver#hibernate.connection.username ora#hibernate.connection.password ora#hibernate.connection.url jdbc:oracle:thin:@localhost:1521:orcl#hibernate.connection.url jdbc:oracle:thin:@localhost:1522:XE## PostgreSQL#hibernate.dialect org.hibernate.dialect.PostgreSQLDialect#hibernate.connection.driver_class org.postgresql.Driver#hibernate.connection.url jdbc:postgresql:template1#hibernate.connection.username pg#hibernate.connection.password## DB2#hibernate.dialect org.hibernate.dialect.DB2Dialect#hibernate.connection.driver_class com.ibm.db2.jcc.DB2Driver#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver#hibernate.connection.url jdbc:db2://localhost:50000/somename#hibernate.connection.url jdbc:db2:somename#hibernate.connection.username db2#hibernate.connection.password db2## TimesTen#hibernate.dialect org.hibernate.dialect.TimesTenDialect#hibernate.connection.driver_class com.timesten.jdbc.TimesTenDriver#hibernate.connection.url jdbc:timesten:direct:test#hibernate.connection.username#hibernate.connection.password ## DB2/400#hibernate.dialect org.hibernate.dialect.DB2400Dialect#hibernate.connection.username user#hibernate.connection.password password## Native driver#hibernate.connection.driver_class COM.ibm.db2.jdbc.app.DB2Driver#hibernate.connection.url jdbc:db2://systemname## Toolbox driver#hibernate.connection.driver_class com.ibm.as400.access.AS400JDBCDriver#hibernate.connection.url jdbc:as400://systemname## Derby (not supported!)#hibernate.dialect org.hibernate.dialect.DerbyDialect#hibernate.connection.driver_class org.apache.derby.jdbc.EmbeddedDriver#hibernate.connection.username#hibernate.connection.password#hibernate.connection.url jdbc:derby:build/db/derby/hibernate;create=true## Sybase#hibernate.dialect org.hibernate.dialect.SybaseDialect#hibernate.connection.driver_class com.sybase.jdbc2.jdbc.SybDriver#hibernate.connection.username sa#hibernate.connection.password sasasa#hibernate.connection.url jdbc:sybase:Tds:co3061835-a:5000/tempdb## Mckoi SQL#hibernate.dialect org.hibernate.dialect.MckoiDialect#hibernate.connection.driver_class com.mckoi.JDBCDriver#hibernate.connection.url jdbc:mckoi:///#hibernate.connection.url jdbc:mckoi:local://C:/mckoi1.0.3/db.conf#hibernate.connection.username admin#hibernate.connection.password nimda## SAP DB#hibernate.dialect org.hibernate.dialect.SAPDBDialect#hibernate.connection.driver_class com.sap.dbtech.jdbc.DriverSapDB#hibernate.connection.url jdbc:sapdb://localhost/TST#hibernate.connection.username TEST#hibernate.connection.password TEST#hibernate.query.substitutions yes 'Y', no 'N'## MS SQL Server#hibernate.dialect org.hibernate.dialect.SQLServerDialect#hibernate.connection.username sa#hibernate.connection.password sa## JSQL Driver#hibernate.connection.driver_class com.jnetdirect.jsql.JSQLDriver#hibernate.connection.url jdbc:JSQLConnect://1E1/test## JTURBO Driver#hibernate.connection.driver_class com.newatlanta.jturbo.driver.Driver#hibernate.connection.url jdbc:JTurbo://1E1:1433/test## WebLogic Driver#hibernate.connection.driver_class weblogic.jdbc.mssqlserver4.Driver#hibernate.connection.url jdbc:weblogic:mssqlserver4:1E1:1433## Microsoft Driver (not recommended!)#hibernate.connection.driver_class com.microsoft.jdbc.sqlserver.SQLServerDriver#hibernate.connection.url jdbc:microsoft:sqlserver://1E1;DatabaseName=test;SelectMethod=cursor## The New Microsoft Driver #hibernate.connection.driver_class com.microsoft.sqlserver.jdbc.SQLServerDriver#hibernate.connection.url jdbc:sqlserver://localhost## jTDS (since version 0.9)#hibernate.connection.driver_class net.sourceforge.jtds.jdbc.Driver#hibernate.connection.url jdbc:jtds:sqlserver://1E1/test## Interbase#hibernate.dialect org.hibernate.dialect.InterbaseDialect#hibernate.connection.username sysdba#hibernate.connection.password masterkey## DO NOT specify hibernate.connection.sqlDialect## InterClient#hibernate.connection.driver_class interbase.interclient.Driver#hibernate.connection.url jdbc:interbase://localhost:3060/C:/firebird/test.gdb## Pure Java#hibernate.connection.driver_class org.firebirdsql.jdbc.FBDriver#hibernate.connection.url jdbc:firebirdsql:localhost/3050:/firebird/test.gdb## Pointbase#hibernate.dialect org.hibernate.dialect.PointbaseDialect#hibernate.connection.driver_class com.pointbase.jdbc.jdbcUniversalDriver#hibernate.connection.url jdbc:pointbase:embedded:sample#hibernate.connection.username PBPUBLIC#hibernate.connection.password PBPUBLIC## Ingres## older versions (before Ingress 2006)#hibernate.dialect org.hibernate.dialect.IngresDialect#hibernate.connection.driver_class ca.edbc.jdbc.EdbcDriver#hibernate.connection.url jdbc:edbc://localhost:II7/database#hibernate.connection.username user#hibernate.connection.password password## Ingres 2006 or later#hibernate.dialect org.hibernate.dialect.IngresDialect#hibernate.connection.driver_class com.ingres.jdbc.IngresDriver#hibernate.connection.url jdbc:ingres://localhost:II7/database;CURSOR=READONLY;auto=multi#hibernate.connection.username user#hibernate.connection.password password## Mimer SQL#hibernate.dialect org.hibernate.dialect.MimerSQLDialect#hibernate.connection.driver_class com.mimer.jdbc.Driver#hibernate.connection.url jdbc:mimer:multi1#hibernate.connection.username hibernate#hibernate.connection.password hibernate## InterSystems Cache#hibernate.dialect org.hibernate.dialect.Cache71Dialect#hibernate.connection.driver_class com.intersys.jdbc.CacheDriver#hibernate.connection.username _SYSTEM#hibernate.connection.password SYS#hibernate.connection.url jdbc:Cache://127.0.0.1:1972/HIBERNATE#################################### Hibernate Connection Pool ####################################hibernate.connection.pool_size 1############################## C3P0 Connection Pool###############################hibernate.c3p0.max_size 2#hibernate.c3p0.min_size 2#hibernate.c3p0.timeout 5000#hibernate.c3p0.max_statements 100#hibernate.c3p0.idle_test_period 3000#hibernate.c3p0.acquire_increment 2#hibernate.c3p0.validate false################################# Proxool Connection Pool################################### Properties for external configuration of Proxoolhibernate.proxool.pool_alias pool1## Only need one of the following#hibernate.proxool.existing_pool true#hibernate.proxool.xml proxool.xml#hibernate.proxool.properties proxool.properties#################################### Plugin ConnectionProvider ###################################### use a custom ConnectionProvider (if not set, Hibernate will choose a built-in ConnectionProvider using hueristics)#hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider#hibernate.connection.provider_class org.hibernate.connection.DatasourceConnectionProvider#hibernate.connection.provider_class org.hibernate.connection.C3P0ConnectionProvider#hibernate.connection.provider_class org.hibernate.connection.ProxoolConnectionProvider########################## Transaction API ############################ Enable automatic flush during the JTA beforeCompletion() callback## (This setting is relevant with or without the Transaction API)#hibernate.transaction.flush_before_completion## Enable automatic session close at the end of transaction## (This setting is relevant with or without the Transaction API)#hibernate.transaction.auto_close_session## the Transaction API abstracts application code from the underlying JTA or JDBC transactions#hibernate.transaction.factory_class org.hibernate.transaction.JTATransactionFactory#hibernate.transaction.factory_class org.hibernate.transaction.JDBCTransactionFactory## to use JTATransactionFactory, Hibernate must be able to locate the UserTransaction in JNDI## default is java:comp/UserTransaction## you do NOT need this setting if you specify hibernate.transaction.manager_lookup_class#jta.UserTransaction jta/usertransaction#jta.UserTransaction javax.transaction.UserTransaction#jta.UserTransaction UserTransaction## to use the second-level cache with JTA, Hibernate must be able to obtain the JTA TransactionManager#hibernate.transaction.manager_lookup_class org.hibernate.transaction.JBossTransactionManagerLookup#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WeblogicTransactionManagerLookup#hibernate.transaction.manager_lookup_class org.hibernate.transaction.WebSphereTransactionManagerLookup#hibernate.transaction.manager_lookup_class org.hibernate.transaction.OrionTransactionManagerLookup#hibernate.transaction.manager_lookup_class org.hibernate.transaction.ResinTransactionManagerLookup################################# Miscellaneous Settings ################################### print all generated SQL to the console#hibernate.show_sql true## format SQL in log and consolehibernate.format_sql true## add comments to the generated SQL#hibernate.use_sql_comments true## generate statistics#hibernate.generate_statistics true## auto schema export#hibernate.hbm2ddl.auto create-drop#hibernate.hbm2ddl.auto create#hibernate.hbm2ddl.auto update#hibernate.hbm2ddl.auto validate## specify a default schema and catalog for unqualified tablenames#hibernate.default_schema test#hibernate.default_catalog test## enable ordering of SQL UPDATEs by primary key#hibernate.order_updates true## set the maximum depth of the outer join fetch treehibernate.max_fetch_depth 1## set the default batch size for batch fetching#hibernate.default_batch_fetch_size 8## rollback generated identifier values of deleted entities to default values#hibernate.use_identifer_rollback true## enable bytecode reflection optimizer (disabled by default)#hibernate.bytecode.use_reflection_optimizer true######################## JDBC Settings ########################## specify a JDBC isolation level#hibernate.connection.isolation 4## enable JDBC autocommit (not recommended!)#hibernate.connection.autocommit true## set the JDBC fetch size#hibernate.jdbc.fetch_size 25## set the maximum JDBC 2 batch size (a nonzero value enables batching)#hibernate.jdbc.batch_size 5#hibernate.jdbc.batch_size 0## enable batch updates even for versioned datahibernate.jdbc.batch_versioned_data true## enable use of JDBC 2 scrollable ResultSets (specifying a Dialect will cause Hibernate to use a sensible default)#hibernate.jdbc.use_scrollable_resultset true## use streams when writing binary types to / from JDBChibernate.jdbc.use_streams_for_binary true## use JDBC 3 PreparedStatement.getGeneratedKeys() to get the identifier of an inserted row#hibernate.jdbc.use_get_generated_keys false## choose a custom JDBC batcher# hibernate.jdbc.factory_class## enable JDBC result set column alias caching ## (minor performance enhancement for broken JDBC drivers)# hibernate.jdbc.wrap_result_sets## choose a custom SQL exception converter#hibernate.jdbc.sql_exception_converter############################# Second-level Cache ############################### optimize chache for minimal "puts" instead of minimal "gets" (good for clustered cache)#hibernate.cache.use_minimal_puts true## set a prefix for cache region nameshibernate.cache.region_prefix hibernate.test## disable the second-level cache#hibernate.cache.use_second_level_cache false## enable the query cache#hibernate.cache.use_query_cache true## store the second-level cache entries in a more human-friendly format#hibernate.cache.use_structured_entries true## choose a cache implementation#hibernate.cache.provider_class org.hibernate.cache.EhCacheProvider#hibernate.cache.provider_class org.hibernate.cache.EmptyCacheProviderhibernate.cache.provider_class org.hibernate.cache.HashtableCacheProvider#hibernate.cache.provider_class org.hibernate.cache.TreeCacheProvider#hibernate.cache.provider_class org.hibernate.cache.OSCacheProvider#hibernate.cache.provider_class org.hibernate.cache.SwarmCacheProvider## choose a custom query cache implementation#hibernate.cache.query_cache_factory############### JNDI ################# specify a JNDI name for the SessionFactory#hibernate.session_factory_name hibernate/session_factory## Hibernate uses JNDI to bind a name to a SessionFactory and to look up the JTA UserTransaction;## if hibernate.jndi.* are not specified, Hibernate will use the default InitialContext() which## is the best approach in an application server#file system#hibernate.jndi.class com.sun.jndi.fscontext.RefFSContextFactory#hibernate.jndi.url file:/#WebSphere#hibernate.jndi.class com.ibm.websphere.naming.WsnInitialContextFactory#hibernate.jndi.url iiop://localhost:900/
2、映射配置
1、普通字段类型
2、主键映射
a)单列主键映射
b)多列作为主键映射
Employee.hbm.xml
Employee.java
package com.rk.hibernate.d_hbm_config;import java.util.Date;public class Employee{ private String empId; private String empName; private Date workDate; private String desc; public String getEmpId() { return empId; } public void setEmpId(String empId) { this.empId = empId; } public String getEmpName() { return empName; } public void setEmpName(String empName) { this.empName = empName; } public Date getWorkDate() { return workDate; } public void setWorkDate(Date workDate) { this.workDate = workDate; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } @Override public String toString() { return "Employee [empId=" + empId + ", empName=" + empName + ", workDate=" + workDate + ", desc=" + desc + "]"; }}App.java
package com.rk.hibernate.d_hbm_config;import java.util.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;public class App{ private static SessionFactory sessionFactory; static { sessionFactory = new Configuration() .configure() .addClass(Employee.class) //会自动加载映射文件:Employee.hbm.xml。这样,在hibernate.cfg.xml中就不用添加映射了 .buildSessionFactory(); } @Test public void testSave() { Session session = null; Transaction tx = null; try { Employee emp = new Employee(); emp.setEmpName("Tom"); emp.setWorkDate(new Date()); emp.setDesc("这里是描述"); session = sessionFactory.openSession(); tx = session.beginTransaction(); session.save(emp); System.out.println("执行结束!"); } catch(Exception e) { throw new RuntimeException(e); } finally { tx.commit(); session.close(); } }}3、数据库问题
(1)一个表能否有多个主键? 不能。
(2)为什么要设置主键? 数据库存储的数据都是有效的,必须保持唯一。
(3)为什么把id作为主键?因为表中通常找不到合适的列作为唯一列即主键,所以为了方法用id列,因为id是数据库系统维护可以保证唯一,所以就把这列作为主键!
(4)联合/复合主键。如果找不到合适的列作为主键,出来用id列以外,我们一般用联合主键,即多列的值作为一个主键,从而确保记录的唯一性。
联合主键的案例
CompositeKeys.java
package com.rk.hibernate.e_compositekey;import java.io.Serializable;//复合主键类public class CompositeKeys implements Serializable{ private String username; private String address; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }User.java
package com.rk.hibernate.e_compositekey;public class User{ // 名字跟地址,不会重复 private CompositeKeys pkeys; private int age; public CompositeKeys getPkeys() { return pkeys; } public void setPkeys(CompositeKeys pkeys) { this.pkeys = pkeys; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [username=" + pkeys.getUsername() + ", address=" + pkeys.getAddress() + ", age=" + age + "]"; } }User.hbm.xml
App.java
package com.rk.hibernate.e_compositekey;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;public class App{ private static SessionFactory sessionFactory; static { sessionFactory = new Configuration().configure().addClass(User.class).buildSessionFactory(); } @Test public void testSave() { Session session = null; Transaction tx = null; try { // 对象 CompositeKeys pkeys = new CompositeKeys(); pkeys.setAddress("火星"); pkeys.setUsername("小明"); User u = new User(); u.setPkeys(pkeys); u.setAge(20); // 保存 session = sessionFactory.openSession(); tx = session.beginTransaction(); session.save(u); System.out.println("执行结束!"); } catch(Exception e) { throw new RuntimeException(e); } finally { tx.commit(); session.close(); } } @Test public void testQuery() { Session session = null; Transaction tx = null; try { //构建复合主键 CompositeKeys pkeys = new CompositeKeys(); pkeys.setAddress("火星"); pkeys.setUsername("小明"); // 查询 session = sessionFactory.openSession(); tx = session.beginTransaction(); User u = (User) session.get(User.class, pkeys); System.out.println(u); System.out.println("执行结束!"); } catch(Exception e) { throw new RuntimeException(e); } finally { tx.commit(); session.close(); } }}以上是"Hibernate如何配置"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
配置
数据
文件
数据库
内容
参数
时候
对象
篇文章
联合
合适
信息
常用
方法
小明
火星
参考
学习
帮助
普通
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
大型服务器里面放的水是什么
文件系统文档数据库
网络安全的体会100
网络技术学院大学排名
即时通登录前要填服务器
国产数据库没人用
梦幻代理服务器
县城的网络安全
vf数据库格式如何打印
网络安全分析数据传输
医院网络安全解决方案
删除数据库能查到记录吗
数据库用命令创建教师表
数据库导出身份证为文本格式
耒阳市打拐DNA数据库
重点部门网络安全检查
数据库查询有多少用户
吉林软件开发价格服务标准
数据库技术及应用第2版答案
北京工业软件开发大概要多少钱
dell服务器系统崩溃
参加大学生网络安全知识竞赛
网络安全手报简单
t6数据库发货单表名
apple软件开发收费
海康通用服务器有几代
深圳项目管理软件开发
面向对象软件开发的优点
上海常用软件开发不二之选
手机软件开发工具包下载