
Hibernate编写多对多单向关系的CRUD操作
发布日期:2021-05-10 03:33:07
浏览次数:34
分类:精选文章
本文共 6653 字,大约阅读时间需要 22 分钟。
Hibernate编写多对多单向关系的CRUD操作
项目架构
本项目主要配置了一个基于Hibernate的多对多关系CRUD操作系统。系统采用Java语言编写,使用Hibernate框架进行持久化操作。项目的主要分层结构如下:
- 实体类:定义了两个主表
Student
和Teacher
,分别对应学生和教师信息。 - 关系类:通过
@ManyToMany
注解定义两个实体之间的多对多关系,用@JoinTable
指定了中间关联表T_S
,并配置了外键匹配条件。 - 持久化配置:通过Hibernate的XML配置文件
hibernate.cfg.xml
配置了数据库连接信息、getSessionFactory方法等。
实现功能
本项目主要实现了以下功能:
数据持久化(CRUD):
- Create:实现了添加学生和教师的功能,使用Hibernate的session接口进行操作。
- Update:支持通过ID修改教师和学生的个人信息,不直接修改数据库表结构。
- Delete:提供通过ID删除教师和学生功能。删除操作不破坏原有表结构。
查询功能:
- 单表查询:实现了从Student表中查询ID在3到8之间的记录。
- 关联查询:实现了从Teacher表和关联的Student表中查询ID在4到9之间的记录。
- 关联查询结果:展示了每位教师的相应学生信息。
数据优化:
- 数据生成:确保每个表中数据量不少于10条。
- 性能优化:通过设置hibernate.cfg.xml中的
show_sql
和format_sql
为false,提高了查询性能。
代码实现
实体类
@Entity@Table(name = "student")public class Student { private int id; private String name; private int age; private String sex; @Id @GeneratedValue 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 getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
@Entitypublic class Teacher { private int id; private String name; private int age; private String sex; private Liststudents = new ArrayList<>(); @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @ManyToMany @JoinTable(name = "T_S", joinColumns = @JoinColumn(name = "T_id"), inverseJoinColumns = @JoinColumn(name = "S_id")) public List getStudents() { return students; } public void setStudents(List students) { this.students = students; }}
测试类
public class Text { public void save() { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Random rm = new Random(); Listteachers = new ArrayList<>(); List students = new ArrayList<>(); for (int i = 0; i < 10; i++) { Teacher t1 = new Teacher(); t1.setId(i); t1.setName("高辉" + i); t1.setAge(20); t1.setSex(sex[rm.nextInt(2)]); teachers.add(t1); Student s1 = new Student(); s1.setId(i); s1.setName("陈明" + i); s1.setAge(30); s1.setSex(sex[rm.nextInt(2)]); students.add(s1); } for (int i = 0; i < 10; i++) { for (int j = 9; j > 0; j--) { teachers.get(i).getStudents().add(students.get(j)); } session.save(students.get(i)); session.save(teachers.get(i)); } session.getTransaction().commit(); HibernateUtil.getSessionFactory().close(); } public void get() { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Query query = session.createQuery("from Student s1 where s1.id > :n and s1.id < :m"); Query query1 = session.createQuery("from Teacher t1 where t1.id > :n and t1.id < :m"); query.setParameter("n", 3); query.setParameter("m", 8); query1.setParameter("n", 3); query1.setParameter("m", 8); List list = (List ) query.list(); List teacherList = (List ) query1.list(); System.out.println("id大于3小于8的教师有:"); for (Teacher t1 : teacherList) { System.out.println(t1.getName()); } System.out.println("id大于3小于8的学生有:"); for (Student s1 : list) { System.out.println(s1.getName()); } session.getTransaction().commit(); HibernateUtil.getSessionFactory().close(); } public void getconnect() { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Query query = session.createQuery("from Teacher t1 where t1.id > :n and t1.id < :m"); query.setParameter("n", 4); query.setParameter("m", 9); List teacherList = (List ) query.list(); for (Teacher t1 : teacherList) { System.out.println("教师" + t1.getName() + "的学生有:"); for (Student s1 : t1.getStudents()) { System.out.println(s1.getName()); } } session.getTransaction().commit(); HibernateUtil.getSessionFactory().close(); } public void del() { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Teacher t1 = new Teacher(); t1 = (Teacher) session.get(Teacher.class, 1); session.delete(t1); Teacher t2 = new Teacher(); t2 = (Teacher) session.get(Teacher.class, 4); session.delete(t2); session.getTransaction().commit(); HibernateUtil.getSessionFactory().close(); } public void up() { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); Teacher t2 = new Teacher(); t2 = (Teacher) session.get(Teacher.class, 2); t2.setName("李明"); t2.setSex("男"); t2.setAge(20); session.update(t2); Student s1 = new Student(); s1 = (Student) session.get(Student.class, 1); s1.setName("李雷"); s1.setSex("男"); s1.setAge(18); session.getTransaction().commit(); HibernateUtil.getSessionFactory().close(); }}
Hibernate工具类
public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { Configuration cfg = new Configuration().configure(); ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build(); sessionFactory = cfg.buildSessionFactory(serviceRegistry); } catch (Throwable e) { throw new ExceptionInInitializerError(e); } } public static SessionFactory getSessionFactory() { return sessionFactory; }}
Hibernate配置文件
com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/user root 2 org.hibernate.dialect.MySQL5Dialect thread org.hibernate.cache.internal.NoCacheProvider false false update
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年04月17日 03时09分48秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
1.Html
2019-03-15
2.Html与CSS
2019-03-15
3&4.javascript
2019-03-15
5.bootstrap
2019-03-15
6.Xml
2019-03-15
7.tomcat_servlet
2019-03-15
8.request
2019-03-15
9.response
2019-03-15
13.javaweb三大组件
2019-03-15
3.Ajax&Json
2019-03-15
Maven的基本了解
2019-03-15
Linux总结
2019-03-15
格式化的盘要如何恢复文件
2019-03-15
python线程join,同步
2019-03-15
DKT—Going Deeper with Deep Knowledge Tracing
2019-03-15
莫烦nlp-BERT双向语言模型
2019-03-15
Android与iOS系统默认的一些样式差异
2019-03-15
js高阶编程之---单例模式,XHR兼容 (惰性思想)
2019-03-15
JAVA Runnable方法
2019-03-15
JAVA 数据流练习之 统计文本中出现的字的次数
2019-03-15