hibernate配置大全
hibernate的基本用法

hibernate的基本用法Hibernate是一个开源的Java框架,用于简化数据库操作。
它为开发人员提供了一个更加简单、直观的方式来管理数据库,同时也提高了应用程序的性能和可维护性。
本文将逐步介绍Hibernate的基本用法,包括配置、实体映射、数据操作等。
一、配置Hibernate1. 下载和安装Hibernate:首先,我们需要下载Hibernate的压缩包并解压。
然后将解压后的文件夹添加到Java项目的构建路径中。
2. 创建Hibernate配置文件:在解压后的文件夹中,可以找到一个名为"hibernate.cfg.xml"的文件。
这是Hibernate的主要配置文件,我们需要在其中指定数据库连接信息和其他相关配置。
3. 配置数据库连接:在"hibernate.cfg.xml"文件中,我们可以添加一个名为"hibernate.connection.url"的属性,用于指定数据库的连接URL。
除此之外,还需要指定数据库的用户名和密码等信息。
4. 配置实体映射:Hibernate使用对象关系映射(ORM)来将Java类映射到数据库表。
我们需要在配置文件中使用"mapping"元素来指定实体类的映射文件。
这个映射文件描述了实体类与数据库表之间的对应关系。
二、实体映射1. 创建实体类:我们需要创建一个Java类,用于表示数据库中的一行数据。
这个类的字段通常与数据库表的列对应。
同时,我们可以使用Hibernate提供的注解或XML文件来配置实体的映射关系。
2. 创建映射文件:可以根据个人喜好选择使用注解还是XML文件来配置实体类的映射关系。
如果使用XML文件,需要创建一个与实体类同名的XML文件,并在其中定义实体类与数据库表之间的映射关系。
3. 配置实体映射:在配置文件中,我们需要使用"mapping"元素来指定实体类的映射文件。
Hibernate配置项

Xml代码1.<!--Hibernate Session工厂-->2.<bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">3.<property name="dataSource"ref="dataSource"/>4.<property name="packagesToScan">5.<list>6.<value></value>7.</list>8.</property>9.<property name="hibernateProperties">10. <props>11. <prop key="hibernate.cache.provider_class">${hibernate.cache.provider_class}</prop>12. <prop key="e_query_cache">${hibere_query_cache}</prop>13. <prop key="hibernate.dialect">${hibernate.dialect}</prop>14. <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>15. <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop>16. <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop>17. <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>18. <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>19. <prop key="hibernate.show_sql">${e_sql_comments}</prop>20. <prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.cache.provider_configuration_fil e_resource_path}</prop>21. </props>22. </property>23.</bean>hibernate.properties#Oracle方言# hibernate.dialect=org.hibernate.dialect.MySQL5Dialect# hibernate.dialect=org.hibernate.dialect.SQLServerDialect#hibernate方言hibernate.dialect=org.hibernate.dialect.SQLServerDialect#是否启用二级缓存,e_query_cache=true#二级缓存class# hibernate.cache.provider_class=org.hibernate.cache.NoCacheProvider #hibernate.cache.provider_class=org.hibernate.cache.SingletonEhCachePr oviderhibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider#二级缓存配置文件hibernate.cache.provider_configuration_file_resource_path=/cache/ehca che.xml#是否同步数据库结构(自动创建|更新|验证数据库表结构)#none: 不做任何操作#create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行。
Hibernate.cfg.xml常用配置总结

Hibernate.cfg.xml常用配置总结测试时候Hibernate有如下常用甚至更多的配置,总结如下:(1)Hibernate.show_sql:是否在运行时候sql语句输出到控制台,编码阶段便于测试的。
(默认设置为true)(2)Hibernate.format_sql:输出在控制台sql语句是否进行排版,便于阅读。
(默认设置为true)(3)Hbm2ddl.auto:可帮助由java代码生成数据库脚本,进而生成具体表结构。
如:create/update/create-drop/validate。
Create:表示每次创建新的表格,原来的表删除,同时数据全部清楚重新插入数据。
(每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
)Update:表示在原有的表上更新,保存原来的数据。
(也就是原有数据不删除,依然存在,不需要重新插入,加载hibernate自动更新数据库结构)Create-drop:加载hibernate时创建,退出是删除表结构Validate:加载hibernate时,验证创建数据库表结构,如果是不同的话则不创建表。
(4)Hibernate.default_schema:默认数据库,如果设置了,则创建表的时候,所有表有前缀。
(5)Hibernate.dialect:配置hibernate方言,可针对特定的数据库优化。
(6)1.请慎重使用此参数,没必要就不要随便用。
2.如果发现数据库表丢失,请检查hibernate.hbm2ddl.auto的配置3.以上4个属性对同一配置文件下所用有的映射表都起作用例子如下:(一)Hibernate.format_sql:输出在控制台sql语句是否进行排版,便于阅读。
(默认设置为true)(二)Hbm2ddl.auto:可帮助由java代码生成数据库脚本,进而生成具体表结构的:create:先删除,再次创建表,再插入信息。
Hibernate基本配置与操作

<property name="属性名" column="表的字段名"
type="..." length="" unique="true|false" not-null="true|false"/>
</class>
</hibernate-mapping>
4. session操作的典型代码:
Session session = ...;
Transaction tx = null;
try{
tx = session.beginTransaction();
session.save();....
mit();
Session session = factory.openSession();
☆4. Transaction:Hibernate对象底层事务的封装,默认采用手工提交事务方式,所以在进行CRUD操作时,要显示开启一个事务。
Transaction tx = session.beginTransaction();
5) update() 可以使一个脱管对象重附到新的session中, 成为持久化对象。
6) merge() 方法做合并。
传入瞬时对象,做插入。创建一个持久对象,把瞬时对象的状态复制过来,返回这个持久化对象。
传入脱管对象:先检查session缓存中有没有跟这个脱管对象的OID相同的持久化对象
<class name="实体类名" table="表名">
<id name="OID的名字" column="表的主键名" type="hibernate内置的映射类别">
Hibernate 参数设置一览表

Hibernate 参数设置一览表2007年11月25日星期日21:59Hibernate 参数设置一览表(强烈推荐)属性名用途hibernate.dialect 一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL. 取值full.classname.of.Dialecthibernate.show_sql 输出所有SQL语句到控制台. 有一个另外的选择是把org.hibernate.SQL这个log category设为debug。
eg.true | falsehibernate.format_sql 在log和console中打印出更漂亮的SQL。
取值true | false hibernate.default_schema 在生成的SQL中, 将给定的schema/tablespace附加于非全限定名的表名上. 取值SCHEMA_NAMEhibernate.default_catalog 在生成的SQL中, 将给定的catalog附加于非全限定名的表名上. 取值CATALOG_NAMEhibernate.session_factory_name SessionFactory 创建后,将自动使用这个名字绑定到JNDI中. 取值jndi/composite/namehibernate.max_fetch_depth 为单向关联(一对一, 多对一)的外连接抓取(outer join fetch)树设置最大深度. 值为0意味着将关闭默认的外连接抓取. 取值建议在0到3之间取值hibernate.default_batch_fetch_size 为Hibernate关联的批量抓取设置默认数量. 取值建议的取值为4, 8, 和16hibernate.default_entity_mode 为由这个SessionFactory打开的所有Session指定默认的实体表现模式. 取值dynamic-map, dom4j, pojohibernate.order_updates 强制Hibernate按照被更新数据的主键,为SQL更新排序。
hibernate配置文件说明

create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行。会导致数据库表数据丢失。
create-drop: 每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
(2)hibernate.show_sql打印所有的SQL语句到控制台,可以通过设置org.hibernate.SQL类的日志策略到DEBUG级,实现同样的效果。取值 true|false。
(3)hibernate.format_sql 格式化SQL语句在打印到控制台或写入日志文件时。取值true|false。
hibernate.cache.provider_class=org.hibernate.cache.SingletonEhCacheProvider
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
# 二级缓存配置文件
#Batch Size越大,批量操作的向数据库发送sql的次数越少,速度就越快。
hibernate.jdbc.batch_size=50
#设置外连接抓取树的最大深度取值. 建议设置为0到3之间
#hibernate.max_fetch_depth
#是否显示最终执行的SQL(开发环境)
hibernate.show_sql=false
# 格式化显示的SQL
hibernate.format_sql=false
# 如果设置为true,Hiberante将为SQL产生注释,这样更利于调试。默认值为false。取值为true|false。
【Hibernate】Hibernate框架配置详解

【Hibernate】Hibernate框架配置详解通过Hibernate我们可以⽅便地操作数据库读取出来的信息,减少了繁琐的JDBC操作。
⼀般情况下,有两种⽅式可以进⾏Hibernate的配置,⼀种是通过配置⽂件进⾏配置,另⼀种是通过注解进⾏配置。
我将通过注解简单介绍Hibernate框架的配置。
Hibernate框架的配置⼀般可以分为以下⼏个步骤:1.添加基本的Hibernate Jar包2.添加注解的Jar包3.编写Hibernate.cfg.xml⽂件4.编写POJO⽂件,并编写注释5.编写测试⽂件,导出到数据库进⾏测试。
⼀、导⼊基本的Hibernate Jar包⼆、导⼊Hibernate Annotation 的Jar包三、编写Hibernate.cfg.xml⽂件1<?xml version='1.0' encoding='UTF-8'?>2<!DOCTYPE hibernate-configuration PUBLIC3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"4 "/hibernate-configuration-3.0.dtd">56<!-- Generated by MyEclipse Hibernate Tools. -->7<hibernate-configuration>89<session-factory>10<!-- 配置JDBC连接属性 -->11<property name="myeclipse.connection.profile">12 com.mysql.jdbc.Driver13</property>14<property name="connection.url">15 jdbc:mysql://localhost:3306/basehibernate16</property>17<property name="ername">root</property>18<property name="connection.password">sa</property>19<property name="connection.driver_class">20 com.mysql.jdbc.Driver21</property>22<property name="dialect">23 org.hibernate.dialect.MySQLDialect24</property>2526<!-- ⾃动建表 -->27<property name="hbm2ddl.auto">auto</property>28<property name="connection.autocommit">true</property>29<mapping class="com.basehibernate.pojo.Department"/>30<mapping class="com.basehibernate.pojo.Employee"/>31<mapping class="com.basehibernate.pojo.Meal"/>32<mapping class="com.basehibernate.pojo.OrderMeal"/>33<mapping class="com.basehibernate.pojo.GradeMeal"/>34<mapping class="com.basehibernate.pojo.RewardMeal"/>3536</session-factory>3738</hibernate-configuration>不同数据库连接在Hibernate.cfg.xml中的配置不同,这⾥以MySQL为例。
Hibernate配置汇总

Hibernate3的配置参数汇总2009年09月05日星期六 14:57SQL方言1、Hibernate JDBC属性属性名用途hibernate.connection.driver_class jdbc 驱动类hibernate.connection.url jdbc URL ername 数据库用户hibernate.connection.password 数据库用户密码hibernate.connection.pool_size 连接池容量上限数目注:使用C3P0的properties样例代码:hibernate.connection.driver_class = org.postgresql.Driver hibernate.connection.url = jdbc:postgresql://localhost/mydatabase ername = myuserhibernate.connection.password = secrethibernate.c3p0.min_size=5hibernate.c3p0.max_size=20hibernate.c3p0.timeout=1800hibernate.c3p0.max_statements=50hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect2、Hibernate的数据源属性属性名用途hibernate.connection.datasource 数据源JNDI名字hibernate.jndi.urlJNDI提供者的URL (可选)hibernate.jndi.class J NDI InitialContextFactory类 (可选)ername 数据库用户 (可选) hibernate.connection.password 数据库用户密码 (可选)注:应用程序服务器JNDI数据源的hibernate.properties样例代码:hibernate.connection.datasource = java:/comp/env/jdbc/test hibernate.transaction.factory_class = \org.hibernate.transaction.JTATransactionFactoryhibernate.transaction.manager_lookup_class = \org.hibernate.transaction.JBossTransactionManagerLookuphibernate.dialect = org.hibernate.dialect.PostgreSQLDialect3、Hibernate配置属性(可选)属性名用途hibernate.dialect一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL.取值full.classname.of.Dialecthibernate.show_sql输出所有SQL语句到控制台.取值true | falsehibernate.format_sql在log和console中打印出更漂亮的sql.取值true | falsehibernate.default_schema在生成的SQL中, 将给定的schema/tablespace附加于非全限定名的表名上.取值SCHEMA_NAMEhibernate.default_catalog在生成的SQL中, 将给定的catalog附加于没全限定名的表名上.取值CATALOG_NAMEhibernate.session_factory_nameSessionFactory创建后,将自动使用这个名字绑定到JNDI中.取值jndi/composite/namehibernate.max_fetch_depth为单向关联(一对一, 多对一)的外连接抓取(outer join fetch)树设置最大深度. 值为0意味着将关闭默认的外连接抓取.取值建议在0到3之间取值hibernate.default_batch_fetch_size为Hibernate关联的批量抓取设置默认数量.取值建议的取值为4, 8, 和16hibernate.default_entity_mode为由这个SessionFactory打开的所有Session指定默认的实体表现模式.取值dynamic-map, dom4j, pojohibernate.order_updates强制Hibernate按照被更新数据的主键,为SQL更新排序。
Hibernate的连接池和数据源配置

Hibernate的三种连接池设置C3P0、Proxool和DBCP一、Hibernate连接池配置:Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP。
在配置连接池时需要注意的有三点:一、Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已经不再推荐使用,官方的解释是这个连接池存在缺陷。
如果你因为某种原因需要在Hibernate3中使用DBCP,建议采用JNDI方式。
二、默认情况下(即没有配置连接池的情况下),Hibernate会采用内建的连接池。
但这个连接池性能不佳,且存在诸多BUG(笔者就曾在Mysql环境下被八小时连接悬空问题困扰过),因此官方也只是建议仅在开发环境下使用。
三、Hibernate2和Hibernate3的命名空间有所变化。
例如,配置C3P0时的provider_cla ss有Hibernate2环境下使用net.sf.hibernate.connection.C3P0ConnectionProvider,在Hibernate3环境下使用org.hibernate.connection.C3P0ConnectionProvider。
下面是Hibernate环境下几种常见的连接池配置:1.Hibernate默认连接池<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configurationPUBLIC "-//Hibernate/Hibernate Configuration DTD//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory ><!—JDBC驱动程序--><property nam e="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 连接数据库的URL--><property nam e="connection.url">jdbc:m ysql://localhost:3306/schoolproject</property><property nam e="eUnicode">t rue</property><property nam e="connection.characterEncoding">UTF-8</property><!--连接的登录名--><property nam e="ername">root</property><!—登录密码--><property nam e="connection.password"></property><!--是否将运行期生成的SQL输出到日志以供调试--><property nam e="show_sql">t rue</property><!--指定连接的语言--><property nam e="dialect">org.hibernate.dialect.MySQLDialect</property><!--映射Student这个资源--><mapping resource="com/wqbi/model/pojo/student.hbm.xml" /></session-factory></hibernate-configuration>2.C3P0连接配置<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configurationPUBLIC "-//Hibernate/Hibernate Configuration DTD//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory ><!—JDBC驱动程序--><property nam e="connection.driver_class">com.mysql.jdbc.Driver</property><!-- 连接数据库的URL--><property nam e="connection.url">jdbc:m ysql://localhost:3306/schoolproject</property><property nam e="eUnicode">t rue</property><property nam e="connection.characterEncoding">UTF-8</property><!--连接的登录名--><property nam e="ername">root</property><!--登录密码--><property nam e="connection.password"></property><!-- C3P0连接池设定--><property nam e="hibernate.connection.provider_class">org.hibernate.connectio n.C3P0ConnectionProvider</property><property nam e="hibernate.c3p0.m ax_size">20</property><property nam e="hibernate.c3p0.m in_size">5</property><property nam e="hibernate.c3p0.tim eout">120</property><property nam e="hibernate.c3p0.m ax_statem ents">100</property><property nam e="hibernate.c3p0.idle_test_period">120</property><property nam e="hibernate.c3p0.acquire_increment">2</property><!--是否将运行期生成的SQL输出到日志以供调试--><property nam e="show_sql">t rue</property><!--指定连接的语言--><property nam e="dialect">org.hibernate.dialect.MySQLDialect</property><!--映射Student这个资源--><mapping resource="com/wqbi/model/pojo/student.hbm.xml" /></session-factory></hibernate-configuration>3.proxool连接池(1) 先写proxool的配置文件,文件名:proxool.xml(一般放在与hibernate.cfg.xml文件在同一个目录中)本例配置的是MYSQL数据库,数据库的名字为schoolproject<?xml version="1.0" encoding="UTF-8"?><!-- the proxool configuration can be em bedded within your own application's.Anything outside the "proxool" tag is ignored. --><something-else-entirely><proxool><!--连接池的别名--><alias>DBPool</alias><!--proxool只能管理由自己产生的连接--><driver-url>jdbc:m ysql://localhost:3306/schoolproject?useUnicode=true&characterEnco ding=UTF8</driver-url><!—JDBC驱动程序--><driver-class>com.m ysql.jdbc.Driver</driver-class><driver-properties><property nam e="user" value="root"/><property nam e="password" value=""/></driver-properties><!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁--><house-keeping-sleep-tim e>90000</house-keeping-sleep-tim e><!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受--><maximu m-new-connections>20</maximum-new-connections><!-- 最少保持的空闲连接数--><prototype-count>5</prototype-count><!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定--><maximu m-connection-count>100</maximu m-connection-count><!-- 最小连接数--><minimum-connection-count>10</minimu m-connection-count></proxool></something-else-entirely>(2)配置hibernate.cfg.xml文件<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configurationPUBLIC "-//Hibernate/Hibernate Configuration DTD//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory ><property nam e="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property><property nam e="hibernate.proxool.pool_alias">DBPool</property><property nam e="hibernate.proxool.xml">proxoolconf.xml</property><!--是否将运行期生成的SQL输出到日志以供调试--><property nam e="show_sql">t rue</property><!--指定连接的语言--><property nam e="dialect">org.hibernate.dialect.MySQLDialect</property><!--映射Student这个资源--><mapping resource="com/wqbi/model/pojo/student.hbm.xml" /></session-factory></hibernate-configuration>(1) hibernate.connection.provider_class定义Hibernate的连接加载类,这里Proxool 连接池是用这个,不同的连接池有不同的加载类,可以查阅Hibernate文档获取相关信息(2) hibernate.proxool.pool_alias这里就是用我们上面提到的连接池的别名(3) hibernate.proxool.xml是向Hibernate声明连接池的配置文件位置,可以用相对或绝对路径,用相对路径时要注意一定在要Path范围内!不然会抛出异常。
hibernate配置参数

<prop key="hibernate.dbcp.ps.maxWait">1200</prop>
<prop key="hibernate.dbcp.ps.maxIdle">10</prop>
<property name="url" value="${jdbc.url}" /> //连接url,
<property name="username" value="${ername}" /> //连接用户名
<property name="dataSource" ref="dataSource" />
<property name="configLocation">
<value>WEB-INF/hibernate.cfg.xml</value> //hibernate配置文件位置
</prop>
<prop key="hibernate.query.factory_class"> //选择HQL解析器的实现
org.hibernate.hql.ast.ASTQueryTranslatorFactory
<property name="password" value="${jdbc.password}" /> //连接密码
Hibernate详细配置

<property name="name" column="name"/>
2010-02-01
8
配置映射
类:
public class Card { private String id; private String serial; private Citizen citizen; }
<property name="name" column="name"/> <set name="classTbs" table="teacher_class"> <key column="teacher_id"/> <many-to-many column="CLASS_ID_MY" class="ClassTb"/> </set> </class>
2010-02-01
3
properties
Properties properties=new Properties(); properties.load(getClass().
.getClassLoader().getResourceAsStream("hib
ernate.properties")); Configuration config = new Configuration(); config.addProperties(System.getProperties()); config.addProperties(properties) SessionFactory sessionFactory = config.buildSessionFactory(); sessionFactory.openSession();
Hibernate 配置详解 (一)

Hibernate 配置详解(一)Hibernate的基本配置文件有两种:hibernate.cfg.xml和*.hbm.xml文件。
前者包含了Hibernate与数据库的基本连接信息,在Hibernate工作的初始阶段,这些信息被先后加载到Configuration和SessionFactory实例;后者包含了Hibernate的基本映射信息,即系统中每一个类与其对应的数据库表之间的关联信息,在Hibernate工作的初始阶段,这些信息通过hibernate.cfg.xml的mapping 节点被加载到Configuration和SessionFactory实例。
这两种文件信息包含了Hibernate的所有运行期参数。
下面我们用详细的例子来说明这两种文件的基本结构和内容。
一、hibernate.cfg.xml文件:<!--该文件的开头信息,对Hibernate而言,该类文件基本都这么开头:--> <?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><!-- 正文开始--><hibernate-configuration><!--下面是数据库的基本连接信息,对一个应用来说,设置一个session-factory节点就够了,除非我们中间使用了多个数据库--> <session-factory><!--数据库驱动信息--><propertyname="connection.driver_class">com.mysql.jdbc.Driver</property><!--url信息--><propertyname="connection.url">jdbc:mysql://localhost:3306/webases</property><!--用户名--><property name="ername">root</property><!--密码--><property name="connection.password">274507</property><!--数据库方言信息--><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!--指定Hibernate映射文件路径--><mapping resource="com/Hibernate/test_products.hbm.xml" /></session-factory></hibernate-configuration>。
Hibernate配置文件

Hibernate配置⽂件⼀、概述:1、Hibernate配置⽂件主要⽤于配置数据库连接和Hibernate运⾏时所需的各种属性2、每个Hibernate配置⽂件对应⼀个Cconfiguration对象3、Hibernate配置⽂件可以有两种格式:1)hibernate.properties2)hibernate.cfg.xml⼆、hibernate.cfg.xml的常⽤属性:1、JDBC连接属性:1)hibernate.connection.driver_class:数据库驱动2)hibernate.connection.url:数据库的url3)ername:数据库⽤户名4)hibernate.connection.password:数据库密码5)dialect:配置数据库的⽅⾔,根据底层的数据库不同产⽣不同的sql语句,Hibernate会针对数据库的特性在访问时进⾏优化2、C3P0数据库连接池属性:1)hibernate.c3p0.max_size:最⼤连接数2)hibernate.c3p0.min_size:最⼩连接数3)hibernate.c3p0.acquire_increment:当数据库连接池中的连接耗尽时,同⼀时刻获取多少个数据库连接4)hibernate.c3p0.timeout:连接池中连接对象在多长时间没有使⽤过后,就应该被销毁5)hibernate.c3p0.idle_test_period:表⽰连接池检测线程多长时间检测⼀次池内的所有连接对象是否超时,连接池本⾝不会把⾃⼰从连接池中移除⽽是专门有⼀个线程按照⼀定的时间间隔来做这件事,这个线程通过⽐较连接对象最后⼀次呗使⽤和当前时间的时间差来和timout做对⽐,进⽽决定是否销毁这个连接对象。
6)hibernate.c3p0.max_statements:缓存Statement对象的数量三、在hibernate.cfg.xml中配置C3P0:<property name="hibernate.c3p0.max_size">10</property><property name="hibernate.c3p0.min_size">5</property><property name="hibernate.c3p0.acquire_increment">2</property><property name="hibernate.c3p0.timeout">2000</property><property name="hibernate.c3p0.idle_test_period">2000</property><property name="hibernate.c3p0.max_statements">10</property>四、hibernate.cfg.xml的其他属性:1、show_sql:是否将运⾏时⽣成的sql语句输出到⽇志以供调试。
Hibernate主键、外键各类配置实例

Hibernate学习1、单主键、没有外键的Hibernate配置实例<hibernate-mapping><class name="com.pms.bean.base.BadCodeBean"table="tbNC"> <id name="badCode"column="NC_ID"><generator class="assigned"/></id><property name="desc"type="string"column="NC_DESC"></property> </class></hibernate-mapping>2、单主键、有外键的Hibernate配置实例<hibernate-mapping><class name="com.pms.bean.base.ProjectBean"table="tbProject"> <id name="prjname"column="PRJ_NAME"type="string"><generator class="assigned"></generator></id><many-to-one name=”customerCode”class=”com.pms.bean.base.CustomerBean”outer-join=”ture”not-null=”true”lazy=”false”><column name=”PRJ_CU_CODE”></column></many-to-one></hibernate-mapping>3、双主键、没有外键的Hibernate配置实例<hibernate-mapping><class name="com.pms.bean.base.LocationBean"table="tbLocation"> <composite-id><key-property name="lgort"column="LO_LGORT" type="string"><key-property name="werks"column="LO_WERKS" type="string"> </composite-id></class></hibernate-mapping>4、双主键、有外键的Hibernate配置实例<hibernate-mapping><class name="com.pms.bean.base.DepartNcBean"table="tbNCDept"> <composite-id><key-property name="ncBean"column="NCD_ID " lazy="false"><key-property name="deptDialogBean"column="NCD_DeptID "lazy="false"></composite-id><many-to-one name=”badType”class=”com.pms.bean.base.BadTypeBean”outer-join=”ture”not-null=”true”lazy=”false”><column name=”NCD_BadTypeCode”></column></many-to-one></class></hibernate-mapping>5、双主键中的两个主键都被作为外键被调用的Hibernate配置实例详细举例讲解:例如工厂和生产调度员组合成双主键,现在有一个表里面有两个外键分别是工厂和生产调度员。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
<hibernate-mapping package="包名"><classs schema="数据库用户名" name="类名" table="表名"><id name="主键在java类中的字段名" column="对应表中字段" type="类型"><generator class="主键生成策略"/></id> ……</class></hibernate-mapping>1. 主键(id)Hibernate的主键生成策略有如下几种:1) assigned主键由外部程序负责生成,在save() 之前指定。
2) hilo通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。
3) seqhilo与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的Sequence,适用于支持Sequence 的数据库,如Oracle。
4) increment主键按数值顺序递增。
此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。
这种方式可能产生的问题是:不能在集群下使用。
5) identity采用数据库提供的主键生成机制。
如DB2、SQL Server、MySQL 中的主键生成机制。
6) sequence采用数据库提供的sequence 机制生成主键。
如Oralce 中的Sequence。
7) native由Hibernate 根据使用的数据库自行判断采用identity、hilo、sequence 其中一种作为主键生成方式。
8) uuid.hex由Hibernate 基于128 位UUID 算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
9) uuid.string与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在PostgreSQL 数据中。
10) foreign 主键配置举例如下:<id name="id" column="id" type="ng.Integer"><generator class="native"/></id> 另外还可以扩展Hibernate的类来做自己的主键生成策略,具体例子见:/topic/93391。
2. 普通属性(property)开发人员可以打开网址:/hibernate-mapping-3.0.dtd来查看hibernate3.0的dtd信息,可看到property的定义如下:<!ELEMENT property (meta*,(column|formula)*,type?)><!ATTLIST property name CDATA #REQUIRED><!ATTLIST property node CDATA #IMPLIED><!ATTLIST property access CDATA #IMPLIED><!ATTLIST property type CDATA #IMPLIED><!ATTLIST property column CDATA #IMPLIED><!ATTLIST property length CDATA #IMPLIED><!ATTLIST property precision CDATA #IMPLIED><!ATTLIST property scale CDATA #IMPLIED><!ATTLIST property not-null (true|false) #IMPLIED><!ATTLIST property unique (true|false) "false"><!ATTLIST property unique-key CDATA #IMPLIED><!ATTLISTpropertyindexCDATA#IMPLIED> <!-- include the columns spanned by this property in an index --><!ATTLIST property update (true|false) #IMPLIED><!ATTLIST property insert (true|false) #IMPLIED><!ATTLIST property optimistic-lock (true|false) "true"> ?<!-- only supported for properties of a class (not component) --><!ATTLIST property formula CDATA #IMPLIED><!ATTLIST property lazy (true|false) "false"><!ATTLIST property generated (never|insert|always) "never">它的各属性中比较常用的有:name(对应的java类的属性名称)、column(对应的表中的字段)、tyope(属性的类型,ng.String)、not-null(设置该属性是否为空,为true时表示非空,默认为false)和length(字段的长度限制)。
Eg1. <property name="accessname" column="accessName" type="ng.String" not-null="true" />Eg2. <property name="state" column="state" type="ng.Byte" not-null="true" />Eg3. <property name="description" column="description" type="ng.String" />3. 一对多关系(<many-to-one…/>和<set…></set>)一对多关系一般是用在一个表与另一个表存在外键关联的时候,例如用户表的组织id与组织表存在外键关联,则“一”方为组织表,“多”方为用户表,因为一个组织可以包含多个用户,而一个用户只能隶属于一个组织。
对于存在一对多关系和多对一关系的双方,需要在…hbm.xml中进行相应配置,这时在“一”方(例如:组织)需要在映射文件中添加<set…></set>元素,因为它包含多个“多”方的对象,一般的格式如下:<set name="java映射类中对应的属性" inverse="true" lazy="true"><key column="表中对应字段"/><one-to-many class="多方的类"/></set> Eg<set name="userSet" inverse="true" lazy="true"><key column="orgId"/><one-to-many class="User"/></set>“多”方(例如:用户)隶属于一个“一”方对象,一般的格式如下:<many-to-one name="java映射类中对应的属性" column="表中对应字段" class="类名" not-null="true" /> Eg.<many-to-one name="org" column="orgId" class="Organization" not-null="true" />4. 一对一关系(<one-to-one…/>)一对一关系相对一对多关系来说比较少见,但也在某些情况下要用到,例如有一个用户的基本信息表(USER)和一个用户的密码表(PASSWD)就存在一对一的关系。
下面来看一下一对一关系在Hibernate的配置。
其中主表(eg. 用户的基本信息表)的配置如下:<one-to-one name="主表对象中子表对象的属性名" class="子表对象的类名" cascade="save-update"/> Eg.<one-to-one name="password" class="com.amigo.dao.pojo.Passwd" cascade="save-update"/> 子表(eg. 用户的密码表)的配置如下:<one-to-one name="子表对象中主表对象的属性名" class="主表对象的类名" constrained="true" /> Eg.<one-to-one name="user" class="er " constrained="true" />5. 多对多关系(<many-to-many…/>)在数据库设计时,一般将多对多关系转换为两个一对多(或多对一)关系,例如在基于角色的权限系统中,用户和角色存在的关系就是典型的多对多关系,即一个用户可以具有多个角色,而一个角色又可以为多个用户所有,一般在设计时,都会加一个用户与角色的关联表,该表与用户表以及角色表都存在外键关联。