Java笔记之hibernate(六):多对一
0.说在前面
1.修改Employee类,添加Department类型的属性department,它们之间的关系为多对一的关系
package com.hibernate.demo.bean; public class Employee { private Integer empId; private String empName; private Department department; public Employee() { } public Employee(Integer empId, String empName, Department department) { super(); this.empId = empId; this.empName = empName; this.department = department; } public Integer getEmpId() { return empId; } public void setEmpId(Integer empId) { this.empId = empId; } public String getEmpName() { return empName; } public void setEmpName(String empName) { this.empName = empName; } public Department getDepartment() { return department; } public void setDepartment(Department department) { this.department = department; } @Override public String toString() { return "Employee [empId=" + empId + ", empName=" + empName + ", department=" + department + "]"; } }
2.修改Employee.hbm.xml文件,添加many-to-one的配置
<?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="com.hibernate.demo.bean"> <!-- 映射Employee类与t_employee表 --> <class name="Employee" table="t_employee"> <id name="empId" column="emp_id"> <!-- 声明主键生成策略为自增 --> <generator class="native"></generator> </id> <property name="empName" column="emp_name"></property> <!-- 多对一,name指定多的一方中一的一方的属性名称,class指定一的一方类名,column指定多的一方表中指向一的一方表的外键字段 --> <many-to-one name="department" class="Department" column="dept_id"></many-to-one> </class> </hibernate-mapping>
3.新建Department类
package com.hibernate.demo.bean; public class Department { private Integer deptId; private String deptName; public Integer getDeptId() { return deptId; } public void setDeptId(Integer deptId) { this.deptId = deptId; } public String getDeptName() { return deptName; } public void setDeptName(String deptName) { this.deptName = deptName; } @Override public String toString() { return "Department [deptId=" + deptId + ", deptName=" + deptName + "]"; } }
4.新建Department.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="com.hibernate.demo.bean"> <!-- 映射Department类与表t_department --> <class name="Department" table="t_department"> <id name="deptId" column="dept_id"> <!-- 声明主键生成策略为自增 --> <generator class="native"></generator> </id> <property name="deptName" column="dept_name"></property> </class> </hibernate-mapping>
5.修改hibernate.cfg.xml文件,添加Department.hbm.xml映射配置
<?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/keeper?characterEncoding=utf-8</property> <property name="connection.username">root</property> <property name="connection.password">123456</property> <!-- MySQL方言配置 --> <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property> <property name="show_sql">true</property> <property name="hbm2ddl.auto">update</property> <mapping resource="com/hibernate/demo/bean/Employee.hbm.xml"/> <mapping resource="com/hibernate/demo/bean/Department.hbm.xml"/> </session-factory> </hibernate-configuration>
6.新建ManyToOneTest类
package com.hibernate.demo.test; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.classic.Session; import com.hibernate.demo.bean.Department; import com.hibernate.demo.bean.Employee; public class ManyToOneTest { public static void main(String[] args) { //加载配置文件,创建会话工厂对象 SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); //创建会话对象 Session session = sessionFactory.openSession(); //开始事务 Transaction transaction = session.beginTransaction(); //新建Department对象 Department department=new Department(); department.setDeptName("商务部"); session.save(department); //新建Employee对象 Employee employee1=new Employee(); employee1.setEmpName("张三"); employee1.setDepartment(department); session.save(employee1); Employee employee2=new Employee(); employee2.setEmpName("emp"); employee2.setDepartment(department); session.save(employee2); //提交事务 transaction.commit(); //关闭会话对象 session.close(); //关闭会话工厂对象 sessionFactory.close(); } }
7.运行ManyToOneTest类并查看数据库
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Hibernate: insert into t_department (dept_name) values (?) Hibernate: insert into t_employee (emp_name, dept_id) values (?, ?) Hibernate: insert into t_employee (emp_name, dept_id) values (?, ?)
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!