千家信息网

Hibernate如何配置

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要为大家展示了"Hibernate如何配置",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Hibernate如何配置"这篇文章吧。1、Hibern
千家信息网最后更新 2024年11月11日Hibernate如何配置

这篇文章主要为大家展示了"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如何配置"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0