做了一个hibernate关联映射的小案例(CRUD),包含一对多、多对多的映射关系。

先看概念数据模型

Student表因可能出现重名所以采用联合主键。

School实体类

package org.hrbust.vo;public class School {private int id;private String name;//省略getter/setter方法和构造方法}

Classes实体类

package org.hrbust.vo;import java.util.Set;public class Classes {private int id;private String name;private School school;private Set<Teacher> teachers = null;//省略getter/setter方法和构造方法
}

Cource实体类

package org.hrbust.vo;import java.util.Set;public class Cource {private int id;private String name;private Set<Student> students = null;private Set<Teacher> teachers = null;//省略getter/setter方法和构造方法}

Teacher实体类

package org.hrbust.vo;import java.util.HashSet;
import java.util.Set;public class Teacher {private int id;private String name;private School school;private Set<Cource> cources = new HashSet<Cource>();private Set<Classes> classes = new HashSet<Classes>();private Set<Student> students = new HashSet<Student>();//省略getter/setter方法和构造方法}

Student实体类

package org.hrbust.vo;import java.util.HashSet;
import java.util.Set;public class Student {private StudentPK pk;//联合主键private int age;private School school;private Classes classes;private Set<Cource> cources = new HashSet<Cource>();private Set<Teacher> teachers = new HashSet<Teacher>();//省略getter/setter方法和构造方法}

StudentPK联合主键类

package org.hrbust.vo;import java.io.Serializable;public class StudentPK implements Serializable{private static final long serialVersionUID = 8745989753266098194L;private int id;private String name;//省略getter/setter方法和构造方法}

School.hbm.xml映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="org.hrbust.vo"><class name="School"><id name="id"><generator class="native"/></id><property name="name"/></class></hibernate-mapping>

Classes.hbm.xml映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="org.hrbust.vo"><class name="Classes"><id name="id"><generator class="native"/></id><property name="name"/><many-to-one name="school"/><set name="teachers" table="classes_teacher"><key column="classesId"/><many-to-many class="Teacher" column="teacherId"/></set></class></hibernate-mapping>    

Cource.hbm.xml映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="org.hrbust.vo"><class name="Cource"><id name="id"><generator class="native"/></id><property name="name"/><set name="students" table="student_cource"><key column="courceId"/><many-to-many class="Student"><column name="studentId"/><column name="studentName"></column></many-to-many></set><set name="teachers" table="teacher_cource"><key column="courceId"/><many-to-many class="Teacher" column="teacherId"/></set></class></hibernate-mapping>

Teacher.hbm.xml映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="org.hrbust.vo"><class name="Teacher"><id name="id"><generator class="native"/></id><property name="name"/><many-to-one name="school"/><set name="classes" table="classes_teacher"><key column="teacherId"/><many-to-many class="Classes" column="classesId"/></set><set name="students" table="student_teacher"><key column="teacherId"/><many-to-many class="Student"><column name="studentId"/><column name="studentName"></column></many-to-many></set><set name="cources" table="teacher_cource"><key column="teacherId"/><many-to-many class="Cource" column="courceId"/></set></class></hibernate-mapping>

Student.hbm.xml映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="org.hrbust.vo"><class name="Student" table="student"><composite-id name="pk" class="StudentPK"><key-property name="id"/><key-property name="name"/></composite-id><property name="age"/><many-to-one name="school"/><many-to-one name="classes"/><set name="teachers" table="student_teacher"><key><column name="studentId"/><column name="studentName"/></key><many-to-many class="Teacher" column="teacherId"/></set><set name="cources" table="student_cource"><key><column name="studentId"/><column name="studentName"/></key><many-to-many class="Cource" column="courceId"/></set></class></hibernate-mapping>

Hibernate核心配置文件

<?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="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property><property name="connection.username">root</property><property name="connection.password">root</property><property name="show_sql">true</property><!-- <property name="hbm2ddl.auto">create</property> --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><property name="format_sql">true</property><mapping resource="org/hrbust/vo/Student.hbm.xml" /><mapping resource="org/hrbust/vo/Cource.hbm.xml" /><mapping resource="org/hrbust/vo/Teacher.hbm.xml" /><mapping resource="org/hrbust/vo/Classes.hbm.xml" /><mapping resource="org/hrbust/vo/School.hbm.xml" />
</session-factory></hibernate-configuration>

Service接口

package org.hrbust.service;import java.util.List;public interface Service {public <T> boolean add(T t);public <T> boolean delete(T t);public <T> boolean update(T t);public <T> boolean query(T t);public List queryByHQL(String hql);
}

使用范型和反射实现CRUD方法

ServiceImpl(Service接口实现类)

package org.hrbust.service;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query;
import org.hrbust.utils.HibernateUtils;
import org.hrbust.vo.Student;
import org.hrbust.vo.StudentPK;public class ServiceImpl implements Service {private Session session = null;private Transaction transaction = null;//增@Overridepublic <T> boolean add(T t) {int result = -1;try {session = HibernateUtils.getSession();transaction = session.beginTransaction();Object obj = session.save(t);if (obj instanceof StudentPK) {result = 1;} else {result = (int) obj;}transaction.commit();} catch (Exception e) {e.printStackTrace();transaction.rollback();} finally {session.close();}if (result >= 0) {return true;} else {return false;}}//删@Overridepublic <T> boolean delete(T t) {int result = -1;try {session = HibernateUtils.getSession();transaction = session.beginTransaction();session.delete(t);transaction.commit();result = 1;} catch (Exception e) {e.printStackTrace();transaction.rollback();} finally {session.close();}if (result >= 0) {return true;} else {return false;}}//改@Overridepublic <T> boolean update(T t) {int result = -1;try {session = HibernateUtils.getSession();transaction = session.beginTransaction();session.update(t);transaction.commit();result = 1;} catch (Exception e) {e.printStackTrace();transaction.rollback();} finally {session.close();}if (result >= 0) {return true;} else {return false;}}//查@Overridepublic <T> boolean query(T t) {int result = -1;// try {session = HibernateUtils.getSession();transaction = session.beginTransaction();Method getId = null;T t1 = null;try {if (t instanceof Student) {Class clazz = t.getClass();getId = clazz.getMethod("getPk");StudentPK pk = ((StudentPK)getId.invoke(t));t1 = (T) session.get(t.getClass(), pk);System.out.println(t1 + " 1213");} else {Class clazz = t.getClass();getId = clazz.getMethod("getId");Integer id = (Integer) getId.invoke(t);t1 = (T) session.get(t.getClass(), id);}System.out.println(t1.toString());transaction.commit();result = 1;} catch (NoSuchMethodException | SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (Exception e) {e.printStackTrace();transaction.rollback();}finally{session.close();}if (result >= 0) {return true;} else {return false;}} //查(通过HQL)@Overridepublic List queryByHQL(String hql) {List list = null;try {session = HibernateUtils.getSession();transaction = session.beginTransaction();Query query = session.createQuery(hql);list = query.list();transaction.commit();} catch (Exception e) {transaction.rollback();} finally {session.close();}if (list != null && list.size() >= 0) {return list;} else {return null;}}
}

HibernateUtils类

package org.hrbust.utils;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;public class HibernateUtils {private static Configuration CONFIG;private static SessionFactory SESSIONFACTORY;static{CONFIG = new Configuration().configure();SESSIONFACTORY = CONFIG.buildSessionFactory();}public static Session getSession(){return SESSIONFACTORY.openSession();}}

Test类

package org.hrbust.test;import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hrbust.service.Service;
import org.hrbust.service.ServiceImpl;
import org.hrbust.utils.HibernateUtils;
import org.hrbust.vo.Classes;
import org.hrbust.vo.Cource;
import org.hrbust.vo.School;
import org.hrbust.vo.Student;
import org.hrbust.vo.StudentPK;
import org.hrbust.vo.Teacher;public class HibernateTest {private static Service service = new ServiceImpl();;public static void add() {//学校School school = new School();school.setName("哈理工");School school1 = new School();school1.setName("哈工大");//课程Cource cource = new Cource();cource.setName("ORM");Cource cource1 = new Cource();cource1.setName("Spring");Cource cource2 = new Cource();cource2.setName("struts2");//班级Classes classes = new Classes();classes.setName("软件15-4");classes.setSchool(school);Classes classes1 = new Classes();classes1.setName("软件15-3");classes1.setSchool(school);Classes classes2 = new Classes();classes2.setName("法学15-3");classes2.setSchool(school1);//教师Teacher teacher = new Teacher();teacher.setName("于波");teacher.setSchool(school);teacher.getClasses().add(classes);teacher.getClasses().add(classes1);teacher.getCources().add(cource);teacher.getCources().add(cource1);teacher.getCources().add(cource2);Teacher teacher1 = new Teacher();teacher1.setName("李金刚");teacher1.setSchool(school);teacher1.getClasses().add(classes2);teacher1.getCources().add(cource2);//学生Student student = new Student();StudentPK pk = new StudentPK();pk.setId(1);pk.setName("吕小胜");student.setPk(pk);student.setAge(23);student.setSchool(school);student.setClasses(classes);student.getTeachers().add(teacher);student.getTeachers().add(teacher1);student.getCources().add(cource);student.getCources().add(cource1);student.getCources().add(cource2);Student student1 = new Student();StudentPK pk1 = new StudentPK();pk1.setId(2);pk1.setName("吕中胜");student1.setPk(pk1);student1.setAge(18);student1.setSchool(school1);student1.setClasses(classes2);Student student2 = new Student();StudentPK pk2 = new StudentPK();pk2.setId(3);pk2.setName("吕大胜");student2.setPk(pk2);student2.setAge(16);student2.setSchool(school1);student2.setClasses(classes2);if(service.add(school)&&service.add(school1)&&service.add(cource)&&service.add(cource1)&&service.add(cource2)&&service.add(classes)&&service.add(classes1)&&service.add(classes2)&&service.add(teacher)&&service.add(teacher1)&&service.add(student)&&service.add(student1)){System.out.println("添加成功");}else {System.out.println("添加失败");}}public static void query(){Student student = new Student();StudentPK pk = new StudentPK();pk.setId(1);pk.setName("吕小胜");student.setPk(pk);Session session = HibernateUtils.getSession();Transaction transaction = session.beginTransaction();Object obj = session.get(Student.class, pk);System.out.println(obj.toString());transaction.commit();if(service.query(student)){System.out.println("查找成功");}else{System.out.println("查找失败");}}public static void main(String[] args) {add();query();}
}

运行后生成的数据库表

HIbernate关联映射小案例(CRUD)相关推荐

  1. Hibernate 关联映射 之 多对多 关联(二) 之拆分

    1.由问题引出一个多对多拆分成两个多对一 问题:Hibernate 关联映射 之 多对多 关联(一)中中间表只是一个存放用户和角色的表,并无其他作用,如果客户有其他的需求,该表就无法扩展. 2.问题解 ...

  2. Oracle primary,unique,foreign 区别,Hibernate 关联映射

    Oracle primary,unique,foreign 区别 转:http://www.cnblogs.com/henw/archive/2012/08/15/2639510.html NOT N ...

  3. hibernate关联映射_具有关联映射的Hibernate Composite ID

    hibernate关联映射 最近,我们面临着带有复合id字段的Hibernate关联映射的棘手情况. 我们需要与一对一和多对一进行双向关联.我们的拖曳表是" REPORT"和&qu ...

  4. Hibernate关联映射(一对多/多对多)

    版权声明:翀版 https://blog.csdn.net/biggerchong/article/details/84340105 3.  Hibernate关联映射 上接Hibernate持久化类 ...

  5. (转)Hibernate关联映射——一对多(多对一)

    http://blog.csdn.net/yerenyuan_pku/article/details/70152173 Hibernate关联映射--一对多(多对一) 我们以客户(Customer)与 ...

  6. (转)Hibernate关联映射——对象的三种关系

    http://blog.csdn.net/yerenyuan_pku/article/details/70148618 Hibernate关联映射--对象的三种关系 Hibernate框架基于ORM设 ...

  7. Hibernate 关联映射 之 多对多 关联(一)

    1.了解几个知识点: 一.一般的设计中,多对多关联映射,需要一个中间表 二.Hibernate会自动生成中间表 三.Hibernate使用many-to-many标签来表示多对多的关联 四.多对多的关 ...

  8. hibernate关联映射:多对一、一对一

    配置对象关联关系 - 单向一对多关系 - 例如:班级与学生 Grade类中 public class Grade{private int gid;private String gname;privat ...

  9. Java三大框架之——Hibernate关联映射与级联操作

    什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...

最新文章

  1. 换硬币c语言编程_如何才能成为编程高手?别人都不告诉你的东西,我来说给你听...
  2. NURBS曲面结构及生成原理、修改方法
  3. 对字符串数组排序,使所有变位词都相邻(C++)
  4. mysql gno( )_MySql笔记(一)
  5. PHP-代码审计-XSS
  6. c语言简单密码字符a用f代替,c语言实验.doc
  7. nginx编译安装与配置使用
  8. QQuickRenderControl
  9. pycharm 2020 版取消鼠标悬停显示说明文档的方法
  10. Django,再谈json序列化
  11. sscanf函数详解
  12. docker_5 DockerFile
  13. java对读写文件进行操作
  14. 机器学习- 吴恩达Andrew Ng Week8 知识总结 Clustering
  15. 模拟CMOS 集成电路设计
  16. Hoverfly - 微服务虚拟化示例
  17. Java笔记——关于设置自定义字体、全局字体方面和getFont()的使用
  18. [4G5G专题-34]:物理层-浅谈m序列的原理以及在NR PSS中的应用
  19. Yolov3中先验框生成
  20. Java图像处理(后面会补充PS啥的)

热门文章

  1. Unity Sprite的概念或意义
  2. python+opencv实现人脸识别|采用现成训练好的模型
  3. 论文解读 Receptive Field Block Net for Accurate and Fast Object Detection
  4. rar、zip、7z等压缩率的测试
  5. 刷题 BFS 广度优先算法 : 大胖子走迷宫 (python, java)
  6. 今日巨大福利,1元体验京东云服务器,附云服务器用法的完整教程
  7. python语言应用 智慧树满分章节测试答案_Python语言应用完整智慧树网课章节测试答案...
  8. 如何使用Easy-POI导入复杂表头的Excel报表(含源码级分析)
  9. 水墨特效怎么做?两种方法快速搞定!大神都在用的超美视频画面效果
  10. 在Python中用WordCloud生成聊天记录热点词汇词云图