Mybatis 一对多延迟加载,并且子查询中与主表字段不对应应用说明。
实现一对多关联(懒加载),一个教研组对应多个教师,既:教师的教研编号与教研组的教研编号关联,并且教师关联教研组外键与教研组编号不一致。
1、工程资源配置文件
1)、本应用实际应用到了(开启延迟加载配置、关闭立即加载配置);
2) 、外关联查询语句对应xml文件 :
3)、主查询xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 开启日志,并制定使用的具体日志,LOG4J 对应 log4j.properties的文件名 -->
<setting name="logImpl" value="LOG4J"/>
<!-- 开启延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- g关闭立即加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<!-- 转换器 -->
<typeHandlers>
<!-- 把java类的boolean类型转换数据 int,数据库int转换为java类的boolean类型 -->
<typeHandler handler="com.mybatis03.util.BooleanAndIntConverter" javaType="Boolean" jdbcType="INTEGER"/>
</typeHandlers>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis01"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载映射文件 -->
<mapper resource="com/mybatis03/mapper/personMapper.xml"/>
<mapper resource="com/mybatis03/mapper/TeacherMapper.xml"/>
<mapper resource="com/mybatis03/mapper/teacherCourseMapper.xml"/>
<!-- 外关联查询语句对应xml文件 -->
<mapper resource="com/mybatis03/mapper/teacherGroupToTeacherMapper.xml"/>
</mappers>
</configuration>
2、mapper文件
2.1 教师.xml 文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mybatis03.mapper.TeacherMapper">
<!-- 实现一对多关联(懒加载),一个教研组对应多个教师,既:教师的教研编号与教研组的教研编号关联 -->
<select id="queryWithLazyGroupAndTeachers" parameterType="int" resultMap="lazyGroupTeacherMap">
SELECT g.*,g.groupID AS groupno FROM teachergroup g
WHERE g.groupid =#{
groupid}
</select>
<!--类和表对应关系 (一对多都用collection,一对一用 association) -->
<resultMap id="lazyGroupTeacherMap" type="com.mybatis03.bean.TeacherGroup">
<!-- 因为type主类是TeacherGroup,所以先配置 TeacherGroup类属性对应关系 -->
<id property="groupID" column="groupid" />
<result property="groupName" column="groupname"/>
<!-- 配置成员属性教师 ,一对多;属性类型:javaType,属性元素类型 ofType-->
<!--property 中的属性为实体类中的属性,column对应数据库中的字段 -->
<collection property="teacherList"<