Hibernate编写多对多单向关系的CRUD操作
发布日期:2021-05-10 03:33:07 浏览次数:34 分类:精选文章

本文共 6653 字,大约阅读时间需要 22 分钟。

Hibernate编写多对多单向关系的CRUD操作

项目架构

本项目主要配置了一个基于Hibernate的多对多关系CRUD操作系统。系统采用Java语言编写,使用Hibernate框架进行持久化操作。项目的主要分层结构如下:

  • 实体类:定义了两个主表StudentTeacher,分别对应学生和教师信息。
  • 关系类:通过@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_sqlformat_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 List
    students = 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();        List
    teachers = 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
    上一篇:计算自己活了多少天?
    下一篇:android开发之获取RadioGroup选中项的值

    发表评论

    最新留言

    逛到本站,mark一下
    [***.202.152.39]2025年04月17日 03时09分48秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章