Hibernate之配置文件

可持久化对象有以下三种状态:

临时状态(Transient):对象在保存进数据库之前为临时状态,这时数据库中没有该对象的信息,如果没有持久化,程序退出后临时状态的对象信息将会丢失。随时可能被垃圾回收器回收(在数据库中没有于之对应的记录,应为是new初始化),而执行save()方法后,就变为Persistent对象(持久性对象),没有纳入session的管理,内存中一个对象,没有ID,缓存中也没有

持久化状态(Persistent):对象在保存进数据库后或者从数据库加载后、并且没有脱离Session时为持久化状态,这时候数据库中有该对象的信息。由于还在Session中,持久化状态的对象可以执行任何有关数据库的操作,在数据库有存在的对应的记录,纳入session管理。在清理缓存(脏数据检查)的时候,会和数据库同步。内存中有、缓存中有、数据库有(ID)

分离状态(Detached):分离状态是对象曾经出于持久化状态,但是现在已经离开Session了。虽然分离状态的对象有id值,但是已经无法执行有关数据库的操作了。例如,读取延迟加载的集合属性,可能会抛出LazyInitalizeException。

配置文件

Hibernate同时支持动态配置

XML配置

Configurationcfg = new Configuration().addResource(“com/clf/Cat.hbm.xml”);

//注解配置

Configuration cfg= new Configuration().addClass(com.clf.bean.cat.Class);

通过setProperty(“hibernate.dialect”,”org.hibernate.dialect.MySQLDialect”)类似的方法可以动态地设置Hibernate参数,还可以用addProperties(Propertiesp)批量的添加参数

常规配置

Hibernate的配置文件可以为XML或者properties文件,默认的配置文件名称为hibernate.cfg.xml或者hibernate.properties,位于classpath下面。properties文件中的参数是具有hibernate前缀的,而xml文件没有

hibernate.connection.driver_class= com.mysql.jdbc.Driverhibernate.connection.url= jdbc:mysql://localhost:3306/hibernate?characterEncoding=UTF-8hibernate.connection.username= roothibernate.connection.password= adminhibernate.dialect= org.hibernate.dialect.MySQLDialecthibernate.show_sql= truehibernate.hbm2ddl.auto= createhibernate.current_session_context_class= thread

<?xml version="1.0″ encoding="UTF-8″?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" ""> <hibernate-configuration> <session-factory> <!–为true表示将Hibernate发送给数据库的sql显示出来 –> <property name="show_sql">true</property> <!– SQL方言,这边设定的是MySQL –> <property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property> <!– 一次读的数据库记录数 –> <property name="jdbc.fetch_size">50</property> <!– 设定对数据库进行批量删除 –> <property name="jdbc.batch_size">30</property> <!–驱动程序–> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!–JDBC URL –> <property name="connection.url">jdbc:mysql://localhost/dbname?characterEncoding=gb2312</property> <!– 数据库用户名–> <property name="connection.username">root</property> <!– 数据库密码–> <property name="connection.password">root</property> <!–映射文件 –> <mapping resource="com/amigo/pojo/User.hbm.xml"/> <mapping resource="com/amigo/pojo/Org.hbm.xml"/> </session-factory> </hibernate-configuration>

配置数据源<session-factory> <!–下面为JNDI的配置 –> <!– 数据源的名称 –> <property name="connection.datasource">java:comp/env/jdbc/datasourcename</property> <!– 数据源的提供者 –><property name="hibernate.jndi.url"></property><!– 数据源的实现类 –><property name="hibernate.jndi.class"></property><!– Hibernate的连接加载类 –> <property name="connection.provider_class">net.sf.hibernate.connection.DatasourceConnectionProvider</property> <property name="dialect">net.sf.hibernate.dialect.SQLServerDialect</property> <!–映射文件 –> <mapping resource="com/amigo/pojo/User.hbm.xml"/> <mapping resource="com/amigo/pojo/Org.hbm.xml"/> </session-factory>

c3p0连接池

c3p0连接池是Hibernate推荐使用的连接池,若需要使用该连接池时,需要将c3p0的jar包加入到classpath中。c3p0连接池的配置示例如下:

<session-factory> <property name="connection.driver_class">……</property> <!– JDBC URL –> <property name="connection.url">……</property> <!– 数据库用户名 –> <property name="connection.username">user</property> <!– 数据库密码 –> <property name="connection.password">pass</property> <property name="c3p0.min_size">5</property> <property name="c3p0.max_size">20</property> <property name="c3p0.timeout">1800</property> <property name="c3p0.max_statements">50</property> ……</session-factory>

在上述配置中,Hibernate根据配置文件生成连接,再交给c3p0管理。

Hibernate常规属性

hibernate.dialect 一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL.

取值full.classname.of.Dialect

hibernate.show_sql 输出所有SQL语句到控制台. 有一个另外的选择是把org.hibernate.SQL这个logcategory设为debug。

eg. true | false

hibernate.format_sql 在log和console中打印出更漂亮的SQL。

取值 true | false

hibernate.default_schema 在生成的SQL中, 将给定的schema/tablespace附加于非全限定名的表名上.

取值 SCHEMA_NAME

hibernate.default_catalog 在生成的SQL中, 将给定的catalog附加于非全限定名的表名上.

取值 CATALOG_NAME

hibernate.session_factory_name SessionFactory创建后,将自动使用这个名字绑定到JNDI中.

取值jndi/composite/name

hibernate.max_fetch_depth 为单向关联(一对一, 多对一)的外连接抓取(outerjoin fetch)树设置最大深度. 值为0意味着将关闭默认的外连接抓取.

取值 建议在0到3之间取值

hibernate.default_batch_fetch_size 为Hibernate关联的批量抓取设置默认数量.

取值 建议的取值为4, 8, 和16

hibernate.default_entity_mode 为由这个SessionFactory打开的所有Session指定默认的实体表现模式.

取值 dynamic-map,dom4j, pojo

hibernate.order_updates 强制Hibernate按照被更新数据的主键,为SQL更新排序。这么做将减少在高并发系统中事务的死锁。

取值 true | false

hibernate.generate_statistics 如果开启,Hibernate将收集有助于性能调节的统计数据.

取值 true | false

hibernate.use_identifer_rollback 如果开启, 在对象被删除时生成的标识属性将被重设为默认值.

取值 true | false

hibernate.use_sql_comments 如果开启, Hibernate将在SQL中生成有助于调试的注释信息,默认值为false.

取值 true | false

Hibernate JDBC和连接(connection)属性

hibernate.jdbc.fetch_size 非零值,指定JDBC抓取数量的大小 (调用Statement.setFetchSize()).

hibernate.jdbc.batch_size 非零值,允许Hibernate使用JDBC2的批量更新.

取值 建议取5到30之间的值

做自己的决定。然后准备好承担后果。

Hibernate之配置文件

相关文章:

你感兴趣的文章:

标签云: