Hibernate基本的一对一增删查改测试方法
框架
entity实体类
package com.fengjie.entity;
public class Card {
private Integer cid;
private String cnumber;
private Student student;
public Card() {}
public Card(String cnumber) {
this.cnumber = cnumber;
}
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCnumber() {
return cnumber;
}
public void setCnumber(String cnumber) {
this.cnumber = cnumber;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
@Override
public String toString() {
return "Card [cid=" + cid + ", cnumber=" + cnumber + ", student=" + student + "]";
}
}
package com.fengjie.entity;
public class Student {
private Integer sid;
private String name;
private Card card;
public Student() {}
public Student(String name) {
this.name = name;
}
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;
}
@Override
public String toString() {
return "Student [sid=" + sid + ", name=" + name + "]";
}
public Card getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
}
entity实体映射类
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2019-7-8 15:48:53 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.fengjie.entity.Card" table="CARD">
<id name="cid" type="java.lang.Integer">
<column name="CID" />
<!-- 用用户的主键作为 卡的id的外键 -->
<generator class="foreign">
<param name="property">student</param>
</generator>
</id>
<property name="cnumber" type="java.lang.String">
<column name="CNUMBER" />
</property>
<one-to-one name="student" class="com.fengjie.entity.Student"></one-to-one>
</class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2019-7-8 15:48:53 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.fengjie.entity.Student" table="STUDENT">
<id name="sid" type="java.lang.Integer">
<column name="SID" />
<generator class="increment" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" />
</property>
<one-to-one name="card" class="com.fengjie.entity.Card" cascade="all"></one-to-one>
</class>
</hibernate-mapping>
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!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.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">123456</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/a?characterEncoding=utf-8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 显示sql语句 -->
<property name="show_sql">true</property>
<!-- 格式化sql语句 -->
<property name="format_sql">true</property>
<!-- 配置实体类的映射文件 -->
<mapping resource="com/fengjie/entity/Student.hbm.xml"/>
<mapping resource="com/fengjie/entity/Card.hbm.xml"/>
</session-factory>
</hibernate-configuration>
test测试类
package com.fengjie.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.fengjie.entity.Card;
import com.fengjie.entity.Student;
public class Test1 {
private Session session;
private Transaction transaction;
private SessionFactory factory;
//在测试方法之前执行的
@Before
public void before() {
//获取hibernate配置文件对象
Configuration configuration=new Configuration().configure();
factory = configuration.buildSessionFactory();
session = factory.openSession();
transaction = session.beginTransaction();
}
@Test
public void test() {
// Student s = session.get(Student.class, 1);
// System.out.println(s.getCard().getCnumber());
//添加数据 学生信息和卡的信息 添加之后一一对应
// Student s = new Student("哈哈3");
//
// Card c = new Card("4312725334625");
// //相互设置 互设
// s.setCard(c);
// c.setStudent(s);
//
// session.save(s);
// //session.save(c);
//
// //找到一个人同时找到这个人的卡
// Student s = session.get(Student.class, 1);
// System.out.println(s.getCard());
//
// //查询一张卡的同时查询该卡的学生
// Card c = session.get(Card.class, 1);
// System.out.println(c.getStudent().getName());
//
// //删除一个学生同时删除用户的卡
// Student s = session.get(Student.class, 1);
// session.delete(s);
//
// //删除一张卡
// Card c = session.get(Card.class, 4);
// //断绝关系
// //将级联的对象踢出session的管理范围
// Student s = c.getStudent();
// session.evict(s);
//
// session.delete(c);
//
// //给学生添加一张新的卡
// Student s = session.get(Student.class, 4);
// Card c = new Card("43525362663");
// s.setCard(c);
// c.setStudent(s);
//
// session.save(c);
//
// //给老卡添加一个新人 no
// Card c = session.get(Card.class, 4);
// Student s = new Student("大侠");
// s.setCard(c);
// c.setStudent(s);
// session.save(s);
//
// Card c = session.get(Card.class, 3);
// c.getStudent().setName("大哥");
// session.update(c);
//删除一个用户不删除卡
Student s = session.get(Student.class, 4);
s.setCard(null);
session.delete(s);
}
//在测试方法之后执行的方法 shift+tab
@After
public void after() {
//提交事务
transaction.commit();
//关闭session
session.close();
//关闭session工厂
factory.close();
}
}