分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

hibernate的多对多配置

发布时间:2023-09-06 02:11责任编辑:熊小新关键词:配置

Teacher.java

 1 package com.xiaostudy.domain; 2 ?3 import java.util.HashSet; 4 import java.util.Set; 5 ?6 /** 7 ?* Teacher 8 ?* ?9 ?* @author xiaostudy10 ?*11 ?*/12 public class Teacher {13 ????// id14 ????private Integer id;15 ????// 普通属性16 ????private String name;17 ????// 另一个类的集合18 ????private Set<Student> students = new HashSet<Student>();19 20 ????// 自动生成get、set方法21 ????public Integer getId() {22 ????????return id;23 ????}24 25 ????public void setId(Integer id) {26 ????????this.id = id;27 ????}28 29 ????public String getName() {30 ????????return name;31 ????}32 33 ????public void setName(String name) {34 ????????this.name = name;35 ????}36 37 ????public Set<Student> getStudents() {38 ????????return students;39 ????}40 41 ????public void setStudents(Set<Student> students) {42 ????????this.students = students;43 ????}44 45 }

Student.java

 1 package com.xiaostudy.domain; 2 ?3 import java.util.HashSet; 4 import java.util.Set; 5 ?6 /** 7 ?* Student 8 ?* ?9 ?* @author xiaostudy10 ?*11 ?*/12 public class Student {13 ????// id14 ????private Integer id;15 ????// 普通属性16 ????private String name;17 ????// 另一个类的集合18 ????private Set<Teacher> teachers = new HashSet<Teacher>();19 20 ????// 自动生成get、set方法21 ????public Integer getId() {22 ????????return id;23 ????}24 25 ????public void setId(int id) {26 ????????this.id = id;27 ????}28 29 ????public String getName() {30 ????????return name;31 ????}32 33 ????public void setName(String name) {34 ????????this.name = name;35 ????}36 37 ????public Set<Teacher> getTeachers() {38 ????????return teachers;39 ????}40 41 ????public void setTeachers(Set<Teacher> teachers) {42 ????????this.teachers = teachers;43 ????}44 45 ????public void setId(Integer id) {46 ????????this.id = id;47 ????}48 49 }

Teacher.hbm.xml

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC ?3 ????"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 ????"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 <!-- 导入包 --> 6 <hibernate-mapping package="com.xiaostudy.domain"> 7 ????<!-- name为bean的类名,table为数据库的表名 --> 8 ????<class name="Teacher" table="t_teacher"> 9 ????????<!-- name为bean的id,column为数据库表的列名 -->10 ????????<id name="id" column="id">11 ????????????<!-- 设置自动更新表,表没有的话创建一个,有的话,再判断结构是否为所需,如有没有想应得列,会自动添加列,多余的也不会删除 -->12 ????????????<generator class="native"></generator>13 ????????</id>14 ????????<!-- name为普通属性,column为数据库表的列名,type为数据类型 -->15 ????????<property name="name" column="name" type="string"></property>16 ????????<!-- name为bean中另一个类的集合名称,table为多对多中间的表,cascade为级联设置自动更新表 -->17 ????????<set name="students" table="t_teacher_student" cascade="save-update">18 ????????????<!-- 自身连接外面的外键 -->19 ????????????<key column="tid"></key>20 ????????????<!-- column为另一个连接的外键,class为另一个bean的类名 -->21 ????????????<many-to-many column="sid" class="Student"></many-to-many>22 ????????</set>23 ????</class>24 </hibernate-mapping>

Student.hbm.xml

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC ?3 ????"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 ????"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping package="com.xiaostudy.domain"> 6 ????<class name="Student" table="t_student"> 7 ????????<id name="id" column="id"> 8 ????????????<generator class="native"></generator> 9 ????????</id>10 ????????<property name="name" column="name" type="string"></property>11 ????????<set name="teachers" table="t_teacher_student">12 ????????????<key column="sid"></key>13 ????????????<many-to-many column="tid" class="Teacher"></many-to-many>14 ????????</set>15 ????</class>16 </hibernate-mapping>

hibernate.cfg.xml

 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 ????"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 ????"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 5 ?6 <hibernate-configuration> 7 ????<session-factory> 8 ????????<!-- 注册驱动 --> 9 ????????<property name="connection.driver_class">com.mysql.jdbc.Driver</property>10 ????????<!-- mysql的用户名 -->11 ????????<property name="connection.username">root</property>12 ????????<!-- mysql的用户密码 -->13 ????????<property name="connection.password">123456</property>14 ????????<!-- 连接mysql的某库 -->15 ????????<property name="connection.url">jdbc:mysql://localhost:3306/user</property>16 ????????<!-- 控制台输出sql -->17 ????????<property name="show_sql">true</property>18 ????????<!-- 格式化输出的sql -->19 ????????<property name="format_sql">true</property>20 ????????<!-- 自动提交事务 -->21 ????????<!-- <property name="connection.autocommit">true</property> -->22 ????????<!-- 创建sql表23 ????????????update:如果没有表,则创建一个。如果有表,而且表结构一致,那么不改变表。如果表结构不一样,会添加sql表缺少的列,多余的也不会删除。24 ????????????create:不管sql表有没有存在,都会重新创建表。25 ????????????create-drop:在create的基础上,每次关闭虚拟机时都会把表删除了。26 ????????????validate:效验sql表,如果一致,则没有反应,如果不一致了,会抛出异常。27 ?????????-->28 ????????<property name="hbm2ddl.auto">update</property>29 ????????<!-- 将Session与线程绑定=> 只有配置了该配置,才能使用getCurrentSession -->30 ????????<property name="current_session_context_class">thread</property>31 ????????<!-- 数据库方言配置 -->32 ????????<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>33 ????????<!-- 导入映射文件 -->34 ????????<mapping resource="com/xiaostudy/domain/Teacher.hbm.xml"/>35 ????????<mapping resource="com/xiaostudy/domain/Student.hbm.xml"/>36 ????</session-factory>37 </hibernate-configuration>

Test1.java

 1 package com.xiaostudy.test; 2 ?3 import org.hibernate.classic.Session; 4 ?5 import com.xiaostudy.domain.Student; 6 import com.xiaostudy.domain.Teacher; 7 import com.xiaostudy.util.HibernateUtils; 8 ?9 /**10 ?* 测试多对多11 ?* 12 ?* @author xiaostudy13 ?*14 ?*/15 public class Test1 {16 17 ????public static void main(String[] args) {18 ????????//根据hibernate工具类,获取一个全新的Session19 ????????Session session = HibernateUtils.openSession();20 ????????//开始事务21 ????????session.beginTransaction();22 ????????Teacher teacher1 = new Teacher();23 ????????Teacher teacher2 = new Teacher();24 ????????teacher1.setName("t1");25 ????????teacher2.setName("t2");26 27 ????????Student student1 = new Student();28 ????????Student student2 = new Student();29 ????????student1.setName("s1");30 ????????student2.setName("s2");31 32 ????????//维护关系33 ????????teacher1.getStudents().add(student1);34 ????????teacher1.getStudents().add(student2);35 ????????teacher2.getStudents().add(student1);36 ????????teacher2.getStudents().add(student2);37 38 ????????//持久化数据39 ????????session.save(teacher1);40 ????????session.save(teacher2);41 42 ????????//关闭事务并提交事务43 ????????session.getTransaction().commit();44 ????????//关闭资源45 ????????session.close();46 ????}47 48 }

码云:https://gitee.com/xiaostudy2/hibernate_manyToMany_demo/attach_files


hibernate的多对多配置

原文地址:https://www.cnblogs.com/xiaostudy/p/9520897.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved