Hibernate之多对多篇

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate之多对多篇相关的知识,希望对你有一定的参考价值。

Hibernate值多对多篇:

首先Hibernate基于数据库持久层框架,好的OR框架。封装了JDBC对数据库繁琐的操作,完全以面向对象的方式来操作数据库,提供了以及一级,二级缓存。

下面就来谈谈Hibernate的优点与缺点:

  优点:

    1.对jdbc访问数据库进行了封装,简化了繁琐的操作。

    2.映射的灵活性

    3.非侵入性,移植性好。(就是说只需将你的映射文件及其配置文件移植到相应另一台计算机上照样可以运行,因为表的它是自己检查创建的,这一点非常好,不像Mybatis那                你要去建一个和他的映射文件字段,属性一样的表,才能运行,这一点比Mybatis好)

    4.提供一级二级缓存。

  缺点:

    1.无法对SQL进行优化。

    2.配置复杂。(什么一对一,一对多,多对多),这里主要针对自己手写,不过用工具根据数据库表生成实体类和映射文件就十分简单了。

    3.SQL执行效率低。

    4.不支持批量的删除,修改。

今天先来说说它的多对多:

  这里举的例子为学生与课程的关系,一个学生可以选修多个课程,一个课程可被多个学生选择,标准的多对多关系。

技术分享

配置文件如下:主要用于指明数据库连接的信息及其是否展示SQL,方言,检查更新,关联相应的映射文件。

<?xml version=‘1.0‘ encoding=‘utf-8‘?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

	<property name="connection.username">scott</property>
	<property name="connection.password">orcl</property>

	<property name="connection.url">
		jdbc:mysql://localhost:3306/dbs
	</property>
	<!-- 
		作用:根据持久化类和映射文件生成表
		validate   在启动的时候验证持久化类和表的描述是否一样
		create-drop 一般不用,当hibernate启动的时候生成表,结束的时候删除表
		create  只要启动Hibernate的时候生成表
		update 在启动时候检查持久文件和表是否对应对应则不该,不对应则新建
	-->
	<property name="hbm2ddl.auto">update</property>
	<!-- 
		显示hibernate内部生成的sql语句
	-->
	<property name="show_sql">true</property>
	<property name="dialect">
		org.hibernate.dialect.MySQLDialect
	</property>
	<!-- 如果映射文件有两个要注意 -->
	<mapping resource="cn/hp/relaDemo/Students.hbm.xml" />
	<mapping resource="cn/hp/relaDemo/C
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 
 5 <hibernate-mapping>
 6   
 7   <class name="cn.hp.relaDemo.Course">
 8   
 9     <id name="cid" type="java.lang.Long" length="5">
10       <generator class="increment"></generator>
11     </id>
12     
13      <property name="cname" length="10" type="java.lang.String"></property>
14          
15      <property name="cdepartment" length="10" type="java.lang.String"></property>
16      
17      <set name="students" table="student_course" cascade="save-update">
18        <key>
19          <column name="cid"></column>
20        </key>
21        <many-to-many class="cn.hp.relaDemo.Students"></many-to-many>
22      </set>
23      
24   </class>
25 </hibernate-mapping>
26   

 

ourse.hbm.xml" />
</session-factory>

</hibernate-configuration>

相应的Course映射文件:

  

 

以上是关于Hibernate之多对多篇的主要内容,如果未能解决你的问题,请参考以下文章

关联映射 ---- Hibernate之多对多关系

hibernate 的 关联关系之多对多 和 延迟加载

hibernate关联映射之多对多

hibernate 表关系映射详解之多对多

Hibernate框架进阶(中篇)之多表关系

059:表关系之多对多