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

以用户评论模块为例分三部分介绍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软件包中的srcorghibernate目录中找到此文件-->
<!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>
原文地址:https://www.cnblogs.com/nightowc/p/4683610.html