网站建设与维护试卷做网站 十万
news/
2025/9/24 20:48:50/
文章来源:
网站建设与维护试卷,做网站 十万,张家界工程建设信息网站,互联网保险和线下保险的区别Mybatis#xff1a;一对一查询映射处理 前言一、概述二、创建数据模型三、 问题四、解决方案1、方案一#xff1a;级联方式处理映射关系2、方案二#xff1a;使用association处理映射关系3、方案三#xff1a;分步查询 前言
本博主将用CSDN记录软件开发求学之路上亲身所得… Mybatis一对一查询映射处理 前言一、概述二、创建数据模型三、 问题四、解决方案1、方案一级联方式处理映射关系2、方案二使用association处理映射关系3、方案三分步查询 前言
本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识有兴趣的小伙伴可以关注博主也许一个人独行可以走的很快但是一群人结伴而行才能走的更远
一、概述
MyBatis是一种流行的Java持久化框架它提供了灵活而强大的查询映射功能。在一些复杂的数据模型中一对一查询映射是一种常见的需求。本篇博客将详细介绍如何在MyBatis中处理一对一查询映射。
二、创建数据模型
假设我们有两张数据表员工表和部门表每个员工都只属于一个部门我们需要创建对应的Java数据模型。
Emp.java
public class Emp {private Integer eid;private String empName;private Integer age;private String sex;private String email;private Dept dept;...}Dept.java
public class Dept {private Integer did;private String deptName;private ListEmp emps;...}三、 问题
现在我们要查询员工信息以及员工所对应的部门信息我们应该如何做呢
四、解决方案
1、方案一级联方式处理映射关系
EmpMapper
/*** description:获取指定员工的信息(包括部门)* author: Hey* date: 2022/7/4 8:58* param: [id]* return: com.ir.mybatis.pojo.Emp**/Emp getAllEmpAndDept(Param(eid) Integer eid);
EmpMapper.xml
resultMap idtitle1 typeEmpid propertyeid columneid/idresult propertyempName columnemp_name/resultresult propertyage columnage/resultresult propertysex columnsex/resultresult propertyemail columnemail/resultresult propertydept.did columndid/resultresult propertydept.deptName columndept_name/result
/resultMapselect idgetAllEmpAndDept resultMaptitle1select * from t_emp left join t_dept on t_emp.did t_dept .did where t_emp.eid #{eid}/selectResultTest
/*** description:获取指定员工的信息(包括部门)* author: Hey* date: 2022/7/4 8:56* param: []* return: void**/Testpublic void getAllEmpAndDept(){SqlSession sqlSession SqlSessionUtils.getSqlSession();EmpMapper mapper sqlSession.getMapper(EmpMapper.class);Emp emp mapper.getAllEmpAndDept(2);System.out.println(emp);//Emp{eid2, empName美羊羊, age32, sex女, email123qq.com}}2、方案二使用association处理映射关系
EmpMapper
/*** description:获取指定员工的信息(包括部门)* author: Hey* date: 2022/7/4 8:58* param: [id]* return: com.ir.mybatis.pojo.Emp**/Emp getAllEmpAndDept(Param(eid) Integer eid);
EmpMapper.xml resultMap idtitle1 typeEmpid propertyeid columneid/idresult propertyempName columnemp_name/resultresult propertyage columnage/resultresult propertysex columnsex/resultresult propertyemail columnemail/result!--association:处理多对一的映射关系property:需要处理多对的映射关系的属性名javaType:该属性的类型过程通过javaType运用反射确定其所有属性再将column一一准确赋值给指定的属性这样就得出了一个实体类对象再将这个对象赋值给property中的对象名--association propertydept javaTypeDeptid propertydid columndid/idresult propertydeptName columndept_name/result/association/resultMapselect idgetAllEmpAndDept resultMaptitle1select * from t_emp left join t_dept on t_emp.did t_dept .did where t_emp.eid #{eid}/selectResultTest
/*** description:获取指定员工的信息(包括部门)* author: Hey* date: 2022/7/4 8:56* param: []* return: void**/Testpublic void getAllEmpAndDept(){SqlSession sqlSession SqlSessionUtils.getSqlSession();EmpMapper mapper sqlSession.getMapper(EmpMapper.class);Emp emp mapper.getAllEmpAndDept(3);System.out.println(emp);//Emp{eid3, empName懒洋洋, age34, sex男, email123qq.com}}3、方案三分步查询
mybatis-config.xml !--设置MyBatis的全局配置--settings!--将_自动映射为驼峰emp_name:empName--setting namemapUnderscoreToCamelCase valuetrue/!--开启延迟加载--setting namelazyLoadingEnabled valuetrue//settingsEmpMapper
/*** description:通过分步查询查询员工以及员工所对应的部门信息* 分步查询第一步查询员工信息* author: Hey * date: 2022/7/4 9:41* param: [eid]* return: com.ir.mybatis.pojo.Emp**/Emp getEmpAndDeptByStepOne(Param(eid) Integer eid);EmpMapper.xml
resultMap idempAndDeptByStepResultMap typeEmpid propertyeid columneid/idresult propertyempName columnemp_name/resultresult propertyage columnage/resultresult propertysex columnsex/resultresult propertyemail columnemail/result!--select:设置分步查询的sql的唯一标识namespace.SQLId或mapper接口的全类名.方法名column:设置分布查询的条件:根据员工的部门的did去查询该员工所属部门的信息fetchType:当开启了全局的延迟加载之后可通过此属性手动控制延迟加载的效果fetchTypelazy|eager:lazy表示延迟加载eager表示立即加载--association propertydeptselectcom.ir.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwocolumndid/association
/resultMap!--Emp getEmpAndDeptByStepOne(Param(eid) Integer eid);--select idgetEmpAndDeptByStepOne resultMapempAndDeptByStepResultMapselect * from t_emp where eid #{eid}/selectDeptMapper
/*** description:通过分步查询查询部门以及部门中所有的员工信息* 分步查询第二步根据did查询员工信息* author: Hey * date: 2022/7/4 9:42* param: [did]* return: java.util.Listcom.ir.mybatis.pojo.Emp**/ListEmp getDeptAndEmpByStepTwo(Param(did) Integer did);DeptMapper.xml !--Dept getEmpAndDeptByStepTwo(Param(did) Integer did);--select idgetEmpAndDeptByStepTwo resultTypeDeptselect * from t_dept where did #{did}/select
ResultTest
/*** description:通过分步查询查询部门以及部门中所有的员工信息* author: Hey * date: 2022/7/4 9:53* param: []* return: void**/Testpublic void testGetEmpAndDeptByStep(){SqlSession sqlSession SqlSessionUtils.getSqlSession();EmpMapper mapper sqlSession.getMapper(EmpMapper.class);Emp emp mapper.getEmpAndDeptByStepOne(3);System.out.println(emp);//Emp{eid3, empName懒洋洋, age34, sex男, email123qq.com}}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/916222.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!