hibernate.hbm.xml配置详解
Hibernate.cfg.xml常用配置总结
![Hibernate.cfg.xml常用配置总结](https://img.taocdn.com/s3/m/45e54c7ef5335a8102d220e7.png)
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配置文件说明
![hibernate配置文件说明](https://img.taocdn.com/s3/m/719692315a8102d276a22ff7.png)
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框架配置详解](https://img.taocdn.com/s3/m/5345fd7fb94ae45c3b3567ec102de2bd9605de32.png)
【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为例。
hbm原理
![hbm原理](https://img.taocdn.com/s3/m/e0313009ef06eff9aef8941ea76e58fafbb04564.png)
hbm原理Hibernate映射文件(HBM)原理解析HBM(Hibernate映射文件)是Hibernate框架中重要的组成部分,用于映射Java类与数据库表之间的关系。
它提供了一种将对象模型与关系模型进行转换的机制,使得开发人员可以使用面向对象的方式操作数据库。
本文将对HBM原理进行详细解析,帮助读者更好地理解和应用Hibernate框架。
一、HBM文件的基本结构HBM文件通常以.hbm.xml作为文件后缀,采用XML格式描述。
它包含了数据库表和Java类之间的映射关系及其属性信息。
一个典型的HBM文件由根元素<hibernate-mapping>包裹,内部包含了<class>、<id>、<property>等元素来定义映射关系。
1. <class>元素:用于描述Java类与数据库表之间的映射关系。
它的name属性指定了Java类的全限定名,table属性指定了对应的数据库表名。
2. <id>元素:用于定义主键映射关系。
它的name属性指定了Java 类中对应的主键属性名,column属性指定了对应的数据库列名,type属性指定了主键属性的数据类型。
3. <property>元素:用于描述普通属性的映射关系。
它的name属性指定了Java类中对应的属性名,column属性指定了对应的数据库列名,type属性指定了属性的数据类型。
二、HBM文件中的映射关系HBM文件中的映射关系有三种类型:一对一、一对多和多对多。
下面将分别进行详细介绍。
1. 一对一关系:指的是一个Java类的对象与另一个Java类的对象之间的关系。
在HBM文件中,一对一关系可以通过<one-to-one>元素来定义。
它的name属性指定了Java类中对应的属性名,class 属性指定了关联的Java类名。
2. 一对多关系:指的是一个Java类的对象与多个另一个Java类的对象之间的关系。
【黑马程序员】Hibernate映射关系(一对多,一对一,多对多)xml配置
![【黑马程序员】Hibernate映射关系(一对多,一对一,多对多)xml配置](https://img.taocdn.com/s3/m/ab6c915ba8956bec0975e3aa.png)
【黑马程序员】Hibernate映射关系(一对多,一对一,多对
多)xml配置
最近看hibernate课程内容中没有映射文件(多对多,一对一)的xml配置教程,所以自己总结了一下:(源码参考下方)
本文内容主要包括:一对多,一对一(唯一外键,主键对应),多对多,HQL隐示内连接(近SQL的一种写法),Date数据类型,Double数据类型等.
主要:测试类
其中m2m,o2m,o2o分别表示多对多,一对多,一对一(有两种:唯一外键,主键对应) typeTest包下是对Date,Double测试的实体类
具体的测试方法参考如下:
主要在配置文件,配置文件都在对应的包下,课自行阅读.发现问题,欢迎指正!!。
Hibernate_映射配置文件详解
![Hibernate_映射配置文件详解](https://img.taocdn.com/s3/m/8be8092d2af90242a895e5e2.png)
Prepared by TongGang
hibernate.cfg.xml的常用属性
• • • • • • • • • connection.url:数据库URL ername:数据库用户名 connection.password:数据库用户密码 connection.driver_class:数据库JDBC驱动 show_sql:是否将运行期生成的SQL输出到日志以供调试。取 show_sql 值 true | false dialect:配置数据库的方言,根据底层的数据库不同产生不 dialect 同的sql语句,Hibernate 会针对数据库的特性在访问时进行 优化。 hbm2ddl.auto:在启动和停止时自动地创建,更新或删除数据 hbm2ddl.auto 库模式。取值 create | update | create-drop resource:映射文件配置,配置文件名必须包含其相 mapping resource 对于根的全路径 connection.datasource :JNDI数据源的名称
• Class:定义一个持久化类 Class: • name (可选): 持久化类(或者接 (可选): 持久化类( 可选 口)的类名 • table (可选 - 默认是类的非全限 (可选 定名): 定名): 对应的数据库表名 • discriminator-value (可选 - 默 discriminator(可选 认和类名一样): 认和类名一样): 一个用于区分不 同的子类的值,在多态行为时使用。 同的子类的值,在多态行为时使用。 它可以接受的值包括 null 和 not null。 null。
Prepared by TongGang
Hibernate 配置详解 (一)
![Hibernate 配置详解 (一)](https://img.taocdn.com/s3/m/aa2b0517866fb84ae45c8d5a.png)
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入门-基础配置](https://img.taocdn.com/s3/m/0d9f2873a45177232f60a2cb.png)
Hibernate入门 - 基础配置作者:robbin (MSN:robbin_fan AT hotmail DOT com)版权声明:本文严禁转载,如有转载请求,请和作者联系Hibernate配置文件可以有两种格式,一种是hibernate.properties,另一种是hibernate.cfg.xml后者稍微方便一些,当增加hbm映射文件的时候,可以直接在hibernate.cfg.xml里面增加,不必像hibernate.properties必须在初始化代码中加入。
但不管怎么说,两种的配置项都是一样的,下面详细介绍:在Hibernate的src目录下有一个hibernate.properties模板,我们不必自己从头写,修改模板就可以了:)∙hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'这个配置意思是当你在Hibernate里面输入true的时候,Hibernate会转化为1插入数据库,当你在Hibernate里面输入false的时候,Hibernate会转化为0插入数据库,后面的Y,N同理。
对于某些数据库,例如Oracle来说,没有boolean数据类型,就是采用1代表true,0代表false,因此使用这个配置在Hibernate里面直接用true/false 会非常直观。
∙hibernate.dialect net.sf.hibernate.dialect.MySQLDialecthibernate.connection.driver_class com.mysql.jdbc.Driverhibernate.connection.url jdbc:mysql:///testername roothibernate.connection.password这是一个连接MySQL数据库的例子,很直观,不必解释,不同的数据库的连接参数模板中全部给出了。
hibernate-一对多,多对多关系
![hibernate-一对多,多对多关系](https://img.taocdn.com/s3/m/bb06dc641711cc7931b71628.png)
一对多关系配置和级联操作1.1一对多关系的XML配置文件以客户和联系人表为例:首先在持久化类一的一方中添加多的一方的对象的Set集合(Set集合在XML中配置比较简单);在多的一方添加一的一方对象的引用。
一的一方:Customer的配置文件:Customer.hbm.xml如下:多的一方:LinkMan.hbm.xml文件的配置注意的一个问题:在一对多的关系中,如果两张表都对外键维护的话会造成发送多余的SQL 语句,所以一般是让一的一方放弃对外键的维护。
还有别忘了在hibernate.cfg.xml文件中添加这俩文件的映射在set中添加属性inverse=“true”(cascade是级联属性)1.2一对多关系的级联保存级联是有方向性的:也就是说在一对多的关系中有两种级联保存的方式:1.通过一的一方保存多的一方(重点);2.通过多的一方级联保存一的一方(了解)1.2.1 一到多的级联保存方向的操作操作后的效果:例如客户和联系人的表关系,在保存客户后就相应把该客户的联系人全部保存。
只用保存客户对象就可以了。
操作的配置:在set集合中添加属性cascade=”true”具体操作如下:1.2.2多方到一方的级联保存操作操作的效果:用客户和联系人表举例,就是在保存联系人的时候保存其客户,这有点违背开发的需求,所以不是很常用。
具体的操作如下:操作设置:在多的一方添加属性cascade=”true”属性只需要将联系人与客户对象相关联就可以了1.3级联删除1.3.1 一方到多方的级联删除一到多的级联删除举例:删除客户的时候一并删除其所有的联系人操作设置:在一的一方的xml文件set标签中添加cascade=”delete”属性(cascade=”save-update,delete”表示级联保存和级联删除)1.3.2 多方到一方的级联删除举例:删除联系人的时候一并删除该客户(不符合需求,很少用)操作设置:在多的一方<many-to-one>标签中添加cascade=”delete”或者还需要级联保存时(cascade=”save-update,delete”)二多对多关系的XML配置和级联操作2.1 XML文件的配置以用户表和角色表举例:一个用户有多个角色,一个角色可以有多个人。
Hibernate_@注解和xml配置介绍
![Hibernate_@注解和xml配置介绍](https://img.taocdn.com/s3/m/fa9357f604a1b0717fd5dd82.png)
1.show_sql和format_sql
在hibernate.cfg.xml配置文件中添加如下的配置:
<property name="format_sq">true</property>,将sql语句格式化一下
2.类名与数据库表名不一致
在类名上方添加注解:@Table(name="XXX")
3.字段名和属性名不一致
在对应字段的getXXX方法上面上方添加注解:@Column(name="XXX")
4.取消字段的持久化
在对应字段的getXXX方法上面上方添加注解:@Transient
5.指定Date存储的格式:
在时间对应的getXXX方法上面添加注解:
@Temporal(TemporalType.TIME)只存储时间: hh:mm:ss
@Temporal(TemporalType.DATE)只存储日期: yyyy-MM-dd
@Temporal(TemporalType.DATETIME) 时间日期一起存储:yyyy-MM-dd hh:mm:ss
6.ID生成策略:
∙Id的get方法上方添加@GeneratedValue ,mysql默认是auto_increment,Oracle中默认是hibernate_sequence(名称固定)
∙联合主键:如图:
★:在主键类属性的get方法上方添加@EmbeddedId,设定联合主键!在主键类中写联合属性的get和set方法!
★:这个主键类必须重写public boolean equals()和public int hashCode()方法!实现Serializable接口。
hibernate.hbm.xml配置详解
![hibernate.hbm.xml配置详解](https://img.taocdn.com/s3/m/d49a18aedd3383c4bb4cd2fc.png)
Hibernate中hbm.xml配置说明。
在Hibernate中,各表的映射文件….hbm.xml可以通过工具生成,例如在使用MyEclipse开发时,它提供了自动生成映射文件的工具。
配置文件的基本结构如下:Xml代码1<?xml version="1.0"encoding='UTF-8'?>23<!DOCTYPE hibernate-mapping PUBLIC4"-//Hibernate/Hibernate Mapping DTD 3.0//EN"5"/hibernate-mapping-3.0.dtd">6<hibernate-mapping package="包名">7<class name="类名"table="表名">8<id name="主键在java类中的字段名"column="对应表中字段"type="类型">9<generator class="主键生成策略"/>10</id>1112……13</class>14</hibernate-mapping>1. 主键(id)Hibernate的主键生成策略有如下几种:1) assigned主键由外部程序负责生成,在save() 之前指定。
2) hilo通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。
3) seqhilo与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的Sequence,适用于支持Sequence 的数据库,如Oracle。
4) increment主键按数值顺序递增。
hibernate解析
![hibernate解析](https://img.taocdn.com/s3/m/e78b70c25fbfc77da269b16e.png)
Hibernate 源码解读首先Configuration里:new Configuration()时创建SettingFactory调用有参的构造方法:后直接reset();Reset()方法:第一件事就是初始化metadataSourceQueue而类中hbmMetadatToEntityNamesMap和hbmMetadataByEntityNameXRef是做什么呢?Environment里面是一些hibernate.hbm.xml中数据库的配置:当调用configure()方法时,会默认调用configure(“/hibernate.cfg.xml”)方法。
在这里从resource如”hibernate.cfg.xml”文件中获取信息流.stream。
调用doConfigure(stream,resource)方法,返回一个Configuration对象。
进入doConfgure方法中:通过xmlHelper.createSAXReader(resourceName,errors,entityResolver).read(newInputStource(stream));创建Document对象。
接着调用doConfiguration(Document doc):Propertes property存储初始变量,获取了hibernate.porperty中的信息。
通过doConfiguration(Document doc)中的Property.setProperty(Environment.SESSION_FACTORY_NAME,name)加载了hibernate.cfg.xml 中的session-factory的属性.又通过addPoperty(Element parent)来加载hibernate.cfg.xml中的property相关配置信息。
部分代码如下:///为什么会用verifyProperty()方法不太明白这些信息最终通过Enviroment.verifyProperties(properties)加入程序中!!然后调用了parseSessionFactory(sfNode,name)//sfNode是session-factory中的节点,name是sfNode的中的属性部分代码如下:部分代码如下:如果是resource配置,进行调用addResource(String resourceName)进行解释xxx.hbm.xml文件:调用:add(resourceInputStream,’’resource”,resourceName);也就是这个方法:`private XmlDocument add(InputSource inputSource, String originType, String originName) {return add( inputSource, new OriginImpl( originType, originName ) );}下面来看看SessionFactory buildSessionFactory()方法此方法返回一个sessioF actoy对象:settings 对象传入sessionFactoryImpl中,而settings对象中含有properties的内容,这就是说sessionFactoryImpl完全可以创建与数据库的连接。
hibernate.xml文件详解
![hibernate.xml文件详解](https://img.taocdn.com/s3/m/842b00233868011ca300a6c30c2259010202f37a.png)
hibernate.xml⽂件详解1 <!--标准的XML⽂件的起始⾏,version='1.0'表明XML的版本,encoding='gb2312'表明XML⽂件的编码⽅式-->2 <?xml version='1.0' encoding='gb2312'?>3 <!--表明解析本XML⽂件的DTD⽂档位置,DTD是Document Type Definition 的缩写,即⽂档类型的定义,XML解析器使⽤DTD⽂档来检查XML⽂件的合法性。
/hibernate-configuration-3.0dtd可以在Hibernate3.14 <!DOCTYPE hibernate-configuration PUBLIC5"-//Hibernate/Hibernate Configuration DTD 3.0//EN"6"/hibernate-configuration-3.0.dtd">7 <!--声明Hibernate配置⽂件的开始-->8 <hibernate-configuration>9 <!--表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的⼀个类,这个类主要负责保存HIbernate的配置信息,以及对Session的操作-->10 <session-factory>11 <!--配置数据库的驱动程序,Hibernate在连接数据库时,需要⽤到数据库的驱动程序-->12 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver </property>13 <!--设置数据库的连接url:jdbc:mysql://localhost/hibernate,其中localhost表⽰mysql服务器名称,此处为本机, hibernate是数据库名-->14 <property name="hibernate.connection.url">jdbc:mysql://localhost/hibernate </hibernate>15 <!--连接数据库是⽤户名-->16 <property name="ername">root </property>17 <!--连接数据库是密码-->18 <property name="hibernate.connection.password">123456 </property>19 <!--数据库连接池的⼤⼩-->20 <property name="hibernate.connection.pool.size">20 </property>21 <!--是否在后台显⽰Hibernate⽤到的SQL语句,开发时设置为true,便于差错,程序运⾏时可以在Eclipse的控制台显⽰Hibernate的执⾏Sql语句。
nhibernate generator hilo用法
![nhibernate generator hilo用法](https://img.taocdn.com/s3/m/a110125dfd4ffe4733687e21af45b307e871f9ef.png)
nhibernate generator hilo用法NHibernate的hilo生成器是一种用于生成数据库表的唯一标识符的机制。
它使用一个hi值,来跟踪当前生成的值,并保持在数据库表中。
以下是NHibernate hilo生成器的用法:1.在映射文件(.hbm.xml)中定义标识符生成器:```xml<class name="YourClassName" table="YourTableName"><id name="Id" column="YourColumnName"><generator class="hilo"/></id>...</class>```2.在配置文件(hibernate.cfg.xml)中配置hilo生成器的参数:```xml<hibernate-configuration><session-factory>...<propertyname="hibernate.id.new_generator_mappings">true</property> <propertyname="hibernate.id.optimizer.pooled.preferred">hilo</property> <propertyname="hibernate.id.optimizer.pooled.lo">10</property>...</session-factory></hibernate-configuration>```3.在代码中使用Session.Save()来保存实体对象:```csharpUsing (var session = sessionFactory.OpenSession()){using (var transaction = session.BeginTransaction()){YourClassName obj = new YourClassName();session.Save(obj);mit();}}```使用hilo生成器时,它会根据你在配置文件中设置的值(如lo和table等)自动生成唯一标识符。
hbm_xml配置详解
![hbm_xml配置详解](https://img.taocdn.com/s3/m/901bf0c86137ee06eff91827.png)
locale timezone currency
java.util.Locale java.util.TimeZone java.util.Currency
VARCHAR VARCHAR VARCHAR
定长字符 定长字符 定长字符
2、自定义映射类型 Hibernate 提供了自定义映射类型接口,允许用户以编程的方式创建自定义的映射类型。用户自定义 的映射类型需要实现 erType 或 positeUserType 接口。具体 的创建自定义映射类型的方法请参考 hibernate 官方文档或相关资料,这里不再详细介绍。
Hibernate 映射类型 在对象/关系映射文件中,Hibernate 采用映射类型作为 Java 类型和 SQL 类型的桥梁。Hibernate 映射 类型分为 2 种:内置映射类型和自定义映射类型。 1、内置映射类型 Hibernate 对所有的 Java 原生类型、常用的 Java 类型如 String、Date 等都定义了内置的映射类型。 表 2 列出了 Hibernate 映射类型、对应的 Java 类型以及对应的标准 SQL 类型。 表 2 Hibernate 内置映射类型 Hibernate 映射类型 integer/int long short byte float double big_decimal character string boolean/ yes_no/true_false date timestamp calendar calendar_date binary text serializable clob blob class Java 类型 ng.Integer/int ng.Long/long ng.Short/short ng.Byte/byte ng.Float/float ng.Double/double java.math.BigDecimal ng.Character/ng.String/char ng.String ng.Boolean/Boolean java.util.Date/java.sql.Date java.util.Date/java.util.Timestamp java.util.Calendar java.util.Calendar byte[] ng.String 实现 java.io.Serializablej 接口的任意 Java 类 java.sql.Clob java.sql.Blob ng.Class 标准 SQL 类型 INTEGER BIGINT SMALLINT TINYINT FLOAT DOUBLE NUMERIC CHAR(1) VARCHAR BIT DATE TIMESTAMP TIMESTAMP DATE BLOB TEXT BLOB CLOB BLOB VARCHAR 定长字符 变长字符 布尔类型 日期 日期 日期 日期 BLOB CLOB BLOB CLOB BLOB 定长字符 大小 4 字节 8 字节 2 字节 1 字节 4 字节 8 字节
配置数据库映射文件hbm.xml
![配置数据库映射文件hbm.xml](https://img.taocdn.com/s3/m/9a469fc232d4b14e852458fb770bf78a65293a8f.png)
配置数据库映射⽂件hbm.xml在数据库映射⽅⾯,guzz⽀持类似hibernate的领域对象class-table映射。
也⽀持ibatis类似的在guzz.xml中映射。
hibernate的hbm.xml映射guzz兼容hibernate的配置⽂件(xxx.hbm.xml),你可以使⽤hibernate映射⼯具⽣成或维护这些映射,guzz将可以直接解析。
使⽤hibernate映射⽂件时,某些guzz的特性在hibernate mapping dtd中没有定义,⽂本编辑时不能⾃动提⽰,甚⾄会报错,但不影响使⽤。
配置领域对象到系统中对于hbm.xml配置的领域对象,每个对象在guzz.xml中增加⼀个business来声明:1<business name="user" dbgroup="default" file="classpath:org/guzz/test/User.hbm.xml"/>每个business标签对应1个领域对象。
business拥有5个属性:属性名Required作⽤name Required business name。
file Required hbm.xml⽂件位置dbgroup Optional对象存储到的数据库组。
默认为default。
class Optional如果填写,覆盖hbm.xml中定义的域对象classinterpret Optional⾃定义查询条件解析器。
⼀个典型的配置如下:1<business name="user" dbgroup="mainDB" class="er" interpret="" file="classpath:org/guzz/test/User.hbm.xml"/>2<business name="book" class="org.guzz.test.Book" file="classpath:org/guzz/test/Book.hbm.xml"/>其中,每个领域对象的定义可以在guzz测试源代码中找到。
hibernate实现有两种配置,xml配置与注释配置
![hibernate实现有两种配置,xml配置与注释配置](https://img.taocdn.com/s3/m/36155054804d2b160b4ec04c.png)
Hibernate实现有两种配置,xml配置与注释配置hibernate实现有两种配置,xml配置与注释配置。
(1):xml配置:hibernate.cfg.xml (放到src目录下)和实体配置类:xxx.hbm.xml(与实体为同一目录中)<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- Database connection settings --><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql://localhost:3306/hxj</property><property name="ername">root</property> <property name="connection.password">root</property><!-- JDBC connection pool (use the built-in) --><property name="connection.pool_size">1</property><!-- SQL dialect --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property><!-- Disable the second-level cache --><property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property><!-- Echo all executed SQL to stdout --><property name="show_sql">true</property><!-- Drop and re-create the database schema on startup --><!—update也可以用create/create-drop/update/validate代替, create 表示可以根据实体配置文件来自动生成表(只能生成表).--><property name="hbm2ddl.auto">update</property>// 实体配置类<mapping resource="com/wsw/struts/model/Person.hbm.xml"/></session-factory></hibernate-configuration>(2): 实体配置类:xxx.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mapping package=”com.wsw.struts.model”><class name="Person" table="per"><id name="id" column="id"><generator class="native"/> //字段自增</id><property name="username" column="p_username"/><property name="age" column="p_age"/></class></hibernate-mapping>(3):测试类(包括获取SessionFactory类和实体测试类)SessionFactory类:HibernateUtilpublic class HibernateUtil {private static final SessionFactory sessionFactory;static {try {// Create the SessionFactory from hibernate.cfg.xmlsessionFactory = new Configuration().configure().buildSessionFactory();} catch (Throwable ex) {// Make sure you log the exception, as it might be swallowedSystem.err.println("Initial SessionFactory creation failed." + ex);throw new ExceptionInInitializerError(ex);}}public static SessionFactory getSessionFactory() {return sessionFactory;}}实体测试类:PersonManager-----------------------------------------------------------------------------------public class PersonManager {public static void main(String[] args) {createAndStorePerson();HibernateUtil.getSessionFactory().close();}private static void createAndStorePerson() {Session session = // 通过Session工厂获取Session对象HibernateUtil.getSessionFactory().getCurrentSession();session.beginTransaction(); //开始事务Person person = new Person();person.setUsername("何小景");person.setAge(26);session.save(person);session.getTransaction().commit(); // 提交事务}}(4):注解方式:注解的方式与xml很很多类似:首先是需要加入4个jar包:hibernate-commons-annotations.jar 、 hibernate-annotations.jar ejb3-persistence.jar 、 hibernate-jpa-2.0-api-1.0.1.Final.jar下面是不同的地方:(1):hibernate.hbm.xml 文件中把引用:xxx.hbm.xml改为引用实体类:即把:<mapping resource="com/wsw/hibernate/model/Person.hbm.xml"/>改为:<mapping class="com.wsw.hibernate.model.Teacher" />(2):获取SessionFactory方式发生了变化:即:由SessionFactory sf = new Configuration().configure().buildSessionFactory()改为:SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory() (3):注解方式不需要在xxx.hbm.xml把实体类与表进行映射。
hibernate.hbm.xml配置文件解析
![hibernate.hbm.xml配置文件解析](https://img.taocdn.com/s3/m/68002ae34793daef5ef7ba0d4a7302768e996fea.png)
hibernate.hbm.xml配置⽂件解析1.1<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "/hibernate-mapping-3.0.dtd">2<hibernate-mapping package="com.aegop.mto.pojo">3<!-- 标识⼀个类的xml映射,name为类名,table为表名 -->4<class name="Street" table="Streets">5<!-- 主键的设置,generator标识主键⽣成⽅式,因为native便于数据库的移植所以.嘿嘿!你懂的 -->6<id name="id" type="int">7<column name="Id"/>8<generator class="native"/>9</id>10<!-- 这⾥配了该类⼀个属性街道名称 name属性字段,column,数据库对应列 -->11<property name="streetName" type="string" column="StreetName"/>12<!-- 这⾥同上,写法不同⽽已 -->13<property name="streetPhone" type="string">14<column name="Streetphone"/>15</property>16<!-- 下⾯同样是配该类⼀个属性,只是⽐较特殊⽽已! DisrtictId它是对应实体(数据库中主键,hibernate有缺省)如果加property-ref=DistrictId,效果是⼀样!此属性⽤在有联合主键的时候-->17<many-to-one name="district" class="District">18<column name="DistrictId"/>19</many-to-one>20</class>21</hibernate-mapping>2223 //当column不指定的时候默认是和name相同2425 //这⾥简单介绍,<property>简单类型的配置标签,<many-to-one>多对⼀的配置标签,以此xml为例,需要注意的是该xml是⼀个街道的实体映射,也就是说⼀个区可以包含多个街道,所以这⾥街道配置了和区的多对⼀关系!26 //name="district";这个仍然代表该类字段,不同的是class="District",他的类型没有⽤type,⽽是class!因为不是⼀个简单数据类型.2728 //这个只是⼀个多对⼀的简单表述,其实⼀对⼀,多对多...等!道理是⼀样的2930 //District.hbm.xml3132<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "/hibernate-mapping-3.0.dtd">33<hibernate-mapping package="com.aegop.mto.pojo">34<class name="District" table="Districts">35<id name="id" type="int">36<column name="Id"/>37<generator class="native"/>38</id>39<property name="districtName" type="string">40<column name="DistrictName"/>41</property>4243</class>44</hibernate-mapping>2.⼀.映射⽂件的作⽤:Hibernate映射⽂件是Hibernate与进⾏持久化的桥梁⼆,Hibernate映射⽂件主要内容:(1).映射内容的定义:Hibernate映射⽂件由节点定义映射内容并指定所对应的JavaBean的位置(也可以不在该节点中⽤package属性指定对应的JavaBean位置,⽽在该节点下的class节点中的name属性中指定)(2).数据库和JavaBean的关联:Hibernate映射⽂件中⽤<hibernate-mapping>节点下的( 该节点的⽗节点中⽤package属性指定了JavaBean的包名时⽤)/全路径(该节点的⽗节点中没⽤package属性指定JavaBean的包名时⽤)(3).主键映射:在<class >节点下⽤节点映射对应的主键,该节点必须有且只有⼀个(因为主键只有⼀个),同时必须放在<property ...>节点前(4).普通字段映射:在<class ...>节点下⽤节点映射普通字段,该节点可有多个(⼀个字段⽤⼀个该节点来映射)三,heibernate的主键映射⽅式:在<id ...>节点下⽤<generator class="映射⽅式"/>节点指定Hibernate向数据库插⼊数据时主键的⽣成⽅式l assigned:应⽤程序⾃⾝对id赋值。
Hibernate核心配置
![Hibernate核心配置](https://img.taocdn.com/s3/m/ecaa9bde0029bd64783e2cf0.png)
Hibernate核心配置1.Hibernate体系结构H ibernate位于应用程序和数据库之间,将数据库底层完全封装,应用程序只需要操作Persistent Objects(持久化对象),通过Hibernate生成SQL 语句,完成对数据表中记录的操作hibernate 支持两种核心配置文件①src/hibernate.cfg.xml (完成基本属性配置,加载hbm映射文件).<propertyname="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> .<mapping resource="cn/itcast/domain/Customer.hbm.xml"/> 加载hbm映射②src/hibernate.properties (key-value文件键值对,主要配置 hibernate基本属性 ).hibernate.connection.driver_class=com.mysql.jdbc.Driver* hibernate.properties 无法加载 hbm映射,采用properties方式,必须手动编程加载 hbm文件或者持久化类2.Hibernate的常用属性①必须属性.hibernate.dialect 操作数据库方言.hibernate.connection.driver_class 连接数据库驱动程序.hibernate.connection.url 连接数据库URLername 数据库用户名.hibernate.connection.password 数据库密码②可选属性.//在控制台上输出SQL语句,hibernate 自己完成的,并没有使用日志系统,当关闭日志后,控制台仍然有SQL语句.hibernate.show_sql true..//格式化控制台输出的SQL语句*SQL 会自动换行,对于比较长的sql 查看方便.hibernate.format_sql true..hibernate.hbm2ddl.auto create/create-drop/update/validate DDL策略.* DDL 主要建表语句,和表结构更新语句.create:表示启动的时候先drop,再create (测试人员准备标准测试数据).create-drop: 也表示创建,只不过再系统关闭前执行一下drop (测试程序是否正确).update: 这个操作启动的时候会去检查schema是否一致,如果不一致会做scheme更新(建表,更新表结构【只能加】).validate: 启动时验证现有schema与你配置的hibernate是否一致,如果不一致就抛出异常,并不做更新.*** 在产品开发中update 和validate 使用较多..hibernate.connection.autocommit true 事务是否自动提交.* 用于解决没有开启事务的操作时,事务如何自动处理.* 默认事务自动回滚。
Hibernate配置文件中映射元素详解
![Hibernate配置文件中映射元素详解](https://img.taocdn.com/s3/m/bcf975930b1c59eef9c7b4c0.png)
Hibernate配置文件中映射元素详解添加时刻:2007-4-22本文中将讲述Hibernate的大体配置及配置文件的应用,这关于正确熟练利用Hibernate是相当关键的。
配置文件中映射元素详解对象关系的映射是用一个XML文档来讲明的。
映射文档能够利用工具来生成,如XDoclet,Middlegen 和AndroMDA等。
下面从一个映射的例子开始讲解映射元素,映射文件的代码如下。
<?xml version="1.0"?><!--所有的XML映射文件都需要定义如下所示的DOCTYPE。
Hibernate会先在它的类路径(classptah)中搜索DTD文件。
--><!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http:///hibernate-mapping-3.0.dtd"><!--hibernate-mapping有几个可选的属性:schema属性指明了这个映射的表所在的schema名称。
default-cascade属性指定了默认的级联风格可取值有none、save、update。
auto-import属性默认让我们在查询语言中可以使用非全限定名的类名可取值有true、false。
package属性指定一个包前缀。
--><hibernate-mapping schema="schemaName" default-cascade="none"auto-import="true" package="test"><!--用class元素来定义一个持久化类--><class name="People" table="person"><!-- id元素定义了属性到表主键字段的映射。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Hibernate中xxx.hbm.xml配置说明。
在Hibernate中,各表的映射文件xxx..hbm.xml可以通过工具生成,例如在使用MyEclipse 开发时,它提供了自动生成映射文件的工具。
配置文件的基本结构如下:Xml代码1<?xml version="1.0"encoding='UTF-8'?>23<!DOCTYPE hibernate-mapping PUBLIC4"-//Hibernate/Hibernate Mapping DTD 3.0//EN"5"/hibernate-mapping-3.0.dtd">6<hibernate-mapping package="包名">7<class name="类名"table="表名">8<id name="主键在java类中的字段名"column="对应表中字段"type="类型">9<generator class="主键生成策略"/>10</id>1112……13</class>14</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使用另外一个相关联的对象的标识符作为主键。
主键配置举例如下:Xml代码15<id name="id"column="id"type="ng.Integer">16<generator class="native"/>17</id>另外还可以扩展Hibernate的类来做自己的主键生成策略,具体例子见:/topic/93391。
2. 普通属性(property)开发人员可以打开网址:/hibernate-mapping-3.0.dtd来查看hibernate3.0的dtd信息,可看到property的定义如下:Xml代码18<!ELEMENT property (meta*,(column|formula)*,type?)>19<!ATTLIST property name CDATA #REQUIRED>20<!ATTLIST property node CDA TA #IMPLIED>21<!ATTLIST property access CDATA #IMPLIED>22<!ATTLIST property type CDA TA #IMPLIED>23<!ATTLIST property column CDA TA #IMPLIED>24<!ATTLIST property length CDATA #IMPLIED>25<!ATTLIST property precision CDATA #IMPLIED>26<!ATTLIST property scale CDA TA #IMPLIED>27<!ATTLIST property not-null (true|false) #IMPLIED>28<!ATTLIST property unique (true|false) "false">29<!ATTLIST property unique-key CDATA #IMPLIED>30<!ATTLISTpropertyindexCDATA#IMPLIED>31<!-- include the columns spanned by this property in an index -->32<!ATTLIST property update (true|false) #IMPLIED>33<!ATTLIST property insert (true|false) #IMPLIED>34<!ATTLIST property optimistic-lock (true|false) "true">35<!-- only supported for properties of a class (not component) -->36<!ATTLIST property formula CDATA #IMPLIED>37<!ATTLIST property lazy (true|false) "false">38<!ATTLIST property generated (never|insert|always) "never">它的各属性中比较常用的有:name(对应的java类的属性名称)、column(对应的表中的字段)、type(属性的类型,ng.String)、not-null(设置该属性是否为空,为true时表示非空,默认为false)和length(字段的长度限制)。
示例如下:Xml代码39<property name="accessname"column="accessName"type="ng.String"not-null="true"/>40<property name="state"column="state"type="ng.Byte"not-null="true"/>41<property name="description"column="description"type="ng.String"/>3. 一对多关系(<many-to-one…/>和<set…></set>)一对多关系一般是用在一个表与另一个表存在外键关联的时候,例如用户表的组织id与组织表存在外键关联,则“一”方为组织表,“多”方为用户表,因为一个组织可以包含多个用户,而一个用户只能隶属于一个组织。
对于存在一对多关系和多对一关系的双方,需要在…hbm.xml中进行相应配置,这时在“一”方(例如:组织)需要在映射文件中添加<set…></set>元素,因为它包含多个“多”方的对象,一般的格式如下:Xml代码42<set name="java映射类中对应的属性"inverse="true"lazy="true">43<key column="表中对应字段"/>44<one-to-many class="多方的类"/>45</set>4647<!-- 示例-->48<set name="userSet"inverse="true"lazy="true">49<key column="orgId"/>50<one-to-many class="User"/>51</set>“多”方(例如:用户)隶属于一个“一”方对象,一般的格式如下:Xml代码52<many-to-one name="java映射类中对应的属性"column="表中对应字段"class="类名"not-null="true"/>5354<!-- 示例-->55<many-to-one name="org"column="orgId"class="Organization"not-null="true"/>4. 一对一关系(<one-to-one…/>)一对一关系相对一对多关系来说比较少见,但也在某些情况下要用到,例如有一个用户的基本信息表(USER)和一个用户的密码表(PASSWD)就存在一对一的关系。
下面来看一下一对一关系在Hibernate的配置。
Xml代码56<!-- 其中主表(eg. 用户的基本信息表)的配置-->5758<one-to-one name="主表对象中子表对象的属性名"class="子表对象的类名"cascade="save-update"/>5960<one-to-one name="password"class="com.amigo.dao.pojo.Passwd"cascade="save-update"/>6162<!-- 子表(eg. 用户的密码表)的配置-->6364<one-to-one name="子表对象中主表对象的属性名"class="主表对象的类名"constrained="true"/>6566<one-to-one name="user"class="er "constrained="true"/>5. 多对多关系(<many-to-many…/>)在数据库设计时,一般将多对多关系转换为两个一对多(或多对一)关系,例如在基于角色的权限系统中,用户和角色存在的关系就是典型的多对多关系,即一个用户可以具有多个角色,而一个角色又可以为多个用户所有,一般在设计时,都会加一个用户与角色的关联表,该表与用户表以及角色表都存在外键关联。