一、單表配置方式(使用配置關係映射文件去操作單表的CRUD操作)
1.新建Course.java
public class Course {
private Integer id; //課程id
private String name; // 課程名稱
public Course() {
}
public Course(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return "Course [id=" + id + ", name=" + name + "]";
}
}
2.新建Course.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.iflytek.model">
<class name="Course">
<!-- 第一種配置id方式 -->
<id name="id" type="java.lang.Integer">
<generator class="increment">
<param name="increment">course_inc</param>
</generator>
</id>
<!-- 第二種配置id方式 -->
<!-- <id name="id" column="id" type="java.lang.Integer">
<generator class="native">
</generator>
</id> -->
<property name="name" type="java.lang.String">
<column name="name" length="64" />
</property>
</class>
</hibernate-mapping>
3.測試類TestCourse.java
public class TestCourse {
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;
@Before
public void init(){
//創建配置對象,加載配置文件 hibernate.cfg.xml
Configuration configuration = new Configuration().configure();
//創建會話連接工廠
sessionFactory = configuration.buildSessionFactory();
//打開會話
session = sessionFactory.openSession();
//開啓事務
transaction = session.beginTransaction();
}
@After
public void destory(){
//提交事務
transaction.commit();
//關閉會話
session.close();
//關閉工廠會話連接
sessionFactory.close();
}
/**
* 新增課程信息
*/
@Test
public void testSaveCourse() {
Course cou = new Course();
cou.setName("java");
session.save(cou);
Course cou2 = new Course(2, "python");
session.save(cou2);
}
/**
* 更新課程信息
*/
@Test
public void testUpdateStu() {
// 獲取一個課程對象
Course cou = (Course) session.get(Course.class, 1);
cou.setName("c++");
session.save(cou);
}
/**
* 刪除課程信息
*/
@Test
public void testDeleteStu() {
Course cou = (Course) session.get(Course.class, 2);
session.delete(cou);
}
/**
* 查詢課程信息
*/
@Test
public void testGetStu() {
Course cou = (Course) session.get(Course.class, 1);
System.out.println(cou);
}
}
二、一對多配置方式(一個學生對應多個選課記錄)
1.新建Course3.java
public class Course3 {
private Integer id; //課程id
private String name; // 課程名稱
private Student3 stu;
public Course3() {
}
public Course3(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student3 getStu() {
return stu;
}
public void setStu(Student3 stu) {
this.stu = stu;
}
public String toString() {
return "Course [id=" + id + ", name=" + name + "]";
}
}
2.新建Course3.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.iflytek.model3">
<class name="Course3">
<id name="id" type="java.lang.Integer">
<generator class="increment">
<param name="increment">course_inc</param>
</generator>
</id>
<property name="name" type="java.lang.String">
<column name="name" length="64" />
</property>
<!-- 配置多對一的關係 -->
<many-to-one name="stu" column="sid"></many-to-one>
</class>
</hibernate-mapping>
3.新建Student3.java
public class Student3 {
private Integer sid; // 學生id
private String name; // 學生姓名
private String gender; // 學生姓名
private Date birthday; // 學生出生日期
private Set<Course3> cous = new HashSet<Course3>();
public Student3() {
}
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Set<Course3> getCous() {
return cous;
}
public void setCous(Set<Course3> cous) {
this.cous = cous;
}
public String toString() {
return "Student [sid=" + sid + ", name=" + name + ", gender=" + gender
+ ", birthday=" + birthday + "]";
}
}
4.新建Student3.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.iflytek.model3">
<class name="Student3">
<id name="sid" type="integer">
<generator class="increment">
<param name="increment">stu_inc</param>
</generator>
</id>
<property name="name" type="string">
<column name="name" length="64" />
</property>
<property name="gender" type="string">
<column name="gender"></column>
</property>
<property name="birthday" type="timestamp">
<column name="birthday"></column>
</property>
<!-- 這裏我們配置了one-to-many 一個學生可以對應多個選課記錄 -->
<set name="cous" cascade="save-update,delete">
<key column="sid"></key>
<one-to-many class="Course3" />
</set>
</class>
</hibernate-mapping>
5.測試類TestStudent3.java
public class TestStudent3 {
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;
@Before
public void init(){
//創建配置對象,加載配置文件 hibernate.cfg.xml
Configuration configuration = new Configuration().configure();
//創建會話連接工廠
sessionFactory = configuration.buildSessionFactory();
//打開會話
session = sessionFactory.openSession();
//開啓事務
transaction = session.beginTransaction();
}
@After
public void destory(){
//提交事務
transaction.commit();
//關閉會話
session.close();
//關閉工廠會話連接
sessionFactory.close();
}
/**
* 新增學生信息
*/
@Test
public void testSaveStudent() {
Student3 stu = new Student3();
stu.setName("張三丰");
stu.setGender("男");
stu.setBirthday(new Date());
Course3 cou1 = new Course3();
cou1.setName("java");
Course3 cou2 = new Course3();
cou2.setName("c");
stu.getCous().add(cou1);
stu.getCous().add(cou2);
session.save(stu);
}
/**
* 更新學生信息
*/
@Test
public void testUpdateStu() {
// 獲取一個學生對象
Student3 stu = (Student3) session.get(Student3.class, 1);
stu.setName("張峯");
session.save(stu);
}
/**
* 刪除學生信息,同時刪除課程表course3對應的數據
*/
@Test
public void testDeleteStu() {
Student3 stu = (Student3) session.get(Student3.class, 1);
session.delete(stu);
}
/**
* 查詢學生信息
*/
@Test
public void testGetStu() {
Student3 stu = (Student3) session.get(Student3.class, 1);
System.out.println(stu);
}
}
三、多對多(學生與課程多對多關係)
1.新建Course4.java
public class Course4 {
private Integer id; //課程id
private String name; // 課程名稱
private Set<Student4> students=new HashSet<Student4>();
public Course4() {
}
public Course4(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Student4> getStudents() {
return students;
}
public void setStudents(Set<Student4> students) {
this.students = students;
}
public String toString() {
return "Course [id=" + id + ", name=" + name + "]";
}
}
2.新建Course4.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.iflytek.model4">
<class name="Course4">
<!-- 配置哪個屬性 關聯數據表主鍵 -->
<id name="id" column="id" type="integer">
<generator class="native"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="name" length="64" />
</property>
<!-- 通過table屬性告訴hibernate中間表,cascade指明級聯操作的類型,inverse屬性說明Course4實體類是被控方,不負責維護關係表 ,不能觸發對象和數據庫的同步更新的。-->
<set name="students" table="student_course" cascade="save-update,delete">
<key column="id"></key>
<many-to-many class="Student4" column="sid"></many-to-many>
</set>
</class>
</hibernate-mapping>
3.新建Student4.java
public class Student4 {
private Integer sid; // 學生id
private String name; // 學生姓名
private String gender; // 學生性別
private Date birthday; // 學生出生日期
private Set<Course4> courses = new HashSet<Course4>();
public Student4() {
}
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Set<Course4> getCourses() {
return courses;
}
public void setCourses(Set<Course4> courses) {
this.courses = courses;
}
public String toString() {
return "Student4 [sid=" + sid + ", name=" + name + ", gender=" + gender
+ ", birthday=" + birthday + "]";
}
}
4.新建Student4.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.iflytek.model4">
<class name="Student4">
<!-- 配置哪個屬性 關聯數據表主鍵 -->
<id name="sid" column="sid" type="integer">
<generator class="native"></generator>
</id>
<property name="name" type="string">
<column name="name" length="64" />
</property>
<property name="gender" type="string">
<column name="gender"></column>
</property>
<property name="birthday" type="timestamp">
<column name="birthday"></column>
</property>
<!-- 通過table屬性告訴hibernate中間表,cascade指明級聯操作的類型,inverse屬性說明Student4實體類是主控方,負責維護關係表 -->
<set name="courses" table="student_course" cascade="save-update,delete">
<key column="sid"></key>
<many-to-many class="Course4" column="id"></many-to-many>
</set>
</class>
</hibernate-mapping>
5.測試類TestManyToMany.java
public class TestManyToMany {
private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;
@Before
public void init(){
//創建配置對象,加載配置文件 hibernate.cfg.xml
Configuration configuration = new Configuration().configure();
//創建會話連接工廠
sessionFactory = configuration.buildSessionFactory();
//打開會話
session = sessionFactory.openSession();
//開啓事務
transaction = session.beginTransaction();
}
@After
public void destory(){
//提交事務
transaction.commit();
//關閉會話
session.close();
//關閉工廠會話連接
sessionFactory.close();
}
/**
* 新增學生 和課程信息
*/
@Test
public void saveStudent() {
Student4 stu = new Student4();
stu.setName("張三丰");
stu.setGender("男");
stu.setBirthday(new Date());
Student4 stu2 = new Student4();
stu2.setName("張亮");
stu2.setGender("男");
stu2.setBirthday(new Date());
Course4 c1=new Course4();
c1.setName("English");
Course4 c2=new Course4();
c2.setName("science");
stu.getCourses().add(c1);
stu.getCourses().add(c2);
stu2.getCourses().add(c1);
stu2.getCourses().add(c2);
session.save(stu);
session.save(stu2);
}
/**
* 更新學生信息
*/
@Test
public void testUpdateStu() {
// 獲取一個學生對象
Student4 stu = (Student4) session.get(Student4.class, 1);
stu.setName("張峯");
session.save(stu);
}
/**
* 刪除學生信息
*/
@Test
public void testDeleteStu() {
Student4 stu = (Student4) session.get(Student4.class, 1);
session.delete(stu);
}
/**
* 查詢學生信息
*/
@Test
public void testGetStu() {
Student4 stu = (Student4) session.get(Student4.class, 1);
System.out.println(stu);
}
}