对应的两个实体类为Student和Course
Student类
package com.maty.entity;
import java.util.HashSet;
import java.util.Set;
/**
* @author maty e-mail:512181558@qq.com
* @version 创建时间:2018年5月31日 下午3:25:32 类说明 学生类
*/
public class Student
{
private int sid;
private String s_name;
private String s_sex;
private Set<Course> setCourse = new HashSet<Course>();
public Set<Course> getSetCourse()
{
return setCourse;
}
public void setSetCourse(Set<Course> setCourse)
{
this.setCourse = setCourse;
}
public int getSid()
{
return sid;
}
public void setSid(int sid)
{
this.sid = sid;
}
public String getS_name()
{
return s_name;
}
public void setS_name(String s_name)
{
this.s_name = s_name;
}
public String getS_sex()
{
return s_sex;
}
public void setS_sex(String s_sex)
{
this.s_sex = s_sex;
}
}
Course类
package com.maty.entity;
import java.util.HashSet;
import java.util.Set;
/**
* @author maty e-mail:512181558@qq.com
* @version 创建时间:2018年5月31日 下午3:27:03 类说明 课程类
*/
public class Course
{
private int cid;
private String c_name;
private String c_desc;
private Set<Student> setStudent = new HashSet<Student>();
public Set<Student> getSetStudent()
{
return setStudent;
}
public void setSetStudent(Set<Student> setStudent)
{
this.setStudent = setStudent;
}
public int getCid()
{
return cid;
}
public void setCid(int cid)
{
this.cid = cid;
}
public String getC_name()
{
return c_name;
}
public void setC_name(String c_name)
{
this.c_name = c_name;
}
public String getC_desc()
{
return c_desc;
}
public void setC_desc(String c_desc)
{
this.c_desc = c_desc;
}
}
Student.hbm.xml
<?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>
<class name="com.maty.entity.Student" table="t_student">
<id name="sid" column="sid">
<generator class="native"></generator>
</id>
<property name="s_name" column="s_name"></property>
<property name="s_sex" column="s_sex"></property>
<!-- 设定多对多关系
key标签中的column:表示Student中的外键
many-to-many标签中的column:表示Course中的外键
-->
<set name="setCourse" table="s_c_table" cascade="save-update">
<key column="sid" ></key>
<many-to-many class="com.maty.entity.Course" column="cid"></many-to-many>
</set>
</class>
</hibernate-mapping>
Course.hbm.xml
<?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>
<class name="com.maty.entity.Course" table="t_course">
<id name="cid" column="cid">
<generator class="native"></generator>
</id>
<property name="c_name" column="c_name"></property>
<property name="c_desc" column="c_desc"></property>
<set name="setStudent" table="s_c_table">
<key column="cid"></key>
<many-to-many class="com.maty.entity.Student" column="sid" ></many-to-many>
</set>
</class>
</hibernate-mapping>
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入Hibernate的核心配置文件的约束,该约束位于hibernate-core包中的org.hibernate.hibernate-configuration-3.0.dtd -->
<!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>
<!-- 第一步:配置数据库信息 -->
<!-- 配置数据库的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 配置数据库的驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 配置数据库的url -->
<property name="hibernate.connection.url">jdbc:mysql://localhost/tx</property>
<!-- 配置数据库的用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- 配置数据库的密码 -->
<property name="hibernate.connection.password">wangxiaowei</property>
<!-- 第二步:配置Hibernate本身的设置 -->
<!-- 是否在console显示sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 是否对sql语句进行格式化 -->
<property name="hibernate.format_sql">true</property>
<!-- 是否自动建表 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 第三步:加载hibernate mapping文件 -->
<mapping resource="com/maty/entity/Student.hbm.xml" />
<mapping resource="com/maty/entity/Course.hbm.xml" />
</session-factory>
</hibernate-configuration>
工具类
package com.maty.utils;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* @author maty e-mail:512181558@qq.com
* @version 创建时间:2018年5月30日 上午11:43:10
* 类说明 工具类
*/
public class HibernateUtil
{
private final static SessionFactory sessionFactory;
static
{
Configuration cfg = new Configuration();
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory()
{
return sessionFactory;
}
}
测试类
package com.maty.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.junit.Test;
import com.maty.entity.Course;
import com.maty.entity.Student;
import com.maty.utils.HibernateUtil;
/**
* @author maty e-mail:512181558@qq.com
* @version 创建时间:2018年5月31日 下午3:40:40 类说明 测试类
*/
public class MyTest
{
// 测试级联保存
@Test
public void CreateTable()
{
HibernateUtil.getSessionFactory();
System.out.println("表格创建成功");
}
// 测试级联保存数据
@Test
public void save()
{
SessionFactory sessionFactory = null;
Session session = null;
Transaction transaction = null;
try
{
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
//----------------------------------------------------------------------
// 编写业务逻辑部分
Student student = new Student();
student.setS_name("tye");
student.setS_sex("男");
Course course1 = new Course();
course1.setC_name("c++");
course1.setC_desc("一种面向过程的开发语言");
Course course2 = new Course();
course2.setC_name("PHP");
course2.setC_desc("世界上最好的语言");
student.getSetCourse().add(course1);
student.getSetCourse().add(course2);
session.save(student);
//----------------------------------------------------------------------
transaction.commit();
System.out.println("数据保存成功");
} catch (Exception e)
{
transaction.rollback();
} finally
{
if(session != null)
session.close();
if(sessionFactory != null)
sessionFactory.close();
}
}
// 删除相关数据
@Test
public void del()
{
SessionFactory sessionFactory = null;
Session session = null;
Transaction transaction = null;
try
{
sessionFactory = HibernateUtil.getSessionFactory();
session = sessionFactory.openSession();
transaction = session.beginTransaction();
// ----------------------------------------------------------------------
// 编写业务逻辑部分
//获取Student
Student student = session.get(Student.class, 1);
Course course = session.get(Course.class, 2);
student.getSetCourse().remove(course);
// ----------------------------------------------------------------------
transaction.commit();
System.out.println("数据删除成功");
} catch (Exception e)
{
transaction.rollback();
} finally
{
if (session != null)
session.close();
if (sessionFactory != null)
sessionFactory.close();
}
}
}