Hibernate如何配置
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要为大家展示了"Hibernate如何配置",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Hibernate如何配置"这篇文章吧。1、Hibern
千家信息网最后更新 2024年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安全错误
数据库的锁怎样保障安全
服务器tcp连接数并发测试
论数据库安全性的重要
软件开发中的粘度
服务器ssh端口号查看
密码学与网络安全
江阴浪潮服务器维修服务点
计算机网络技术是软件吗
201华为网络技术大赛
连接电脑需要服务器吗
交警开展公安机关网络安全学习会
成功的软件开发团队包括哪些
java监控数据库结构变化
软件开发配置版本号规范
学习网站用什么服务器
江苏环保网络技术是什么
数据库给表中添加新列
清原天气预报软件开发
cb网络安全大赛
网络安全技术的发展具有
标识数据库实例
上海web前端软件开发机构
连云港品搜网络技术有限公司
网络安全工作宣传周
hcna网络技术是个什么
软件开发软件环境
软件开发程序是什么
科级干部测评软件开发
软件开发等级保护怎么做
营口华龙互联网科技有限公司
国诚互联网络科技有限公司