一、基本属性映射
实体类Book
package com.chb.model;
public class Book {
private String id;
private String name;
private double price;
//书的页数
private int bookPage;
public Book() {}
public Book(String id, String name, double price, int bookPage) {
super();
this.id = id;
this.name = name;
this.price = price;
this.bookPage = bookPage;
}
public void setBookPage(int bookPage) {
this.bookPage = bookPage;
}
public long getBookPage() {
return bookPage;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
Book.hbm.xml
测试类
package com.chb.model;
import org.hibernate.Session;
import com.chb.hbUtils.HibernateUtils;
public class Test {
@org.junit.Test
public void test01() {
Session session = null;
//获取session
session = HibernateUtils.getSession();
//开启事务
session.beginTransaction();
Book book = new Book();
book.setName("西游记");
book.setPrice(23.0);
book.setBookPage(542);
//保存对象
session.save(book);
//提交事务
session.getTransaction().commit();
}
}
可以看到表结构的变化,
package com.chb.model;
public class Classroom {
private int id ;
//系名
private String name;
//年纪
private int grade;
public Classroom() {}
public Classroom(int id, String name, int grade) {
super();
this.id = id;
this.name = name;
this.grade = grade;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
}
对应的映射文件ClassRoom.hbm.xml
因为是manyToOne, 在多的一方管理对应关系。所以Classroom.hbm.xml只需定义Classroom的属性映射。
2.1.2 实体类Student, 多的一方
在多的一方(Student)添加“一”(Classroom)作为属性
package com.chb.model;
public class Student {
private int id;
private String name;
private String no;
//在多的一方添加“一”作为属性
private Classroom classroom;
public Student() {}
public Student(int id, String name, String no) {
super();
this.id = id;
this.name = name;
this.no = no;
}
public void setClassroom(Classroom classroom) {
this.classroom = classroom;
}
public Classroom getClassroom() {
return classroom;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
}
Student的映射文件中管理关系
在many-to-one标签中定义在多的一方管理关系 name为Student中定义的classroom对象, column 为外键
hibernate.cfg.xml中引入映射文件。
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3307/hibernate
root
root
org.hibernate.dialect.MySQL5InnoDBDialect
true
true
update
2.2测试
2.2.1 添加测试
首先添加“一”的一方(Classroom对象)
package com.chb.model;
import org.hibernate.Session;
import com.chb.hbUtils.HibernateUtils;
public class Test {
@org.junit.Test
public void test01() {
Session session = null;
//获取session
session = HibernateUtils.getSession();
//开启事务
session.beginTransaction();
Classroom classroom = new Classroom();
classroom.setName("计算机系");
classroom.setGrade(1);
Student stu1 =new Student();
stu1.setName("猴子");
stu1.setNo("5401");
Student stu2 =new Student();
stu2.setName("肥猪");
stu2.setNo("5402");
stu1.setClassroom(classroom);
stu2.setClassroom(classroom);
//保存对象
session.save(classroom);
session.save(stu1);
session.save(stu2);
//提交事务
session.getTransaction().commit();
}
}
2.2.2测试load