hibernate 一对多 多对一 关系表 增删改查大礼包ps二级查也有
今天来到混元气功 这货大概的意思就是你中有我 我中有你 ps 这里就要说到维护关系 ps写这个用了我一下午…….也是刚刚好复习到这里 顺便就写写
注意:一般都在多方维护关系,至于是用单向还是用多向要看业务需求。
单向 n-1 关联只需从 n 的一端可以访问 1 的一端。
建立一对多关系关系的表的原则是将一的一方的主键加入到多的一方的表作为外键。这里以员工和部门为例子来演示。以前不用hibernate时建立pojo类要在员工类Emp中加入一个属性,即部门编号deptid.使用hibernate则不同了,需要在“一”的一方类中加入一个set集合,里面存放“多”的一方的对象。而在“多”的一方的类中需要加入一个“一”方的对象。也就是说在Dept类中需要加入一个set集合,存放Emp对象,因为一个部门里面对应多个员工,所以用一个集合来表示。而每一个员工只能属于一个部门,所以员工类Emp里面需要加入一个Depe类对象,表示所属部门。部门类和员工类的代码如下
package com.java.bean;import com.java.bean.Department;/*员工*/
public class Employee {private int id;private String name;private Department department;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 Department getDepartment() {return department;}public void setDepartment(Department department) {this.department = department;}@Overridepublic String toString() {return name;}
}
然后是它的配置文件
<?xml version="1.0"?>
<!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.java.bean"><class name="Employee" table="t_employee"><id name="id" column="id" type="int"><generator class="native"></generator></id><property name="name" column="name" type="string" length="40"></property><many-to-one name="department" class="Department" column="department_id" ></many-to-one></class></hibernate-mapping>
many-to-one属性: 多一对一
name:设定待映射的持久化类的名字。
column:设定和持久化类的属性对应的表的外键。
class:设定持久化类的属性的类型。
not-null:是否允许为空。
然后是我们的 Department
package com.java.bean;import java.util.Set;public class
Department {private int id;private String name;private Set<Employee> employees;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 Set<Employee> getEmployees() {return employees;}public void setEmployees(Set<Employee> employees) {this.employees = employees;}@Overridepublic String toString() {return name;}
}
他的配置文件就比较重要 了 要开启维护
<?xml version="1.0"?>
<!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.java.bean"><class name="Department" table="t_department"><id name="id" column="id" type="int"><generator class="native"></generator></id><property name="name" column="name" type="string" length="40"></property><set name="employees" inverse="true" lazy="extra" ><key column="department_id"></key><one-to-many class="Employee" /></set></class>
</hibernate-mapping>
innerse 的属性是true则为开启 然后我们要写一个dao类 也就是增删改查大礼包
package cn.java.dao;import java.util.Iterator;
import java.util.List;import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;import cn.java.domain.Employee;
import cn.java.domain.User;public class EmployeeDao {private static SessionFactory sf;static {Configuration cfg = new Configuration().configure("hibernate.cfg.xml");sf = cfg.buildSessionFactory();// 获得会话工厂}// 增加public void add(Employee emp) {// 读配置文件,会Session s = sf.openSession();Transaction t = null;try {t = s.beginTransaction();s.save(emp);t.commit();} catch (Exception e) {t.rollback();throw new RuntimeException(e);} finally {s.close();}}//查询public Employee findEmployeeById(int id){Session s = sf.openSession();Transaction t = null;Employee em = null;try {t = s.beginTransaction();em = (Employee) s.get(Employee.class, id);//em = s.createQuery("FROM t_employee e where e.id=1").list();t.commit();} catch (Exception e) {t.rollback();throw new RuntimeException(e);} finally {s.close();}return em;}//查询所有public List<Employee> findEmployee(){Session s = sf.openSession();Transaction t = null;List<Employee> list = null;try {t = s.beginTransaction();//em = (Employee) s.get(Employee.class, id);list = s.createQuery("FROM Employee e where e.id=1")//.setCacheable(true)//.list();t.commit();} catch (Exception e) {t.rollback();throw new RuntimeException(e);} finally {s.close();}return list;}//查询 2级缓存 滑稽public Iterator<Employee> findEmployeeIt(){Session s = sf.openSession();Transaction t = null;Iterator<Employee> it = null;try {t = s.beginTransaction();//em = (Employee) s.get(Employee.class, id);it = s.createQuery("FROM Employee e where e.id=1").iterate();t.commit();} catch (Exception e) {t.rollback();throw new RuntimeException(e);} finally {//s.close();}return it;}//移除关系public Employee removeRelation(int id){Session s = sf.openSession();Transaction t = null;Employee em = null;try {t = s.beginTransaction();em = (Employee) s.get(Employee.class, id);em.setDepartment(null);t.commit();} catch (Exception e) {t.rollback();throw new RuntimeException(e);} finally {s.close();}return em;}//删除public void deleteEmployee(int id){Session s = sf.openSession();Transaction t = null;Employee em = null;try {t = s.beginTransaction();em = (Employee) s.get(Employee.class, id);s.close();em.setName("haoren");t.commit();} catch (Exception e) {t.rollback();throw new RuntimeException(e);} finally {s.close();}}//更新public void updateEmployee(int id){Session s = sf.openSession();Transaction t = null;Employee em = null;try {t = s.beginTransaction();em = (Employee) s.get(Employee.class, id);s.close();em.setName("haoren");t.commit();} catch (Exception e) {t.rollback();throw new RuntimeException(e);} finally {s.close();}}}
ps如果觉得我加载文件的 方法过时了可以换成 如下
private static SessionFactory sf;static {try {Configuration configuration = new Configuration();configuration.configure();ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();sf = configuration.buildSessionFactory(serviceRegistry);}catch (Exception e){throw e;}}
emmmm屁股坐太久麻木了……
hibernate 一对多 多对一 关系表 增删改查大礼包ps二级查也有相关推荐
- Hibernate一对多/多对一关系映射详解及相应的增删查改操作
以客户与订单的关系为例 1.在实体模型类中绑定两者关系: 客户类: public class Customer {private Integer id;//客户idprivate String nam ...
- mysql一对多、多对多关系表的建立与查询
夏梦,只写最简洁最有效的教程-欢迎关注 在实际的开发场景中,我们会建立非常多的表,其中一对多和多对多关系表的建立和查询对与一些刚接触的人来说可能会有些疑惑,所以为了解决这些疑惑,有了这篇文章. 注意: ...
- day 69-70 一对一 一对多 多对一联表查询
day 69 orm操作之表关系,多对多,多对一多对一/一对多,多对多{类中的定义方法}day691. 昨日内容回顾1. 单表增删改查2. 单表查询API返回QuerySet对象的:1. .all() ...
- SQLAlchemy_定义(一对一/一对多/多对多)关系
SQLAlchemy_定义(一对一/一对多/多对多)关系 目录 Basic Relationship Patterns One To Many One To One Many To Many Basi ...
- django(七)之数据库表的单表-增删改查QuerySet,双下划线
https://www.cnblogs.com/haiyan123/p/7738435.html https://www.cnblogs.com/yuanchenqi/articles/6083427 ...
- MySQL基础知识-MySQL概述安装,单表增删改查,函数,约束,多表查询,事物
MySQL基础知识-MySQL概述安装,单表增删改查,函数,约束,多表查询,事物 前言 1.MySQL概述 1.1数据库相关概念 1.2MySQL数据库 1.2.1版本 1.2.2下载 1.2.3安装 ...
- mysql删除分表键_一文看懂 MySQL 分区和分表,提高表增删改查效率
原标题:一文看懂 MySQL 分区和分表,提高表增删改查效率 作者:冯帅,精通Oracle. MySQL. 擅长异构数据库数据同步及迁移.数据库的设计和调优,对高可用方案有深入研究. MySQL分区和 ...
- mysql如何修改学生表_MySQL 详细单表增删改查crud语句
MySQL 增删改查语句 1.创建练习表 这里练习表没有满足三范式 第一范式(又称 1NF):保证每列的原子性 数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性.满足第一范 ...
- django调用python脚本返回_Django框架(九)—— 单表增删改查,在Python脚本中调用Django环境...
单表增删改查,在Python脚本中调用Django环境 一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的settin ...
最新文章
- Python List append()方法
- ExtJs4 笔记(5) Ext.Button 按钮
- mina 粘包、多包和少包的解决方法
- python去掉字符串最外侧的引号_疯狂Python讲义第二章读书笔记
- 数据结构杂谈番外篇——时间复杂度计算
- [云框架]KONG API Gateway v1.5 -框架说明、快速部署、插件开发
- 百万数据下几种SQL性能测试
- 【TensorFlow】TensorFlow从浅入深系列之八 -- 教你学会变量管理
- 一个fork的面试题 转
- wamp新建虚拟目录无法运行的解决方法
- 学习HTML5+CSS3的第一天
- python批量上传执行脚本_python 写的批量操作远程主机脚本(命令执行,上传、下载文件)...
- 【狂神说Redis】5 事务
- Phonegap 之 iOS银联在线支付(js调用ios端银联支付控件)
- 信号处理--傅里叶变换的性质及常用信号的傅里叶变换
- (转载)巴西世界杯谁能夺冠?霍金和高盛做预测
- crontab定时任务
- 2022-2028全球与中国业务流程管理(BPM)服务市场现状及未来发展趋势
- 搭建之星中文编程教学教程视频
- vertical-align相关解析+图片居中