zoukankan      html  css  js  c++  java
  • Hibernate总结3

    Hibernate在操纵数据库时,首先要把数据库与java类之间的映射关系配置好

    1.一对多的关联关系映射

    1.1 客户的映射 (一的一方)

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC 
     3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
     5 <hibernate-mapping>
     6         <!-- 建立类与表的映射 -->
     7         <class name="com.itheima.hibernate.domain.Customer" table="cst_customer">
     8             <!-- 建立类中的属性与表中的主键的对应关系 -->
     9             <id name="cust_id" column="cust_id">
    10                 <generator class="native"></generator>
    11             </id>
    12             <!-- 建立类中的普通属性和表的字段的对应 -->
    13             <property name="cust_name" column="cust_name"></property>
    14             <property name="cust_source" column="cust_source"></property>
    15             <property name="cust_industry" column="cust_industry"></property>
    16             <property name="cust_level" column="cust_level"></property>
    17             <property name="cust_phone" column="cust_phone"></property>
    18             <property name="cust_mobile" column="cust_mobile"></property>
    19             <!-- 配置一对多的映射,放置多的一方的集合 -->
    20             <!--name属性:多的一方的集合名称 -->
    21             <set name="linkMans" cascade="save-update,delete">
    22             <!-- column属性是多的一方的外键名称 -->
    23                 <key column="lkm_cust_id"></key>
    24                 <!-- class属性是多的一方的全路径 -->
    25                 <one-to-many class="com.itheima.hibernate.domain.LinkMan"/>
    26             </set>
    27         </class>
    28 </hibernate-mapping>

    1.2 联系人的映射(多的一方)

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC 
     3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
     5 <hibernate-mapping>
     6     <class name="com.itheima.hibernate.domain.LinkMan" table="cst_linkman">
     7         <id name="lkm_id" column="lkm_id">
     8             <generator class="native"></generator>
     9         </id>
    10         <property name="lkm_name"></property>
    11         <property name="lkm_gender"></property>
    12         <property name="lkm_phone"></property>
    13         <property name="lkm_mobile"></property>
    14         <property name="lkm_email"></property>
    15         <property name="lkm_qq"></property>
    16         <property name="lkm_position"></property>
    17         <property name="lkm_memo"></property>
    18         <!-- 配置多对一的映射 -->
    19         <!-- 
    20             name属性是一的一方对象的名称
    21             class属性是一的一方的全路径
    22          -->
    23         <many-to-one cascade="save-update,delete" name="customer" class="com.itheima.hibernate.domain.Customer" column="lkm_cust_id"></many-to-one>
    24     </class>
    25 </hibernate-mapping>

    1.3 将映射添加到配置文件中

    1 <mapping resource="com/itheima/hibernate/domain/Customer.hbm.xml"></mapping>
    2 <mapping resource="com/itheima/hibernate/domain/LinkMan.hbm.xml"></mapping> 

    2 多对多关联关系映射

    2.1 用户的映射

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC 
     3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
     5 <hibernate-mapping>
     6     <class name="com.itheima.hibernate.domain.User" table="sys_user">
     7         <id name="user_id" column="user_id">
     8             <generator class="native"></generator>
     9         </id>
    10         <property name="user_code" column="user_code"></property>
    11         <property name="user_name" column="user_name"></property>
    12         <property name="user_password" column="user_password"></property>
    13         <property name="user_state" column="user_state"></property>
    14         <!-- 建立与角色之间的关系 -->
    15         <!-- 
    16             set标签:
    17                 name:关联的另一方的属性名称
    18                 table:中间表的名称
    19          -->
    20         <set name="roles" table="sys_user_role">
    21         <!-- 
    22             key标签
    23                 column:当前对象在中间表中的外键的名称
    24          -->
    25             <key column="user_id"></key>
    26         <!-- 
    27             many-to-many标签
    28                 class:关联的另一方的类的全路径
    29                 column:关联的另一方在中间表的外键名称
    30          -->
    31             <many-to-many class="com.itheima.hibernate.domain.Role" column="role_id"></many-to-many>
    32         </set>
    33     </class>
    34 </hibernate-mapping>

    2.2  角色的映射

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC 
     3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
     5 <hibernate-mapping>
     6     <class name="com.itheima.hibernate.domain.Role" table="sys_role">
     7         <id name="role_id" column="role_id">
     8             <generator class="native"></generator>
     9         </id>
    10         <property name="role_name" column="role_name"></property>
    11         <property name="role_memo" column="role_memo"></property>
    12         <set name="users" table="sys_user_rule" inverse="true">
    13             <key column="role_id"></key>
    14             <many-to-many class="com.itheima.hibernate.domain.User" column="user_id"></many-to-many>
    15         </set>
    16     </class>
    17 </hibernate-mapping>  

    2.3 在核心配置中加入映射文件

    1 <mapping resource="com/itheima/hibernate/domain/User.hbm.xml"></mapping>
    2 <mapping resource="com/itheima/hibernate/domain/Role.hbm.xml"></mapping>

    3 小插曲

    在建立项目的时候,因为都是demo性质的程序,偷懒,直接复制了之前的项目改了下名称,不料之前项目中建立的文件位置放错了,把hibernate.cfg.xml文件放在了utils包下,同时在src包下也放了hibernate.cfg.xml文件,但改配置文件时改的都是utils包下的代码,测试程序是报错No CurrentSessionContext configured!,尝试了很多次,查了很多资料都没有解决,差点放弃的时候,发现了问题所在,赶紧把utils 包下文件删除,配置好配置文件程序运行成功

    同时在配置文件时应注意如果想用SessionFactory 对象的getCurrentSession()方法,要注意在配置文件中加入

    <property name="hibernate.current_session_context_class">thread</property>

    这样异常就会解决

    使用SessionFactory 对象的openSession()方法不会报错

  • 相关阅读:
    图片滚动
    DOM 练习
    HTML 求阶乘之和
    JavaScript 累加求和练习 函数
    JavaScript 累加求和练习
    JavaScript
    汽车之家官网首页排版与布局
    网页搜索页面排版布局
    转---Python——numpy random类
    转---redshift database ---学习
  • 原文地址:https://www.cnblogs.com/QQ1171492144/p/10546018.html
Copyright © 2011-2022 走看看