• Java框架 MyBatis自定义映射resultMap


    0、准备工作

    1、引入依赖

    1. <dependencies>
    2. <dependency>
    3. <groupId>org.mybatisgroupId>
    4. <artifactId>mybatisartifactId>
    5. <version>3.5.7version>
    6. dependency>
    7. <dependency>
    8. <groupId>junitgroupId>
    9. <artifactId>junitartifactId>
    10. <version>4.12version>
    11. <scope>testscope>
    12. dependency>
    13. <dependency>
    14. <groupId>mysqlgroupId>
    15. <artifactId>mysql-connector-javaartifactId>
    16. <version>8.0.27version>
    17. dependency>
    18. <dependency>
    19. <groupId>log4jgroupId>
    20. <artifactId>log4jartifactId>
    21. <version>1.2.17version>
    22. dependency>
    23. dependencies>

    2、创建数据表

    1. CREATE TABLE t_dept(
    2. dept_id INT PRIMARY KEY AUTO_INCREMENT,
    3. dept_name VARCHAR(20)
    4. );
    5. CREATE TABLE t_emp(
    6. emp_id INT PRIMARY KEY AUTO_INCREMENT,
    7. emp_name VARCHAR(20),
    8. age INT,
    9. gender CHAR,
    10. dept_id INT
    11. );
    12. INSERT INTO t_dept(dept_name) VALUES ('A'),('B'),('C');
    13. INSERT INTO t_emp(emp_name,age,gender,dept_id) VALUES
    14. ('张三',20,'女',1),
    15. ('李四',22,'女',2),
    16. ('王五',21,'男',3),
    17. ('赵六',23,'男',1),
    18. ('田七',21,'女',3);

    3、创建与数据表相对应 java 实体类

    1. public class Emp {
    2. private Integer empId;
    3. private String empName;
    4. private Integer age;
    5. private String gender;
    6. private Integer deptId;
    7. public Emp() {
    8. }
    9. public Emp(Integer empId, String empName, Integer age, String gender, Integer deptId) {
    10. this.empId = empId;
    11. this.empName = empName;
    12. this.age = age;
    13. this.gender = gender;
    14. this.deptId = deptId;
    15. }
    16. public Integer getEmpId() {
    17. return empId;
    18. }
    19. public void setEmpId(Integer empId) {
    20. this.empId = empId;
    21. }
    22. public String getEmpName() {
    23. return empName;
    24. }
    25. public void setEmpName(String empName) {
    26. this.empName = empName;
    27. }
    28. public Integer getAge() {
    29. return age;
    30. }
    31. public void setAge(Integer age) {
    32. this.age = age;
    33. }
    34. public String getGender() {
    35. return gender;
    36. }
    37. public void setGender(String gender) {
    38. this.gender = gender;
    39. }
    40. public Integer getDeptId() {
    41. return deptId;
    42. }
    43. public void setDeptId(Integer deptId) {
    44. this.deptId = deptId;
    45. }
    46. @Override
    47. public String toString() {
    48. return "Emp{" +
    49. "empId=" + empId +
    50. ", empName='" + empName + '\'' +
    51. ", age=" + age +
    52. ", gender='" + gender + '\'' +
    53. ", deptId=" + deptId +
    54. '}';
    55. }
    56. }
    1. public class Dept {
    2. private Integer deptId;
    3. private String deptName;
    4. public Dept(Integer deptId, String deptName) {
    5. this.deptId = deptId;
    6. this.deptName = deptName;
    7. }
    8. public Dept() {
    9. }
    10. public Integer getDeptId() {
    11. return deptId;
    12. }
    13. public void setDeptId(Integer deptId) {
    14. this.deptId = deptId;
    15. }
    16. public String getDeptName() {
    17. return deptName;
    18. }
    19. public void setDeptName(String deptName) {
    20. this.deptName = deptName;
    21. }
    22. @Override
    23. public String toString() {
    24. return "Dept{" +
    25. "deptId=" + deptId +
    26. ", deptName='" + deptName + '\'' +
    27. '}';
    28. }
    29. }

    4、jdbc.properties 文件

    1. jdbc.driver=com.mysql.cj.jdbc.Driver
    2. jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC
    3. jdbc.username=root
    4. jdbc.password=root

    5、MyBaits 核心配置文件

    1. configuration
    2. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    4. <configuration>
    5. <properties resource="jdbc.properties"/>
    6. <typeAliases>
    7. <package name="com.chenyixin.ssm.pojo"/>
    8. typeAliases>
    9. <environments default="development">
    10. <environment id="development">
    11. <transactionManager type="JDBC"/>
    12. <dataSource type="POOLED">
    13. <property name="driver" value="${jdbc.driver}"/>
    14. <property name="url" value="${jdbc.url}"/>
    15. <property name="username" value="${jdbc.username}"/>
    16. <property name="password" value="${jdbc.password}"/>
    17. dataSource>
    18. environment>
    19. environments>
    20. <mappers>
    21. <package name="com.chenyixin.ssm.mapper"/>
    22. mappers>
    23. configuration>

    6、工具类:

    1. package com.chenyin.ssm.utils;
    2. import org.apache.ibatis.io.Resources;
    3. import org.apache.ibatis.session.SqlSession;
    4. import org.apache.ibatis.session.SqlSessionFactory;
    5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    6. import java.io.InputStream;
    7. public class SqlSessionUtil {
    8. public static SqlSession getSqlSession() {
    9. try {
    10. // 获取核心的配置文件
    11. InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    12. // 创建 SqlSessionFactoryBuilder 对象
    13. SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    14. // 通过核心配置文件多对应的字节输入流创建工厂类 SqlSessionFactory ,生产 SqlSession 对象
    15. SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(in);
    16. // 创建 SqlSession 对象(自动操作事务)
    17. return sqlSessionFactory.openSession(true);
    18. } catch (Exception e) {
    19. throw new RuntimeException(e);
    20. }
    21. }
    22. }

    7、log4j.xml配置文件

    1. log4j:configuration SYSTEM "log4j.dtd">
    2. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    3. <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    4. <param name="Encoding" value="UTF-8" />
    5. <layout class="org.apache.log4j.PatternLayout">
    6. <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
    7. layout>
    8. appender>
    9. <logger name="java.sql">
    10. <level value="debug" />
    11. logger>
    12. <logger name="org.apache.ibatis">
    13. <level value="info" />
    14. logger>
    15. <root>
    16. <level value="debug" />
    17. <appender-ref ref="STDOUT" />
    18. root>
    19. log4j:configuration>

    1、字段名和属性名不一致的情况

    字段名和属性名不一致的情况,如何处理映射关系:

            1、为查询的字段设置别名,和属性名一致

            2、当字段符合 MySql 的要求使用,而属性符合 java 的要求使用驼峰,此时可以在 MyBatis 的核心文件中使用 setting 标签设置一个全局变量配置,可以自动将下划线映射为驼峰

            如:emp_id -> empId

            3、使用 resultMap 自定义映射处理

                    resultMap:设置自定义的映射关系

                            id:唯一表示

                            type:处理映射关系的实体类的类型

                    常用标签

                            id: 处理主键和实体类中属性的映射关系

                            result:处理普通字段和实体类中属性的映射关系

                            column:设置映射关系中的字段名,必须是sql 查询出的某个字段

                            property:设置映射关系中的属性的属性名,必须是处理的实体类类型中的属性名

                              

    1.1、使用全局配置

    代码示例:

    EmpMapper 接口:

    1. public interface EmpMapper {
    2. /**
    3. * 根据 empId 获取 emp 信息
    4. * @param empId
    5. * @return
    6. */
    7. Emp getEmpById(@Param("empId") Integer empId);
    8. }

    EmpMapper.xml 配置文件:

    1. mapper
    2. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    4. <mapper namespace="com.chenyixin.ssm.mapper.EmpMapper">
    5. <select id="getEmpById" resultType="emp">
    6. select * from t_emp where emp_id = #{empId}
    7. select>
    8. mapper>

    配置核心文件:

    1. <settings>
    2. <setting name="mapUnderscoreToCamelCase" value="true"/>
    3. settings>

    测试类:

    1. public class EmpMapperTest {
    2. SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    3. EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
    4. DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
    5. @Test
    6. public void getEmpById() {
    7. Emp emp = empMapper.getEmpById(2);
    8. System.out.println(emp);
    9. // Emp{empId=2, empName='李四', age=22, gender='女', deptId=2}
    10. }
    11. }

    1. 2、resultMap处理字段和属性的映射关系

    EmpMapper 接口:

        Emp getEmpById2(@Param("empId") Integer empId);

    EmpMapper.xml 配置文件:

    1. mapper
    2. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    4. <mapper namespace="com.chenyixin.ssm.mapper.EmpMapper">
    5. <resultMap id="empMap" type="Emp">
    6. <id column="emp_id" property="empId"/>
    7. <result column="emp_name" property="empName"/>
    8. <result column="age" property="age"/>
    9. <result column="gender" property="gender"/>
    10. <result column="dept_id" property="deptId"/>
    11. resultMap>
    12. <select id="getEmpById" resultType="emp">
    13. select * from t_emp where emp_id = #{empId}
    14. select>
    15. <select id="getEmpById2" resultMap="empMap">
    16. select * from t_emp where emp_id = #{empId}
    17. select>
    18. mapper>

    测试:

    1. @Test
    2. public void getEmpById() {
    3. Emp emp = empMapper.getEmpById2(2);
    4. System.out.println(emp);
    5. // Emp{empId=2, empName='李四', age=22, gender='女', deptId=2}
    6. }

    2、多对一映射处理

    场景模拟: 查询员工信息以及员工所对应的部门信息

    处理多对一的映射关系:

            1、级联方式处理映射关系

            2、使用association处理映射关系

            3、分布查询方式处理映射关系

    准备:

    修改 emp 实体类:

    1. package com.chenyixin.ssm.pojo;
    2. public class Emp {
    3. private Integer empId;
    4. private String empName;
    5. private Integer age;
    6. private String gender;
    7. private Dept dept;
    8. public Emp() {
    9. }
    10. public Emp(Integer empId, String empName, Integer age, String gender) {
    11. this.empId = empId;
    12. this.empName = empName;
    13. this.age = age;
    14. this.gender = gender;
    15. }
    16. public Integer getEmpId() {
    17. return empId;
    18. }
    19. public void setEmpId(Integer empId) {
    20. this.empId = empId;
    21. }
    22. public String getEmpName() {
    23. return empName;
    24. }
    25. public void setEmpName(String empName) {
    26. this.empName = empName;
    27. }
    28. public Integer getAge() {
    29. return age;
    30. }
    31. public void setAge(Integer age) {
    32. this.age = age;
    33. }
    34. public String getGender() {
    35. return gender;
    36. }
    37. public void setGender(String gender) {
    38. this.gender = gender;
    39. }
    40. @Override
    41. public String toString() {
    42. return "Emp{" +
    43. "empId=" + empId +
    44. ", empName='" + empName + '\'' +
    45. ", age=" + age +
    46. ", gender='" + gender + '\'' +
    47. ", dept=" + dept +
    48. '}';
    49. }
    50. }

    2.1、级联方式处理映射关系

    EmpMapper 接口:

    1. /**
    2. * 根据 empId 获取 emp 的所有信息(包括该员工的部门信息)
    3. * @param empId
    4. * @return
    5. */
    6. Emp getEmpAndDeptByEmpId(@Param("empId") Integer empId);

    EmpMapper.xml 配置文件:

    1. <resultMap id="getEmpAndDeptMap" type="Emp">
    2. <id column="emp_id" property="empId"/>
    3. <result column="emp_name" property="empName"/>
    4. <result column="age" property="age"/>
    5. <result column="gender" property="gender"/>
    6. <result column="dept_id" property="dept.deptId"/>
    7. <result column="dept_name" property="dept.deptName"/>
    8. resultMap>
    9. <select id="getEmpAndDeptByEmpId" resultMap="getEmpAndDeptMap">
    10. select *
    11. from t_emp e
    12. left join t_dept d
    13. on e.dept_id = d.dept_id
    14. where emp_id = #{empId}
    15. select>

    测试:

    1. @Test
    2. public void getEmpAndDeptByEmpId() {
    3. Emp emp = empMapper.getEmpAndDeptByEmpId(1);
    4. System.out.println(emp);
    5. // Emp{empId=1, empName='张三', age=20, gender='女', dept=Dept{deptId=1, deptName='A'}}
    6. }

    2.2、使用association处理映射关系

    association:处理多对一的映射关系(处理实体类类型的属性)

            property:设置需要处理映射关系的属性的属性名

            javaType:设置要处理的属性的类型

            注意:一对一的映射关系可以用多对一的方式去处理

    EmpMapper 接口:

        Emp getEmpAndDeptByEmpId2(@Param("empId") Integer empId);

    EmpMapper.xml 配置文件:

    1. <resultMap id="getEmpAndDeptMap2" type="Emp">
    2. <id column="emp_id" property="empId"/>
    3. <result column="emp_name" property="empName"/>
    4. <result column="age" property="age"/>
    5. <result column="gender" property="gender"/>
    6. <association property="dept" javaType="Dept">
    7. <id column="dept_id" property="deptId"/>
    8. <result column="dept_name" property="deptName"/>
    9. association>
    10. resultMap>
    11. <select id="getEmpAndDeptByEmpId2" resultMap="getEmpAndDeptMap2">
    12. select *
    13. from t_emp e
    14. left join t_dept d
    15. on e.dept_id = d.dept_id
    16. where emp_id = #{empId}
    17. select>

    测试:

    1. @Test
    2. public void getEmpAndDeptByEmpId2() {
    3. Emp emp = empMapper.getEmpAndDeptByEmpId2(3);
    4. System.out.println(emp);
    5. // Emp{empId=3, empName='王五', age=21, gender='男', dept=Dept{deptId=3, deptName='C'}}
    6. }

    2.3、分步查询处理映射关系

    association:处理多对一的映射关系(处理实体类类型的属性)

            property:设置需要处理映射关系的属性的属性名

            javaType:设置要处理的属性的类型

            select : 设置分布查询的 sql 的唯一标识(namespace.id)

            column:将查询出的某个字段作为分布查询的 sql 条件        

    EmpMapper 接口:

    1. /**
    2. * 分布查询:根据员工 id 查询对应员工信息 及其 该员工所对应的部门信息 (第二步)
    3. * @param deptId
    4. * @return
    5. */
    6. Dept getEmpAndDeptByStopTwo(@Param("deptId") Integer deptId);

    DeptMapper 接口:

    1. /**
    2. * 分布查询:根据员工 id 查询对应员工信息 及其 该员工所对应的部门信息 (第一步)
    3. * @param empId
    4. * @return
    5. */
    6. Emp getEmpAndDeptByStopOne(@Param("empId") Integer empId);

    DeptMapper.xml 配置文件:

    1. <mapper namespace="com.chenyixin.ssm.mapper.DeptMapper">
    2. <select id="getEmpAndDeptByStopTwo" resultType="dept">
    3. select * from t_dept where dept_id = #{deptId}
    4. select>
    5. mapper>

    EmpMapper.xml 配置文件:

    1. <resultMap id="getEmpAndDeptStopMap" type="Emp">
    2. <id column="emp_id" property="empId"/>
    3. <result column="emp_name" property="empName"/>
    4. <result column="age" property="age"/>
    5. <result column="gender" property="gender"/>
    6. <association property="dept" select="com.chenyixin.ssm.mapper.DeptMapper.getEmpAndDeptByStopTwo" column="dept_id"/>
    7. resultMap>
    8. <select id="getEmpAndDeptByStopOne" resultMap="getEmpAndDeptStopMap">
    9. select * from t_emp where emp_id = #{empId}
    10. select>

    测试:(记得开启全局配置

    1. @Test
    2. public void getEmpAndDeptByStopOne() {
    3. Emp emp = empMapper.getEmpAndDeptByStopOne(4);
    4. System.out.println(emp);
    5. }

    结果:(查询了两次)

    2.4、延迟加载

    概念:对于实体类关联的属性到需要使用时才查询。也叫懒加载。

    在全局变量中设置延迟加载:

    1. <settings>
    2. <setting name="mapUnderscoreToCamelCase" value="true"/>
    3. <setting name="lazyLoadingEnabled" value="true"/>
    4. <setting name="aggressiveLazyLoading" value="false"/>
    5. settings>

    测试1:(以在全局设置中开启了延迟加载)

    1. @Test
    2. public void getEmpAndDeptByStopOne() {
    3. Emp emp = empMapper.getEmpAndDeptByStopOne(4);
    4. System.out.println(emp.getEmpName());
    5. }

    结果:

    因为全局变量会对所有的分布查询开启延迟加载,但也可以在 Mapper配置文件中的resultMap 设置延迟加载。

    association:       

              fetchType:在开启了延迟加载的环境中,通过该属性设置当前分布查询是否使用延迟加载

                     fetchType=“eager(立即加载) | lazy(延迟加载)”

    1. <resultMap id="getEmpAndDeptStopMap" type="Emp">
    2. <id column="emp_id" property="empId"/>
    3. <result column="emp_name" property="empName"/>
    4. <result column="age" property="age"/>
    5. <result column="gender" property="gender"/>
    6. <association property="dept" select="com.chenyixin.ssm.mapper.DeptMapper.getEmpAndDeptByStopTwo"
    7. column="dept_id" fetchType="eager"/>
    8. resultMap>

    测试2:(测试代码与测试1相同)(以在全局设置中开启了延迟加载,但也在Mapper配置文件中的resultMap 设置了延迟加载)

    结果:

    3、一对多映射处理

    场景模拟: 查询部门信息 及 在其部门中的员工信息

    处理一对多的映射关系

            1、collection

            2、分布查询

    准备:

    修改 dept 实体类:

    1. public class Dept {
    2. private Integer deptId;
    3. private String deptName;
    4. private List emps;
    5. public Dept(Integer deptId, String deptName) {
    6. this.deptId = deptId;
    7. this.deptName = deptName;
    8. }
    9. public Dept() {
    10. }
    11. public Integer getDeptId() {
    12. return deptId;
    13. }
    14. public void setDeptId(Integer deptId) {
    15. this.deptId = deptId;
    16. }
    17. public String getDeptName() {
    18. return deptName;
    19. }
    20. public void setDeptName(String deptName) {
    21. this.deptName = deptName;
    22. }
    23. @Override
    24. public String toString() {
    25. return "Dept{" +
    26. "deptId=" + deptId +
    27. ", deptName='" + deptName + '\'' +
    28. ", emps=" + emps +
    29. '}';
    30. }
    31. }

    3.1、collection

    collection (其子标签与 association 子标签用法相同)

            collection:处理一对多的映射关系(处理集合类型的属性)

            ofType:设置集合类型的属性中存储的数据的类型

    DeptMapper 接口:

    1. /**
    2. * 根据部门 id 查询部门以及部门中的员工信息
    3. * @param deptId
    4. * @return
    5. */
    6. Dept getDeptAndEmpByDeptId(@Param("deptId") Integer deptId);

    DeptMapper.xml 配置文件:

    1. <resultMap id="getDeptAndEmpMap" type="Dept">
    2. <id column="dept_id" property="deptId"/>
    3. <id column="dept_name" property="deptName"/>
    4. <collection property="emps" ofType="Emp">
    5. <id column="emp_id" property="empId"/>
    6. <id column="emp_name" property="empName"/>
    7. <id column="age" property="age"/>
    8. <id column="gender" property="gender"/>
    9. collection>
    10. resultMap>
    11. <select id="getDeptAndEmpByDeptId" resultMap="getDeptAndEmpMap">
    12. select *
    13. from t_dept d
    14. left join t_emp e on d.dept_id = e.dept_id
    15. where d.dept_id = #{deptId}
    16. select>

    测试:

    1. public class DeptMapperTest {
    2. SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    3. DeptMapper deptMapper = sqlSession.getMapper(DeptMapper.class);
    4. @Test
    5. public void getDeptAndEmpByDeptId() {
    6. Dept dept = deptMapper.getDeptAndEmpByDeptId(1);
    7. System.out.println(dept);
    8. // Dept{deptId=1, deptName='A',
    9. // emps=[Emp{empId=1, empName='张三', age=20, gender='女', dept=null},
    10. // Emp{empId=4, empName='赵六', age=23, gender='男', dept=null}]}
    11. }
    12. }

    3.2、分步查询

    DeptMapper 接口:

    1. /**
    2. * 通过分布查询 查询部门以及部门中的员工信息的第一步
    3. * @param deptId
    4. * @return
    5. */
    6. Dept getDeptAndEmpByStepOne(@Param("deptId") Integer deptId);

    EmpMapper 接口:

    1. /**
    2. * 通过分布查询 查询部门以及部门中的员工信息的第二步
    3. * @param deptId
    4. * @return
    5. */
    6. Emp getDeptAndEmpByStepTwo(@Param("deptId") Integer deptId);

    EmpMapper.xml 配置文件:

    1. <select id="getDeptAndEmpByStepTwo" resultType="emp">
    2. select * from t_emp where dept_id = #{deptId};
    3. select>

    DeptMapper.xml 配置文件:

    1. <resultMap id="getDeptAndEmpStepMap" type="Dept">
    2. <id column="dept_id" property="deptId"/>
    3. <result column="dept_name" property="deptName"/>
    4. <collection property="emps"
    5. select="com.chenyixin.ssm.mapper.EmpMapper.getDeptAndEmpByStepTwo"
    6. column="dept_id"/>
    7. resultMap>
    8. <select id="getDeptAndEmpByStepOne" resultMap="getDeptAndEmpStepMap">
    9. select * from t_dept where dept_id = #{deptId};
    10. select>

    测试:

    1. @Test
    2. public void getDeptAndEmpByStepOne() {
    3. Dept dept = deptMapper.getDeptAndEmpByStepOne(3);
    4. System.out.println(dept);
    5. }

    结果:

    4、总结

    字段名和属性名不一致的情况,如何处理映射关系:
       1、为查询的字段设置别名,和属性名一致

       2、当字段符合 MySql 的要求使用,而属性符合 java 的要求使用驼峰,
               此时可以在 MyBatis 的核心文件中使用 setting 标签设置一个全局变量配置,
               可以自动将下划线映射为驼峰
               如:emp_id -> empId

       3、使用 resultMap 自定义映射处理
          resultMap:设置自定义的映射关系
          id:唯一表示
          type:处理映射关系的实体类的类型

          常用标签
             id: 处理主键和实体类中属性的映射关系
             result:处理普通字段和实体类中属性的映射关系
             column:设置映射关系中的字段名,必须是sql 查询出的某个字段
             property:设置映射关系中的属性的属性名,必须是处理的实体类类型中的属性名

    映射关系处理:

    使用 resultMap 自定义映射处理

            处理多对一的映射关系:

                    1、级联方式处理映射关系

                    2、使用 association 处理映射关系

                    3、分布查询方式处理映射关系

            处理一对多的映射关系

                    1、collection

                    2、分布查询

    resultMap:设置自定义的映射关系
            id:唯一表示
            type:处理映射关系的实体类的类型

    常用标签
       id: 处理主键和实体类中属性的映射关系
       result:处理普通字段和实体类中属性的映射关系
       column:设置映射关系中的字段名,必须是sql 查询出的某个字段
       property:设置映射关系中的属性的属性名,必须是处理的实体类类型中的属性名

       association:处理多对一的映射关系(处理实体类类型的属性)
          property:设置需要处理映射关系的属性的属性名
          javaType:设置要处理的属性的类型
          select : 设置分布查询的 sql 的唯一标识(namespace.id)
          column:将查询出的某个字段作为分布查询的 sql 条件
          fetchType:在开启了延迟加载的环境中,通过该属性设置当前分布查询是否使用延迟加载
          fetchType=“eager(立即加载) | lazy(延迟加载)”

             注意:一对一的映射关系可以用多对一的方式去处理
       
         collection:处理一对多的映射关系(处理集合类型的属性)
              property:设置需要处理映射关系的属性的属性名
              ofType:设置集合类型的属性中存储的数据的类型
              select : 设置分布查询的 sql 的唯一标识(namespace.id)
              column:将查询出的某个字段作为分布查询的 sql 条件
              fetchType:在开启了延迟加载的环境中,通过该属性设置当前分布查询是否使用延迟加载
             fetchType=“eager(立即加载) | lazy(延迟加载)”

          注意:多对多的映射关系可以用一对多的方式去处理

    全局变量的设置:

    1. <settings>
    2. <setting name="mapUnderscoreToCamelCase" value="true"/>
    3. <setting name="lazyLoadingEnabled" value="true"/>
    4. <setting name="aggressiveLazyLoading" value="false"/>
    5. settings>

  • 相关阅读:
    vue应用全局音乐(自动播放)
    浅谈电源TLVR在Intel VR14 Server的应用
    万界星空科技商业开源MES
    Zookeeper简介
    抽象类和接口
    珠宝加工厂:我的成本下降空间在哪里?
    星空下的对话,有感
    c#快速入门~在java基础上,知道C#和JAVA 的不同即可
    封装、包、访问权限修饰符、static变量
    Matlab进阶绘图第60期—带伪彩图的曲面图
  • 原文地址:https://blog.csdn.net/weixin_65637841/article/details/126311919