博客网站开发思维导图,app网站制作公司,购物app下载,wordpress 首页描述学习的最大理由是想摆脱平庸#xff0c;早一天就多一份人生的精彩#xff1b;迟一天就多一天平庸的困扰。各位小伙伴#xff0c;如果您#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持#xff0c;想组团高效学习… 想写博客但无从下手#xff0c;急需… 学习的最大理由是想摆脱平庸早一天就多一份人生的精彩迟一天就多一天平庸的困扰。各位小伙伴如果您 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持想组团高效学习… 想写博客但无从下手急需写作干货注入能量… 热爱写作愿意让自己成为更好的人… 文章目录 前言一、resultMap处理字段和属性的映射关系二、多对一映射处理1、级联方式处理映射关系2、使用association处理映射关系3、分步查询1. 查询员工信息2. 查询部门信息 三、一对多映射处理1、collection2、分步查询1. 查询部门信息2. 根据部门id查询部门中的所有员工 四、延迟加载总结 前言
一、resultMap处理字段和属性的映射关系 二、多对一映射处理 1、级联方式处理映射关系 2、使用association处理映射关系 3、分步查询
查询员工信息查询部门信息 三、一对多映射处理 1、collection 2、分步查询查询部门信息根据部门id查询部门中的所有员工 四、延迟加载 一、resultMap处理字段和属性的映射关系
resultMap设置自定义映射 属性 id表示自定义映射的唯一标识不能重复type查询的数据要映射的实体类的类型 子标签 id设置主键的映射关系result设置普通字段的映射关系子标签属性 property设置映射关系中实体类中的属性名column设置映射关系中表中的字段名 若字段名和实体类中的属性名不一致则可以通过resultMap设置自定义映射即使字段名和属性名一致的属性也要映射也就是全部属性都要列出来
resultMap idempResultMap typeEmpid propertyeid columneid/idresult propertyempName columnemp_name/resultresult propertyage columnage/resultresult propertysex columnsex/resultresult propertyemail columnemail/result
/resultMap
!--ListEmp getAllEmp();--
select idgetAllEmp resultMapempResultMapselect * from t_emp
/select若字段名和实体类中的属性名不一致但是字段名符合数据库的规则使用_实体类中的属性名符合Java的规则使用驼峰。此时也可通过以下两种方式处理字段名和实体类中的属性的映射关系 可以通过为字段起别名的方式保证和实体类中的属性名保持一致!--ListEmp getAllEmp();--
select idgetAllEmp resultTypeEmpselect eid,emp_name empName,age,sex,email from t_emp
/select可以在MyBatis的核心配置文件中的setting标签中设置一个全局配置信息mapUnderscoreToCamelCase可以在查询表中数据时自动将_类型的字段名转换为驼峰例如字段名user_name设置了mapUnderscoreToCamelCase此时字段名就会转换为userName。 核心配置文件详解 settingssetting namemapUnderscoreToCamelCase valuetrue//settings二、多对一映射处理 查询员工信息以及员工所对应的部门信息 public class Emp { private Integer eid; private String empName; private Integer age; private String sex; private String email; private Dept dept;//...构造器、get、set方法等
}1、级联方式处理映射关系
resultMap idempAndDeptResultMapOne 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
/resultMap
!--Emp getEmpAndDept(Param(eid)Integer eid);--
select idgetEmpAndDept resultMapempAndDeptResultMapOneselect * from t_emp left join t_dept on t_emp.eid t_dept.did where t_emp.eid #{eid}
/select2、使用association处理映射关系
association处理多对一的映射关系property需要处理多对的映射关系的属性名javaType该属性的类型
resultMap idempAndDeptResultMapTwo typeEmpid propertyeid columneid/idresult propertyempName columnemp_name/resultresult propertyage columnage/resultresult propertysex columnsex/resultresult propertyemail columnemail/resultassociation propertydept javaTypeDeptid propertydid columndid/idresult propertydeptName columndept_name/result/association
/resultMap
!--Emp getEmpAndDept(Param(eid)Integer eid);--
select idgetEmpAndDept resultMapempAndDeptResultMapTwoselect * from t_emp left join t_dept on t_emp.eid t_dept.did where t_emp.eid #{eid}
/select3、分步查询
1. 查询员工信息
select设置分布查询的sql的唯一标识namespace.SQLId或mapper接口的全类名.方法名column设置分步查询的条件
//EmpMapper里的方法
/*** 通过分步查询员工及所对应的部门信息* 分步查询第一步查询员工信息* param * return com.atguigu.mybatis.pojo.Emp* date 2022/2/27 20:17*/
Emp getEmpAndDeptByStepOne(Param(eid) Integer eid);resultMap idempAndDeptByStepResultMap typeEmpid propertyeid columneid/idresult propertyempName columnemp_name/resultresult propertyage columnage/resultresult propertysex columnsex/resultresult propertyemail columnemail/resultassociation propertydeptselectcom.atguigu.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwocolumndid/association
/resultMap
!--Emp getEmpAndDeptByStepOne(Param(eid) Integer eid);--
select idgetEmpAndDeptByStepOne resultMapempAndDeptByStepResultMapselect * from t_emp where eid #{eid}
/select2. 查询部门信息
//DeptMapper里的方法
/*** 通过分步查询员工及所对应的部门信息* 分步查询第二步通过did查询员工对应的部门信息* param* return com.atguigu.mybatis.pojo.Emp* date 2022/2/27 20:23*/
Dept getEmpAndDeptByStepTwo(Param(did) Integer did);!--此处的resultMap仅是处理字段和属性的映射关系--
resultMap idEmpAndDeptByStepTwoResultMap typeDeptid propertydid columndid/idresult propertydeptName columndept_name/result
/resultMap
!--Dept getEmpAndDeptByStepTwo(Param(did) Integer did);--
select idgetEmpAndDeptByStepTwo resultMapEmpAndDeptByStepTwoResultMapselect * from t_dept where did #{did}
/select三、一对多映射处理
public class Dept {private Integer did;private String deptName;private ListEmp emps;//...构造器、get、set方法等
}1、collection
collection用来处理一对多的映射关系ofType表示该属性对饮的集合中存储的数据的类型
resultMap idDeptAndEmpResultMap typeDeptid propertydid columndid/idresult propertydeptName columndept_name/resultcollection propertyemps ofTypeEmpid propertyeid columneid/idresult propertyempName columnemp_name/resultresult propertyage columnage/resultresult propertysex columnsex/resultresult propertyemail columnemail/result/collection
/resultMap
!--Dept getDeptAndEmp(Param(did) Integer did);--
select idgetDeptAndEmp resultMapDeptAndEmpResultMapselect * from t_dept left join t_emp on t_dept.did t_emp.did where t_dept.did #{did}
/select2、分步查询
1. 查询部门信息
/*** 通过分步查询查询部门及对应的所有员工信息* 分步查询第一步查询部门信息* param did * return com.atguigu.mybatis.pojo.Dept* date 2022/2/27 22:04*/
Dept getDeptAndEmpByStepOne(Param(did) Integer did);resultMap idDeptAndEmpByStepOneResultMap typeDeptid propertydid columndid/idresult propertydeptName columndept_name/resultcollection propertyempsselectcom.atguigu.mybatis.mapper.EmpMapper.getDeptAndEmpByStepTwocolumndid/collection
/resultMap
!--Dept getDeptAndEmpByStepOne(Param(did) Integer did);--
select idgetDeptAndEmpByStepOne resultMapDeptAndEmpByStepOneResultMapselect * from t_dept where did #{did}
/select2. 根据部门id查询部门中的所有员工
/*** 通过分步查询查询部门及对应的所有员工信息* 分步查询第二步根据部门id查询部门中的所有员工* param did* return java.util.Listcom.atguigu.mybatis.pojo.Emp* date 2022/2/27 22:10*/
ListEmp getDeptAndEmpByStepTwo(Param(did) Integer did);!--ListEmp getDeptAndEmpByStepTwo(Param(did) Integer did);--
select idgetDeptAndEmpByStepTwo resultTypeEmpselect * from t_emp where did #{did}
/select四、延迟加载
分步查询的优点可以实现延迟加载但是必须在核心配置文件中设置全局配置信息 lazyLoadingEnabled延迟加载的全局开关。当开启时所有关联对象都会延迟加载aggressiveLazyLoading当开启时任何方法的调用都会加载该对象的所有属性。 否则每个属性会按需加载 此时就可以实现按需加载获取的数据是什么就只会执行相应的sql。此时可通过association和collection中的fetchType属性设置当前的分步查询是否使用延迟加载fetchType“lazy(延迟加载)|eager(立即加载)”
settings!--开启延迟加载--setting namelazyLoadingEnabled valuetrue/
/settingsTest
public void getEmpAndDeptByStepOne() {SqlSession sqlSession SqlSessionUtils.getSqlSession();EmpMapper mapper sqlSession.getMapper(EmpMapper.class);Emp emp mapper.getEmpAndDeptByStepOne(1);System.out.println(emp.getEmpName());
}关闭延迟加载两条SQL语句都运行了 开启延迟加载只运行获取emp的SQL语句
Test
public void getEmpAndDeptByStepOne() {SqlSession sqlSession SqlSessionUtils.getSqlSession();EmpMapper mapper sqlSession.getMapper(EmpMapper.class);Emp emp mapper.getEmpAndDeptByStepOne(1);System.out.println(emp.getEmpName());System.out.println(----------------);System.out.println(emp.getDept());
}开启后需要用到查询dept的时候才会调用相应的SQL语句 fetchType当开启了全局的延迟加载之后可以通过该属性手动控制延迟加载的效果fetchType“lazy(延迟加载)|eager(立即加载)” resultMap idempAndDeptByStepResultMap typeEmpid propertyeid columneid/idresult propertyempName columnemp_name/resultresult propertyage columnage/resultresult propertysex columnsex/resultresult propertyemail columnemail/resultassociation propertydeptselectcom.atguigu.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwocolumndidfetchTypelazy/association
/resultMap总结
以上就是Mybatis之自定义映射resultMap的相关知识点希望对你有所帮助。 积跬步以至千里积怠惰以至深渊。时代在这跟着你一起努力哦