zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    CAGD
    Some defense compiler options provided by visual c++
    [转]错误处理(ErrorHandling):为何、何时、如何(rev#2)
    构造、析构一个类的本质
    bigendian VS littleendian
    Automate repeatedly actions in work
    KISS
    Some coding standards
    对IOC大彻大悟了写在阅读一些IOC文章之后
    [bbk5157]第54集第6章 用scheduler自动化 02
  • 原文地址:https://www.cnblogs.com/nightowc/p/4683610.html
Copyright © 2011-2022 走看看