Hibernate 单向一对多配置以及增删改查
先定义一个班级类:
public class Grade {
private int gid;
private String gname;
private String gdesc;
private Set<Students> set = new HashSet<Students>();
public Grade() {
}
public Grade(int gid, String gname, String gdesc) {
super();
this.gid = gid;
this.gname = gname;
this.gdesc = gdesc;
}
public Grade(String gname, String gdesc) {
super();
this.gname = gname;
this.gdesc = gdesc;
}
public int getGid() {
return gid;
}
public void setGid(int gid) {
this.gid = gid;
}
public String getGname() {
return gname;
}
public void setGname(String gname) {
this.gname = gname;
}
public String getGdesc() {
return gdesc;
}
public void setGdesc(String gdesc) {
this.gdesc = gdesc;
}
@Override
public String toString() {
return "Grade [gid=" + gid + ", gname=" + gname + ", gdesc=" + gdesc
+ "]";
}
public Set<Students> getSet() {
return set;
}
public void setSet(Set<Students> set) {
this.set = set;
}
}
定义Grade.hbm.xml
<?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 May 24, 2016 4:29:13 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="Grade" table="GRADE">
<id name="gid" type="int">
<column name="GID" />
<generator class="increment" />
</id>
<property name="gname" type="java.lang.String">
<column name="GNAME" />
</property>
<property name="gdesc" type="java.lang.String">
<column name="GDESC" />
</property>
<set name="set" table="STUDENTS" inverse="false" lazy="true">
<key>
<column name="GID" />
</key>
<one-to-many class="Students" />
</set>
</class>
</hibernate-mapping>
定义学生类:
public class Students {
private int sid;
private String Sname;
private String gender;
public Students() {
}
public Students(int sid, String sname, String gender) {
super();
this.sid = sid;
Sname = sname;
this.gender = gender;
}
public Students(String sname, String gender) {
super();
Sname = sname;
this.gender = gender;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return Sname;
}
public void setSname(String sname) {
Sname = sname;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Students [sid=" + sid + ", Sname=" + Sname + ", gender="
+ gender + "]";
}
}
定义:Students.hbm.xml
<?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 May 24, 2016 4:29:13 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="Students" table="STUDENTS">
<id name="sid" type="int">
<column name="SID" />
<generator class="increment" />
</id>
<property name="Sname" type="java.lang.String">
<column name="SNAME" />
</property>
<property name="gender" type="java.lang.String">
<column name="GENDER" />
</property>
</class>
</hibernate-mapping>
测试类:
import static org.junit.Assert.*;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date;
import java.util.Iterator;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.jdbc.Work;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.yonyou.hibernateentity.Grade;
import com.yonyou.hibernateentity.Students;
import com.yonyou.hibernateutil.HibernateUtil;
public class TestStudents {
@Test
public void testAdd() {
Grade grade = new Grade("java一班", "java软件一班");
Students stu = new Students("张三", "男");
Students stu2 = new Students("李四", "女");
grade.getSet().add(stu);
grade.getSet().add(stu2);
Session session = HibernateUtil.getSession();
Transaction transaction = session.beginTransaction();
session.save(grade);
session.save(stu);
session.save(stu2);
transaction.commit();
HibernateUtil.closeSession(session);
}
/**
* 获取gid=1的班级和班级所有学生。
*/
@Test
public void testget() {
Session session = HibernateUtil.getSession();
Grade grade = (Grade) session.get(Grade.class, 1);
System.out.println(grade);
Set<Students> set = grade.getSet();
for (Iterator iterator = set.iterator(); iterator.hasNext();) {
Students students = (Students) iterator.next();
System.out.println(students);
}
}
/**
* 添加一个软件二班,更新sid=1的学生到软件二班
*/
@Test
public void testupdate() {
Session session = HibernateUtil.getSession();
Transaction tr = session.beginTransaction();
Students stu = (Students) session.get(Students.class, 1);
Grade grade = new Grade("java二班", "java软件二班");
grade.getSet().add(stu);
session.save(grade);
tr.commit();
HibernateUtil.closeSession(session);
}
/**
* 添加一个软件二班,更新sid=1的学生到软件二班
*/
@Test
public void testdelete() {
Session session = HibernateUtil.getSession();
Transaction tr = session.beginTransaction();
// Students stu = (Students) session.get(Students.class, 2);
// session.delete(stu);
Grade stu = (Grade) session.get(Grade.class, 2);
session.delete(stu);
tr.commit();
HibernateUtil.closeSession(session);
}
}
hibernateUtil:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class HibernateUtil {
private static SessionFactory sessionFactory;
private static Session session;
static {
// 创建配置对象
Configuration config = new Configuration().configure();
// 创建服务注册对象
ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(
config.getProperties()).buildServiceRegistry();
// 创建会话工厂对象
sessionFactory = config.buildSessionFactory(registry);
// 创建会话对象
session = sessionFactory.openSession();
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Session getSession() {
session = sessionFactory.openSession();
return session;
}
public static void closeSession(Session session) {
if (session != null) {
session.close();
}
}
}
主配置文件hibernate.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://10.115.0.223:3306/hibernate?useUnicode=true&characterEncoding=UTF-8</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">false</property>
<property name="hbm2ddl.auto">update</property>
<!-- <property name="default_schema">hibernate</property> -->
<mapping resource="Students.hbm.xml" />
<mapping resource="Grade.hbm.xml" />
</session-factory>
</hibernate-configuration>
以上配置,是由一端控制多端的增加,更改,删除的。