实现前提 :
建立四个基础表 实现实体类之间的关系关联映射
对应关系:
图书与图书ID之间是一对一,图书ID与图书价格是多对多,图书类型和图书ID是多对多,图书ID和图书类型是多对一,图书和图书价格是多对多。
四个实体类:
Book类:
package homework.xo;
public class Book {
private int id;
private String name;
private BookId bi;
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 BookId getSc() {
return bi;
}
public void setSc(BookId bi) {
this.bi = bi;
}
}
BookId类:
package homework.xo;
import java.util.HashSet;
import java.util.Set;
public class BookId {
private int id;
private String name;
private Booktype fx;
private Book b;
private Set<Bookprice> bp = new HashSet<Bookprice>();
public Set<Bookprice> getCourse() {
return bp;
}
public void setCourse(Set<Bookprice> course) {
this.bp = course;
}
public Book getS() {
return b;
}
public void setS(Book b) {
this.b = b;
}
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 Booktype getFx() {
return fx;
}
public void setFx(Booktype fx) {
this.fx = fx;
}
}
Bookprice类:
package homework.xo;
import java.util.HashSet;
import java.util.Set;
public class Bookprice {
private int id;
private String classname;
private Set<BookId> sc = new HashSet<BookId>();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getClassname() {
return classname;
}
public void setClassname(String classname) {
this.classname = classname;
}
public Set<BookId> getSc() {
return sc;
}
public void setSc(Set<BookId> sc) {
this.sc = sc;
}
}
Booktype类:
package homework.xo;
import java.util.HashSet;
import java.util.Set;
public class Booktype {
private int id;
private String Booktype;
private Set<BookId> sc = new HashSet<BookId>();
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getXueyuan() {
return Booktype;
}
public void setXueyuan(String Booktype) {
this.Booktype = Booktype;
}
public Set<BookId> getSc() {
return sc;
}
public void setSc(Set<BookId> sc) {
this.sc = sc;
}
}
实体配置:
Book.hbm.xml:
<hibernate-mapping >
<!--类名为User,表名也为User-->
<class name="homework.xo.Bookprice" table="bookprice" >
<!--主键映射,属性名为id,列名也为id-->
<id name="id" column="id">
<!--根据底层数据库主键自动增长-->
<generator class="native"/>
</id>
<!--非主键映射,属性和列名一一对应-->
<property name="classname" column="classname"/>
<set name="sc" table="s_c" cascade="save-update,delete" inverse="true"> <!--inverse="true"-->
<key column="cid"/>
<many-to-many class="homework.xo.Bookprice" column="sid"/>
</set>
</class>
</hibernate-mapping>
BookId.hbm.xml:
<hibernate-mapping >
<!--类名为User,表名也为User-->
<class name="homework.xo.BookId" table="bookid">
<!--主键映射,属性名为id,列名也为id-->
<id name="id" column="id">
<!--根据底层数据库主键自动增长-->
<generator class="native"/>
</id>
<!--非主键映射,属性和列名一一对应-->
<property name="name" column="name"/>
<many-to-one name="fx" class="homework.xo.Booktype" column="cid"/>
<one-to-one name="s" class="homework.xo.Book" cascade="save-update,delete"/> <!--constrained="true"-->
<set name="Bookprice" table="s_c" > <!--cascade="save-update,delete"-->
<key column="sid"/>
<many-to-many class="homework.xo.Bookprice" column="cid"/>
</set>
</class>
</hibernate-mapping>
Bookprice.hbm.xml:
<hibernate-mapping >
<!--类名为User,表名也为User-->
<class name="homework.xo.Bookprice" table="bookprice" >
<!--主键映射,属性名为id,列名也为id-->
<id name="id" column="id">
<!--根据底层数据库主键自动增长-->
<generator class="native"/>
</id>
<!--非主键映射,属性和列名一一对应-->
<property name="classname" column="classname"/>
<set name="sc" table="s_c" cascade="save-update,delete" inverse="true"> <!--inverse="true"-->
<key column="cid"/>
<many-to-many class="hoework.xo.BookId" column="sid"/>
</set>
</class>
</hibernate-mapping>
Booktype.hbm.xml:
<hibernate-mapping >
<!--类名为User,表名也为User-->
<class name="homework.xo.Bookprice" table="bookprice" >
<!--主键映射,属性名为id,列名也为id-->
<id name="id" column="id">
<!--根据底层数据库主键自动增长-->
<generator class="native"/>
</id>
<!--非主键映射,属性和列名一一对应-->
<property name="classname" column="classname"/>
<set name="sc" table="s_c" cascade="save-update,delete" inverse="true"> <!--inverse="true"-->
<key column="cid"/>
<many-to-many class="homework.xo.BookId" column="sid"/>
</set>
</class>
</hibernate-mapping>
DAO层:
package homework.five.test;
public interface crudDao {
public void add();
public void select();
public void updata();
public void delete();
}
package homeworka;
import java.util.List;
import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.query.Query; import org.junit.Test;
import homework.utils.HibernateUtils; import homework.xo.Book; import homework.xo.Bookprice; import homework.xo.Booktype; import homework.xo.BookId;
public class test { @Test public void add() { //获取Session,开启事务 Session session = HibernateUtils.getSession(); Transaction transaction = session.beginTransaction(); //创建一个图书类型 Booktype g = new Booktype(); g.setXueyuan(""); //创建两个图书的信息 Book b1 = new Book(); b1.setName("SSH"); Book b2 = new Book(); b2.setName("Oracle"); //创建两个图书ID卡 BookId bi1 = new BookId(); bi1.setName(b1.getName()); BookId bi2 = new BookId(); bi2.setName(b2.getName()); //将图书ID关联到图书类型 bi1.setFx(g); bi2.setFx(g); //添加图书价格 Bookprice bp1 = new Bookprice(); bp1.setClassname("12元"); Bookprice bp2 = new Bookprice(); bp2.setClassname("20元"); Bookprice bp3 = new Bookprice(); bp3.setClassname("50元"); session.save(bp1); session.save(bp2); session.save(bp3); session.save(g); session.save(b1); session.save(b2); session.save(bi1); session.save(bi2); transaction.commit(); session.close(); } @Test public void delete() { //获取Session,开启事务 Session session = HibernateUtils.getSession(); Transaction transaction = session.beginTransaction(); BookId sc = session.get(BookId.class,1); session.delete(sc); transaction.commit(); session.close(); } public void select() { //获取Session,开启事务 Session session = HibernateUtils.getSession(); Transaction transaction = session.beginTransaction(); BookId sc = session.get(BookId.class,1); String s = sc.getName(); System.out.println(s); transaction.commit(); session.close(); }
public void update() { //获取Session,开启事务 Session session = HibernateUtils.getSession(); Transaction transaction = session.beginTransaction(); BookId sc = session.get(BookId.class,1); sc.setName("zzz"); System.out.println(sc.getName()); Book s = session.get(Book.class,1); s.setName(sc.getName()); session.save(sc); session.save(s); transaction.commit(); session.close(); } }