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()方法不会报错

猜你喜欢

转载自www.cnblogs.com/QQ1171492144/p/10546018.html