您的位置:首页 > 其它

Hibernate配置文件与关联映射介绍

2015-07-28 17:40 260 查看
以用户评论模块为例分三部分介绍Hibernate。

第一部分:评论模块的java文件;

第二部分:与Comment.java关联的hibernate配置文件,其中包括了对xxx.hbm.xml类型配置文件的详细介绍,和对many-to-one关联映射的介绍;

第三部分:Hibernate全局配置文件hibernate.cfg.xml,其中包括了对全局配置文件hibernate.cfg.xml的详细介绍。

1. 实体类,Comment.java文件

public class Comment {
private Integer id;
private Task task;// 所属任务
private User user;// 评论人
private String content;// 评论内容
private String commentTime;// 评论时间
//省略getter和setter函数
}


2. 与Comment.java关联的hibernate配置文件:Comment.hbm.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 package="admin.po">
<!--name为实体类的包名+类名,如admin.po.Comment,但上已指定包,此处只需写类名Comment,table为数据库的表名-->
<class name="Comment" table="comment">
<!--
<id>:定义了该属性到数据库表主键字段的映射。
name="id":标识实体类的属性的名字;
column="id":表数据库主键字段的名字,如果不填写与name一样;
-->
<id name="id" column="id" >
<!--主键的生成策略 native可以适应多种数据库  increment mysql自动增长策略  sequence oracle自动增长策略 -->
<generator class="native"></generator>
</id>

<!--
<property>:为类定义一个持久化的javaBean风格的属性。
name="content":标识属性的名字,以小写字母开头;
column="content":表主键字段的名字,如果不填写与name一样;
type="java.lang.String":属性的类型
not-null="false":属性是否为空,为true时表示非空,默认为false
length="500":属性字段的长度限制
->
<property name="content" column="content" type="java.lang.String" not-null="false" length="500"></property>
<property name="commentTime" column="commentTime"  type="java.lang.String" not-null="false" ></property>

<!--
<many-to-one>:多对一关系映射,此处comment为多,user为一
根据需求,查看评论时需知评论的用户,而查询用户时不需要知道评论,所以,
要在Comment.hbm.xml中配置many-to-one,而不需要在User.hbm.xml中配置one-to-many
name="user":java映射类中对应的属性名,指出many一方的类用哪个属性和one一方的类关联
column="user_id":表中对应字段,指出many一方的类对应的数据表用哪个列和one一方的类对应的数据表关联(两表之间存在外键关联)
class="admin.po.User":关联的类的名字(可选 - 默认是通过反射得到属性类型)
not-null="false"
lazy="false":可选,默认为proxy,指单点关联是经过代理的;
lazy="true" 指定此属性应该在实例变量第一次被访问时应该延迟抓取;
lazy="false" 指定此关联总是被预先抓取
-->
<many-to-one name="user"
column="user_id"
class="admin.po.User"
not-null="false"
lazy="false"></many-to-one>
<many-to-one name="task"
column="task_id"
class="admin.po.Task"
not-null="false"
lazy="false"></many-to-one>
</class>
</hibernate-mapping>


3. Hibernate全局配置文件,文件名默认为hibernate.cfg.xml

<!--标准的XML文件的起始行,version="1.0"表明XML的版本,encoding="UTF-8"表明XML文件的编码方式-->
<?xml version="1.0" encoding="UTF-8"?>
<!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,XML解析器使用DTD文档来检查XML文件的合法性。
hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate3.1.3软件包中的src\org\hibernate目录中找到此文件-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!--声明Hibernate配置文件的开始-->
<hibernate-configuration>
<!--表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的一个类,这个类主要负责保存Hibernate的配置信息,以及对Session的操作-->
<session-factory>
<!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序-->
<property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
<!--设置数据库的连接url:jdbc:mysql://localhost/hibernate,其中localhost:3306表示mysql服务器名称,此处为本机,hibernate是数据库名-->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<!--连接数据库是用户名-->
<property name="hibernate.connection.username">ssh</property>
<!--连接数据库是密码-->
<property name="hibernate.connection.password">ssh</property>

<!-- 最大连接数 -->
<property name="hibernate.c3p0.max_size">20</property>
<!-- 最小连接数 -->
<property name="hibernate.c3p0.min_size">5</property>
<!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位毫秒 -->
<property name="hibernate.c3p0.timeout">120</property>
<!-- 最大的PreparedStatement的数量 -->
<property name="hibernate.c3p0.max_statements">100</property>
<!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒-->
<property name="hibernate.c3p0.idle_test_period">120</property>
<!-- 当连接池里面的连接用完的时候,C3P0一下获取的新的连接数 -->
<property name="hibernate.c3p0.acquire_increment">2</property>
<!-- 每次都验证连接是否可用 -->
<property name="hibernate.c3p0.validate">true</property>

<!--hibernate.dialect 指的是Hibernate使用的数据库方言,就是要用Hibernate连接哪种类型的数据库服务器-->
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!--显示Hibernate持久化操作所生成的SQL-->
<property name="hibernate.show_sql">true</property>
<!--根据需要自动创建数据表-->
<property name="hibernate.hbm2ddl.auto">update</property>

<!--罗列所有持久化类的类名-->
<mapping class="com.jialin.entity.User"/>
</session-factory>

</hibernate-configuration>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: