[原创]hibernate配置总结_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
2
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3920 | 回复: 1   主题: [原创]hibernate配置总结        下一篇 
jinzhu.tian
注册用户
等级:上尉
经验:502
发帖:12
精华:0
注册:1970-1-1
状态:离线
发送短消息息给jinzhu.tian 加好友    发送短消息息给jinzhu.tian 发消息
发表于: IP:您无权察看 2014-7-17 17:26:39 | [全部帖] [楼主帖] 楼主

Hibernate是一个轻量级的数据持久化框架,在使用时我们需要进行一些相关配置,如hibernate.cfg.xml和*.hbm.xml。前者包含了Hibernate与数据库的基本连接信息;后者包含了Hibernate的基本映射信息,即系统中每一个类与其对应的数据库表之间的关联信息。在Hibernate工作的初始阶段,这两个文件的信息被加载到Configuration和SessionFactory实例。

一、Hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC 
           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

XML解析器使用DTD文档来检查XML文件的合法性。

正文以<hibernate-configuration>元素开始,其中又包含了其他的子元素,如<property>,

<session-factory>,<listener>,<mapping>,<security>等。我们经常会用到<session-factory>,它的基本配置如下:

<session-factory>

<!--数据库驱动信息-->

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>   

<!--数据库url-->    

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>   

<!--用户名-->

<property name="hibernate.connection.username">root</property>

<!--密码-->

<property name="hibernate.connection.password">12345678</property>

<!--数据库方言信息-->

<property       name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!--指定hibernate映射文件路径--> 

<mapping resource="test/User.hbm.xml"/> 

</session-factory>

二、*.hbm.xml

   该文档通过一系列XML元素的配置,来将持久化类与数据库表之间建立起一一映射。这意味着映射文档是按照持久化类的定义来创建的,而不是表的定义。

基本格式如:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="类名"  table=”表名”>
<id name="主键在java类中的名"  column=”对应表中字段” type=”类型”>
<generator class="主键生成策略"/>
</id>
<!--普通属性-->
<property name="name"/>
</class>
</hibernate-mapping>


Property中比较常用的属性有:name(对应的java类的属性名称)、column(对应的表中的字段)、type(属性的类型,eg.java.lang.String)、not-null(设置该属性是否为空,为true时表示非空,默认为false)和length(字段的长度限制)。 示例如下:

<property name="accessname" column="accessName" type="java.lang.String" not-null="true" />

Hibernate存在多种关联关系

 ⒈一对多关系(<many-to-one…/>和<set…></set>)

    一对多关系一般是用在一个表与另一个表存在外键关联的时候,例如用户表的组织id与组织表存在外键关联,则“一”方为组织表,“多”方为用户表,因为一个组织可以包含多个用户,而一个用户只能隶属于一个组织。

    对于存在一对多关系和多对一关系的双方,需要在…hbm.xml中进行相应配置,这时在“一”方(例如:组织)需要在映射文件中添加<set…></set>元素,因为它包含多个“多”方的对象,一般的格式如下:

<set name="java映射类中对应的属性" inverse="true" lazy="true">   

  <key column="表中对应字段"/>   

     <one-to-many class="多方的类"/>   

</set>   

“多”方(例如:用户)隶属于一个“一”方对象,一般的格式如下:

<many-to-one name="java映射类中对应的属性" column="表中对应字段" class="类名" not-null="true" />   

⒉ 一对一关系(<one-to-one…/>)

一对一关系相对一对多关系来说比较少见,但也在某些情况下要用到,例如有一个用户的基本信息表(USER)和一个用户的密码表(PASSWD)就存在一对一的关系。下面来看一下一对一关系在Hibernate的配置。

<!-- 其中主表(eg. 用户的基本信息表)的配置 -->  

<one-to-one name="主表对象中子表对象的属性名" class="子表对象的类名" cascade="save-update"/>   

<!-- 子表(eg. 用户的密码表)的配置 -->  

<one-to-one name="子表对象中主表对象的属性名" class="主表对象的类名" constrained="true" />   

⒊ 多对多关系(<many-to-many…/>)

在数据库设计时,一般将多对多关系转换为两个一对多(或多对一)关系,例如在基于角色的权限系统中,用户和角色存在的关系就是典型的多对多关系,即一个用户可以具有多个角色,而一个角色又可以为多个用户所有,一般在设计时,都会加一个用户与角色的关联表,该表与用户表以及角色表都存在外键关联。

设置格式如下:

<set name="java对象的属性名" table="表名" cascade="all" outer-join="false">     

    <key column="表的对应字段"/>     

    <many-to-many class="另一个表的对象类" column="另一个表的字段"/>     

</set>      




赞(0)    操作        顶端 
koei
版主
等级:大校
经验:4186
发帖:7
精华:0
注册:2011-7-21
状态:离线
发送短消息息给koei 加好友    发送短消息息给koei 发消息
发表于: IP:您无权察看 2014-7-30 16:37:11 | [全部帖] [楼主帖] 2  楼

对了,楼主,级联和缓存的设置有哪些呢?



赞(0)    操作        顶端 
总帖数
2
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论