• hibernate框架配置文件详解


    1 orm元数据配置文件(映射文件)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <!-- 配置表与实体的关系 -->
    <!-- package属性:填写一个包名。在元素内部凡是需要书写完整类名得属性,可以直接写简单类名就可以了 -->
    <hibernate-mapping package="www.test.domain">
        <!--Class元素:配置实体与表得对应关系得
                name:完整类名
                table:数据库表名
          -->
        <class name="Customer" table="cst_customer">
        <!--id:配置主键映射得属性
                name:填写主键对应得属性名
                column:填写表中得主键得列名   默认值:列名会默认使用属性名
                type:填写列(属性)得类型。hibernate会自动检测实体的属性类型
                     每个类型有三种写法:分别是java类型 | hibernate类型 | 数据库类型
                    java类型:             
                    <property name="cust_name" column="cust_name" type="java.lang.String"></property>
                    hibernate类型:
                    <property name="cust_name" column="cust_name" type="string"></property>
                    数据库类型:
                    <property name="cust_name" column="cust_name" >
                        <column name="cust_name" sql-type="varchar"></column>
                    </property>
                
                    注意:不建议指定,自动检测实体属性类型就可以。
                
                not-null(可选):配置该属性(列)是否不能为空,默认值false默认可以为空
                    <property name="cust_name" column="cust_name" not-null="true"></property>
                
                length(可选):配置数据库中列的长度。 默认值:使用数据库类型的最大长度 varchar默认最大长度255。
          -->
            <id name="cust_id" column="cust_id" >
            <!-- generator:主键生成得策略(后面讲) -->
                <generator class="native"></generator>
            </id>
            
            <!-- property:配置除了id之外得普通属性映射
                        name:填写属性名
                        column(可选):填写属性对应得列名 默认值:列名会默认使用属性名
                        type:填写列(属性)得类型。hibernate会自动检测实体的属性类型
                             每个类型有三种写法:分别是java类型 | hibernate类型 | 数据库类型
                            java类型:             
                            <property name="cust_name" column="cust_name" type="java.lang.String"></property>
                            hibernate类型:
                            <property name="cust_name" column="cust_name" type="string"></property>
                            数据库类型:
                            <property name="cust_name" column="cust_name" >
                                <column name="cust_name" sql-type="varchar"></column>
                            </property>
                        
                            注意:不建议指定,自动检测实体属性类型就可以。
                        
                        not-null(可选):配置该属性(列)是否不能为空,默认值false默认可以为空
                            <property name="cust_name" column="cust_name" not-null="true"></property>
                        
                        length(可选):配置数据库中列的长度。 默认值:使用数据库类型的最大长度 varchar默认最大长度255。
                             
             -->
            <property name="cust_name" column="cust_name" length=""></property>
            <property name="cust_source" column="cust_source"></property>
            <property name="cust_industry" column="cust_industry"></property>
            <property name="cust_level" column="cust_level"></property>
            <property name="cust_linkman" column="cust_linkman"></property>
            <property name="cust_phone" column="cust_phone"></property>
            <property name="cust_mobile" column="cust_mobile"></property>
        </class>
    </hibernate-mapping>

    一对多&多对一关系映射

    一的一方的配置

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <!-- 配置表与实体的关系 -->
    <!-- package属性:填写一个包名。在元素内部凡是需要书写完整类名得属性,可以直接写简单类名就可以了 -->
    <hibernate-mapping package="www.test.domain">
        <!--Class元素:配置实体与表得对应关系得
                name:完整类名
                table:数据库表名
          -->
        <class name="Customer" table="cst_customer">
        <!--id:配置主键映射得属性
                name:填写主键对应得属性名
                column:填写表中得主键得列名   默认值:列名会默认使用属性名
                type:填写列(属性)得类型。hibernate会自动检测实体的属性类型
                     每个类型有三种写法:分别是java类型 | hibernate类型 | 数据库类型
                    java类型:             
                    <property name="cust_name" column="cust_name" type="java.lang.String"></property>
                    hibernate类型:
                    <property name="cust_name" column="cust_name" type="string"></property>
                    数据库类型:
                    <property name="cust_name" column="cust_name" >
                        <column name="cust_name" sql-type="varchar"></column>
                    </property>
                
                    注意:不建议指定,自动检测实体属性类型就可以。
                
                not-null(可选):配置该属性(列)是否不能为空,默认值false默认可以为空
                    <property name="cust_name" column="cust_name" not-null="true"></property>
                
                length(可选):配置数据库中列的长度。 默认值:使用数据库类型的最大长度 varchar默认最大长度255。
          -->
            <id name="cust_id" column="cust_id" >
            <!-- generator:主键生成得策略(后面讲) -->
                <generator class="native"></generator>
            </id>
            
            <!-- property:配置除了id之外得普通属性映射
                        name:填写属性名
                        column(可选):填写属性对应得列名 默认值:列名会默认使用属性名
                        type:填写列(属性)得类型。hibernate会自动检测实体的属性类型
                             每个类型有三种写法:分别是java类型 | hibernate类型 | 数据库类型
                            java类型:             
                            <property name="cust_name" column="cust_name" type="java.lang.String"></property>
                            hibernate类型:
                            <property name="cust_name" column="cust_name" type="string"></property>
                            数据库类型:
                            <property name="cust_name" column="cust_name" >
                                <column name="cust_name" sql-type="varchar"></column>
                            </property>
                        
                            注意:不建议指定,自动检测实体属性类型就可以。
                        
                        not-null(可选):配置该属性(列)是否不能为空,默认值false默认可以为空
                            <property name="cust_name" column="cust_name" not-null="true"></property>
                        
                        length(可选):配置数据库中列的长度。 默认值:使用数据库类型的最大长度 varchar默认最大长度255。
                             
             -->
            <property name="cust_name" column="cust_name"></property>
            <property name="cust_source" column="cust_source"></property>
            <property name="cust_industry" column="cust_industry"></property>
            <property name="cust_level" column="cust_level"></property>
            <property name="cust_linkman" column="cust_linkman"></property>
            <property name="cust_phone" column="cust_phone"></property>
            <property name="cust_mobile" column="cust_mobile"></property>
            <!-- 集合,一对多关系,在配置文件中配置 -->
            <!-- 
                name属性:集合属性名
                column属性: 外键列名
                class属性: 与我关联的对象完整类名
             -->
              <!-- 
                 级联操作:    cascade
                     save-update: 级联保存更新
                     delete:级联删除
                     all:save-update+delete
                 级联操作: 简化操作.目的就是为了少写两行代码.
              -->
              <!-- inverse属性: 配置关系是否维护. 
                      true: customer不维护关系
                      false(默认值): customer维护关系
                      
                  inverse属性: 性能优化.提高关系维护的性能.
                  原则: 无论怎么放弃,总有一方必须要维护关系.
                  一对多关系中: 一的一方放弃.也只能一的一方放弃.多的一方不能放弃.
              -->
             <set name="linkMans" inverse="true">
                 <key column="lkm_cust_id"></key>
                 <one-to-many class="LinkMan"/>
             </set>
        </class>
    </hibernate-mapping>

    多的一方的配置

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="www.test.domain">
        <class name="LinkMan" table="cst_linkman">
            <id name="lkm_id">
                <generator class="native"></generator>
            </id>
            <property name="lkm_gender"></property>
            <property name="lkm_name"></property>
            <property name="lkm_phone"></property>
            <property name="lkm_mobile"></property>
            <property name="lkm_email"></property>
            <property name="lkm_qq"></property>
            <property name="lkm_position"></property>
            <property name="lkm_memo"></property>
            <!-- 多对一 -->
            <!-- 
                name属性:引用属性名 
                column属性: 外键列名 
                class属性: 与我关联的对象完整类名
             -->
             <!-- 
                 级联操作:    cascade
                     save-update: 级联保存更新
                     delete:级联删除
                     all:save-update+delete
                 级联操作: 简化操作.目的就是为了少些两行代码.
              -->
              <!-- 多的一方: 不能放弃维护关系的.外键字段就在多的一方.  -->
            <many-to-one name="customer" column="lkm_cust_id" class="Customer">
            </many-to-one>
    
        </class>
    </hibernate-mapping>

    多对多

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="www.test.domain">
        <class name="Role" table="sys_role">
            <id name="role_id" column="role_id">
                <generator class="native"></generator>
            </id>
            <property name="role_name"></property>
            <property name="role_memo"></property>
            <!-- 多对多关系表达 -->
            <!-- 
                name: 集合属性名
                table: 配置中间表名
                key
                 |-column:外键,别人引用"我"的外键列名
                 class: 我与哪个类是多对多关系
                 column:外键.我引用别人的外键列名
             -->
             <!-- cascade级联操作:
                         save-update: 级联保存更新
                         delete:级联删除
                         all:级联保存更新+级联删除
                 结论: cascade简化代码书写.该属性使不使用无所谓. 建议要用只用save-update.
                      如果使用delete操作太过危险.尤其在多对多中.不建议使用.
              -->
              <!-- 使用inverse属性
                true: 放弃维护外键关系
                false(默认值):维护关系
                
            结论: 将来在开发中,如果遇到多对多关系.一定要选择一方放弃维护关系.
                 一般谁来放弃要看业务方向. 例如录入员工时,需要为员工指定所属角色.
                 那么业务方向就是由员工维护角色. 角色不需要维护与员工关系.角色放弃维护
             -->    
              <set name="users" table="sys_user_role" inverse="true">
                  <key column="role_id"></key>
                  <many-to-many class="User" column="user_id"></many-to-many>
              </set>
        </class>
    </hibernate-mapping>
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="www.test.domain">
        <class name="User" table="sys_user">
            <id name="user_id" column="user_id">
                <generator class="native"></generator>
            </id>
            <property name="user_code"></property>
            <property name="user_name"></property>
            <property name="user_password"></property>
            <property name="user_state"></property>
            <!-- 多对多关系表达 -->
            <!-- 
                name: 集合属性名
                table: 配置中间表名
                key
                 |-column:外键,别人引用"我"的外键列名
                 class: 我与哪个类是多对多关系
                 column:外键.我引用别人的外键列名
             -->
             <!-- cascade级联操作:
                         save-update: 级联保存更新
                         delete:级联删除
                         all:级联保存更新+级联删除
                 结论: cascade简化代码书写.该属性使不使用无所谓. 建议要用只用save-update.
                      如果使用delete操作太过危险.尤其在多对多中.不建议使用.
              -->
              <set name="roles" table="sys_user_role" cascade="save-update">
                  <key column="user_id"></key>
                  <many-to-many class="Role" column="role_id"></many-to-many>
              </set>
        </class>
    </hibernate-mapping>

    加入类加载策略和关联级别加载策略

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <!-- 配置表与实体的关系 -->
    <!-- package属性:填写一个包名。在元素内部凡是需要书写完整类名得属性,可以直接写简单类名就可以了 -->
    <hibernate-mapping package="www.test.domain">
        <!--Class元素:配置实体与表得对应关系得
                name:完整类名
                table:数据库表名
          -->
        <class name="Customer" table="cst_customer" lazy="false">
        <!--id:配置主键映射得属性
                name:填写主键对应得属性名
                column:填写表中得主键得列名   默认值:列名会默认使用属性名
                type:填写列(属性)得类型。hibernate会自动检测实体的属性类型
                     每个类型有三种写法:分别是java类型 | hibernate类型 | 数据库类型
                    java类型:             
                    <property name="cust_name" column="cust_name" type="java.lang.String"></property>
                    hibernate类型:
                    <property name="cust_name" column="cust_name" type="string"></property>
                    数据库类型:
                    <property name="cust_name" column="cust_name" >
                        <column name="cust_name" sql-type="varchar"></column>
                    </property>
                
                    注意:不建议指定,自动检测实体属性类型就可以。
                
                not-null(可选):配置该属性(列)是否不能为空,默认值false默认可以为空
                    <property name="cust_name" column="cust_name" not-null="true"></property>
                
                length(可选):配置数据库中列的长度。 默认值:使用数据库类型的最大长度 varchar默认最大长度255。
          -->
            <id name="cust_id" column="cust_id" >
            <!-- generator:主键生成得策略(后面讲) -->
                <generator class="native"></generator>
            </id>
            
            <!-- property:配置除了id之外得普通属性映射
                        name:填写属性名
                        column(可选):填写属性对应得列名 默认值:列名会默认使用属性名
                        type:填写列(属性)得类型。hibernate会自动检测实体的属性类型
                             每个类型有三种写法:分别是java类型 | hibernate类型 | 数据库类型
                            java类型:             
                            <property name="cust_name" column="cust_name" type="java.lang.String"></property>
                            hibernate类型:
                            <property name="cust_name" column="cust_name" type="string"></property>
                            数据库类型:
                            <property name="cust_name" column="cust_name" >
                                <column name="cust_name" sql-type="varchar"></column>
                            </property>
                        
                            注意:不建议指定,自动检测实体属性类型就可以。
                        
                        not-null(可选):配置该属性(列)是否不能为空,默认值false默认可以为空
                            <property name="cust_name" column="cust_name" not-null="true"></property>
                        
                        length(可选):配置数据库中列的长度。 默认值:使用数据库类型的最大长度 varchar默认最大长度255。
                             
             -->
            <property name="cust_name" column="cust_name"></property>
            <property name="cust_source" column="cust_source"></property>
            <property name="cust_industry" column="cust_industry"></property>
            <property name="cust_level" column="cust_level"></property>
            <property name="cust_linkman" column="cust_linkman"></property>
            <property name="cust_phone" column="cust_phone"></property>
            <property name="cust_mobile" column="cust_mobile"></property>
            <!-- 集合,一对多关系,在配置文件中配置 -->
            <!-- 
                name属性:集合属性名
                column属性: 外键列名
                class属性: 与我关联的对象完整类名
             -->
              <!-- 
                 级联操作:    cascade
                     save-update: 级联保存更新
                     delete:级联删除
                     all:save-update+delete
                 级联操作: 简化操作.目的就是为了少写两行代码.
              -->
              <!-- inverse属性: 配置关系是否维护. 
                      true: customer不维护关系
                      false(默认值): customer维护关系
                      
                  inverse属性: 性能优化.提高关系维护的性能.
                  原则: 无论怎么放弃,总有一方必须要维护关系.
                  一对多关系中: 一的一方放弃.也只能一的一方放弃.多的一方不能放弃.
              -->
              <!-- 
            lazy属性: 决定是否延迟加载
                true(默认值): 延迟加载,懒加载
                false: 立即加载
                extra: 极其懒惰
            fetch属性: 决定加载策略.使用什么类型的sql语句加载集合数据
                select(默认值): 单表查询加载
                join: 使用多表查询加载集合
                subselect:使用子查询加载集合
         -->
         <!-- batch-size: 抓取集合的数量为3.
                 抓取客户的集合时,一次抓取几个客户的联系人集合.
          -->
             <set name="linkMans" inverse="true" batch-size="3">
                 <key column="lkm_cust_id"></key>
                 <one-to-many class="LinkMan"/>
             </set>
        </class>
    </hibernate-mapping>

    2 hibernate主配置文件 hibernate.cfg.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <!-- 
            #hibernate.dialect org.hibernate.dialect.MySQLDialect
            #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
            #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
            #hibernate.connection.driver_class com.mysql.jdbc.Driver
            #hibernate.connection.url jdbc:mysql:///test
            #hibernate.connection.username gavin
            #hibernate.connection.password 
            -->
            <!-- 数据库驱动 -->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <!-- 数据库的url -->
            <property name="hibernate.connection.url">jdbc:mysql:///hibernate</property> <!-- /// 表示连接本机 -->
            <!-- 数据库连接的用户名 -->
            <property name="hibernate.connection.username">root</property>
            <!-- 数据库连接密码 -->
            <property name="hibernate.connection.password">root</property>
            <!-- 数据库方言
                不同的数据库中,sql语法略有区别,指定方言可以让hibernate框架生成sql语句时。针对数据库方言生成。
                sql99标准:DDL 定义语言       库表的增删改查
                           DML 控制语言      事务权限
                           DCL 操作语言       针对增删改查
                            注意事项:MySQL在选择方言时候,请选择最短的方言。
                                     org.hibernate.dialect.MySQLDialect
                           
                            
             -->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQLMyISAMDialect</property>
            
            <!-- 
            #hibernate.show_sql true  //打印生成的sql
            #hibernate.format_sql true  //格式化sql  如果不格式都会在一行
             -->
             <!--将hibernate生成的sql语言打印到控制台  -->
            <property name="hibernate.show_sql">true</property>
             <!--将hibernate生成的sql语句格式化(语法缩进)  -->
            <property name="hibernate.format_sql">true</property>
            
            <!-- 
            ## auto schema export 自动导出表结构 。  自动建表
    
            #hibernate.hbm2ddl.auto create-drop  自动建表。每次框架运行结束都会将所有的表删除。(开发环境中测试使用)
            #hibernate.hbm2ddl.auto create 自动建表。每次框架的运行都会自动创建新的表。以前表将会被覆盖,表数据会丢失,(开发环境中测试使用)
            #hibernate.hbm2ddl.auto update(推荐使用) 自动生成表。如果已经存在不会再生成。如果表有变动。自动更新表(不会删除任何数据)
            #hibernate.hbm2ddl.auto validate 校验。不自动生成表。每次启动会校验数据库中表是否正确。校验失败
             -->
            <property name="hibernate.hbm2ddl.auto">update</property>
            
            <!-- 引入orm元数据
                路径书写:填写src下的路径
             -->
            <mapping resource="www/test/domain/Customer.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>

    3 hibernate.cfg.xml(版本二)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
             <session-factory>
                        <!--五个基本配置
                        ## MySQL
                    
                        #hibernate.dialect org.hibernate.dialect.MySQLDialect
                        #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
                        #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
                        #hibernate.connection.driver_class com.mysql.jdbc.Driver
                        #hibernate.connection.url jdbc:mysql:///test
                        #hibernate.connection.username gavin
                        #hibernate.connection.password
                          -->
                  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
                  <property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
                  <property name="hibernate.connection.username">root</property>
                  <property name="hibernate.connection.password">root</property>
                  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
                         <!--sql的2个可选配置
                         #hibernate.show_sql true
                         #hibernate.format_sql true
                           -->
                   <property name="hibernate.show_sql">true</property>
                   <property name="hibernate.format_sql">true</property>
                   <!--表的策略可选配置
                           ## auto schema export
    
                        #hibernate.hbm2ddl.auto create-drop
                        #hibernate.hbm2ddl.auto create
                        #hibernate.hbm2ddl.auto update
                        #hibernate.hbm2ddl.auto validate
                     -->
                     <property name="hibernate.hbm2ddl.auto">update</property>
                     
                     <!-- 指定隔离级别
                     #hibernate.connection.isolation 4 -->
                     <property name="hibernate.connection.isolation">4</property>
                     
                     <!-- 指定session与当前线程绑定 -->
                     <property name="hibernate.current_session_context_class">thread</property>
                     
                     
                     <!-- 引入orm元数据 -->
                     <mapping resource="www/java/domain/Customer.hbm.xml"/>
                   
             </session-factory>
    </hibernate-configuration>
  • 相关阅读:
    如何用正确的方法写出高质量软件的75条体会(转)
    使用javascript动态添加onclick事件,
    签名和重载
    C#文件后缀名详解
    配置SQL Server 2005 Express的身份验证方式,以及如何启用sa登录名。
    CSS选择符及优先级计算
    关于软件版本的解释
    数据结构形象解释
    CSS属性选择符
    [转载]Repeater三层嵌套
  • 原文地址:https://www.cnblogs.com/jepson6669/p/8486651.html
Copyright © 2020-2023  润新知