旅游网站 建设平台分析,wordpress cnzz,wordpress 360字体大小,太原建站服务自定义映射resultMap前言一、处理字段和属性的映射关系问题#xff1a;方案一#xff1a;使用别名方案二#xff1a;在mybatis-config.xml中设置mapUnderscoreToCamelCase方案三#xff1a;在映射文件中设置redultMap二、多对一映射处理问题#xff1a;方案一#xff1a;…
自定义映射resultMap前言一、处理字段和属性的映射关系问题方案一使用别名方案二在mybatis-config.xml中设置mapUnderscoreToCamelCase方案三在映射文件中设置redultMap二、多对一映射处理问题方案一级联方式处理映射关系方案二使用association处理映射关系方案三分步查询三、一对多映射处理方案一collection方案二分步查询前言
本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识有兴趣的小伙伴可以关注博主也许一个人独行可以走的很快但是一群人结伴而行才能走的更远 Emp.java public class Emp {private Integer eid;private String empName;private Integer age;private String sex;private String email;...}数据库表t_emp 一、处理字段和属性的映射关系 若字段名和实体类中的属性名不一致但是字段名符合数据库的规则使用_实体类中的属性名符合Java的规则使用驼峰此时也可通过以下三种方式处理字段名和实体类中的属性的映射关系 ⭕ 方式一可以通过为字段起别名的方式保证和实体类中的属性名保持一致 ⭕ 方式二可以在MyBatis的核心配置文件中设置一个全局配置信息mapUnderscoreToCamelCase可以在查询表中数据时自动将_类型的字段名转换为驼峰 例如字段名user_name设置了mapUnderscoreToCamelCase此时字段名就会转换为userName ⭕ 方式三在映射文件中设置redultMap 问题 EmpMapper /*** description:查询所有的员工信息* author: Hey* date: 2022/7/3 23:38* param: []* return: java.util.Listcom.ir.mybatis.pojo.Emp**/ListEmp getAllEmp();EmpMapper.xml select idgetAllEmp resultTypeempselect * from t_emp;
/selectResultTest /*** description:查询所有用户的信息* author: Hey* date: 2022/7/3 23:40* param: []* return: void**/Testpublic void testGetAllEmp(){SqlSession sqlSession SqlSessionUtils.getSqlSession();EmpMapper mapper sqlSession.getMapper(EmpMapper.class);ListEmp list mapper.getAllEmp();list.forEach(emp - System.out.println(emp));/*** Emp{eid1, empNamenull, age34, sex男, email123qq.com}* Emp{eid2, empNamenull, age32, sex女, email123qq.com}* Emp{eid3, empNamenull, age34, sex男, email123qq.com}* Emp{eid4, empNamenull, age23, sex男, email123qq.com}* Emp{eid5, empNamenull, age45, sex女, email123qq.com}*/}/**empName所有的值都为null因为数据库表中的字段名为emp_name,而实体类中此字段名对应的属性名为empname所以字段名emp_name和属性名empname不一致导致映射文件里无法获取到传递过来的参数方案一使用别名 ⭕ 代码演示 EmpMapper /*** description:查询所有的员工信息* author: Hey* date: 2022/7/3 23:38* param: []* return: java.util.Listcom.ir.mybatis.pojo.Emp**/ListEmp getAllEmp();EmpMapper.xml select idgetAllEmp resultTypeempselect eid,emp_name empname,age,sex,email from t_emp;
/selectResultTest /*** description:查询所有用户的信息* author: Hey* date: 2022/7/3 23:40* param: []* return: void**/Testpublic void testGetAllEmp(){SqlSession sqlSession SqlSessionUtils.getSqlSession();EmpMapper mapper sqlSession.getMapper(EmpMapper.class);ListEmp list mapper.getAllEmp();list.forEach(emp - System.out.println(emp));/*** Emp{eid1, empName喜羊羊, age34, sex男, email123qq.com}* Emp{eid2, empName美羊羊, age32, sex女, email123qq.com}* Emp{eid3, empName懒洋洋, age34, sex男, email123qq.com}* Emp{eid4, empName沸羊羊, age23, sex男, email123qq.com}* Emp{eid5, empName暖羊羊, age45, sex女, email123qq.com}*/}方案二在mybatis-config.xml中设置mapUnderscoreToCamelCase ⭕ 代码演示 !--设置MyBatis的全局配置--settings!--将_自动映射为驼峰emp_name:empName--setting namemapUnderscoreToCamelCase valuetrue/!--开启延迟加载--setting namelazyLoadingEnabled valuetrue//settingsEmpMapper /*** description:查询所有的员工信息* author: Hey* date: 2022/7/3 23:38* param: []* return: java.util.Listcom.ir.mybatis.pojo.Emp**/ListEmp getAllEmp();EmpMapper.xml select idgetAllEmp resultTypeempselect * from t_emp;
/selectResultTest /*** description:查询所有用户的信息* author: Hey* date: 2022/7/3 23:40* param: []* return: void**/Testpublic void testGetAllEmp(){SqlSession sqlSession SqlSessionUtils.getSqlSession();EmpMapper mapper sqlSession.getMapper(EmpMapper.class);ListEmp list mapper.getAllEmp();list.forEach(emp - System.out.println(emp));/*** Emp{eid1, empName喜羊羊, age34, sex男, email123qq.com}* Emp{eid2, empName美羊羊, age32, sex女, email123qq.com}* Emp{eid3, empName懒洋洋, age34, sex男, email123qq.com}* Emp{eid4, empName沸羊羊, age23, sex男, email123qq.com}* Emp{eid5, empName暖羊羊, age45, sex女, email123qq.com}*/}方案三在映射文件中设置redultMap ⭕ resultMap设置自定义映射关系 id唯一标识不能重复type设置映射关系中的实体类类型子标签 3.1 id设置主键的映射关系 3.2 result设置普通字段的映射关系 3.3 属性 property设置映射关系中的属性名必须是type属性所设置的实体类类型中的属性名 column设置映射关系中的字段名必须是sql语句查询出的字段名 ⭕ 代码演示 EmpMapper.java /*** description:查询所有的员工信息* author: Hey* date: 2022/7/3 23:38* param: []* return: java.util.Listcom.ir.mybatis.pojo.Emp**/ListEmp getAllEmp();EmpMapper.xm resultMap idempTest typeEmpid propertyeid columneid/idresult propertyempName columnemp_name/resultresult propertyage columnage/resultresult propertysex columnsex/resultresult propertyemail columnemail/result/resultMapselect idgetAllEmp resultMapempTestselect * from t_emp;/selectResultTest Testpublic void testGetAllEmp(){SqlSession sqlSession SqlSessionUtils.getSqlSession();EmpMapper mapper sqlSession.getMapper(EmpMapper.class);ListEmp list mapper.getAllEmp();list.forEach(emp - System.out.println(emp));/*** Emp{eid1, empName喜羊羊, age34, sex男, email123qq.com}* Emp{eid2, empName美羊羊, age32, sex女, email123qq.com}* Emp{eid3, empName懒洋洋, age34, sex男, email123qq.com}* Emp{eid4, empName沸羊羊, age23, sex男, email123qq.com}* Emp{eid5, empName暖羊羊, age45, sex女, email123qq.com}*/}二、多对一映射处理 问题 查询员工信息以及员工所对应的部门信息 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;...}方案一级联方式处理映射关系 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}}方案二使用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}}方案三分步查询 ⭕ 分步查询的优点 可以实现延迟加载但是必须在核心配置文件中设置全局配置信息 ● lazyLoadingEnabled延迟加载的全局开关。当开启时所有关联对象都会延迟加载 ● aggressiveLazyLoading当开启时任何方法的调用都会加载该对象的所有属性。 否则每个属性会按需加载此时就可以实现按需加载获取的数据是什么就只会执行相应的sql。 此时可通过association和collection中的fetchType属性设置当前的分步查询是否使用延迟加载fetchTypelazy(延迟加载)|eager(立即加载) 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}}三、一对多映射处理 方案一collection DeptMapper /*** description:获取部门以及部门中所有的员工信息* author: Hey* date: 2022/7/4 10:46* param: [did]* return: com.ir.mybatis.pojo.Dept**/Dept getDeptAndEmp(Param(did) Integer did); DeptMapper.xml resultMap iddeptAndEmpResultMap typeDeptid propertydid columndid/idresult propertydeptName columndept_name/result!--collection处理一对多的映射关系ofType表示该属性所对应的集合中存储数据的类型--collection 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}/selectResultTest /*** description:获取部门以及部门中所有的员工信息* author: Hey* date: 2022/7/4 10:54* param: []* return: void**/Testpublic void testGetDeptAndEmp(){SqlSession sqlSession SqlSessionUtils.getSqlSession();DeptMapper mapper sqlSession.getMapper(DeptMapper.class);Dept dept mapper.getDeptAndEmp(1);System.out.println(dept);/*** Dept{* did1, deptNameA,* emps[* Emp{eid1, empName喜羊羊, age34, sex男, email123qq.com},* Emp{eid4, empName沸羊羊, age23, sex男, email123qq.com}* ]* }*/}方案二分步查询 DeptMapper /*** description:通过分步查询查询部门以及部门中所有的员工信息* 分步查询第一步查询部门信息* author: Hey* date: 2022/7/4 12:31* param: [did]* return: com.ir.mybatis.pojo.Dept**/Dept getDeptAndEmpByStepOne(Param(did) Integer did);DeptMapper.xml resultMap iddeptAndEmpByStepResultMap typeDeptid propertydid columndid/idresult propertydeptName columndept_name/resultcollection propertyempsselectcom.ir.mybatis.mapper.EmpMapper.getDeptAndEmpByStepTwocolumndid fetchTypeeager/collection/resultMapselect idgetDeptAndEmpByStepOne resultTypedeptAndEmpByStepResultMapselect * from t_dept where did #{did}/selectEmpMapper /*** description:通过分步查询查询部门以及部门中所有的员工信息* 分步查询第二步根据did查询员工信息* author: Hey* date: 2022/7/4 12:36* param: [did]* return: java.util.Listcom.ir.mybatis.pojo.Emp**/ListEmp getDeptAndEmpByStepTwo(Param(did) Integer did);EmpMapper.xml select idgetDeptAndEmpByStepTwo resultTypeEmpselect * from t_emp where did #{did}/selectResultTest /*** description:通过分步查询查询部门以及部门中所有的员工信息* author: Hey* date: 2022/7/4 12:40* param: []* return: void**/Testpublic void testGetDeptAndEmpByStep(){SqlSession sqlSession SqlSessionUtils.getSqlSession();DeptMapper mapper sqlSession.getMapper(DeptMapper.class);Dept dept mapper.getDeptAndEmpByStepOne(1);System.out.println(dept.getDeptName());}