Mybatis 一对多延迟加载,并且子查询中与主表字段不对应 (19)

发布时间:2022-07-02 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Mybatis 一对多延迟加载,并且子查询中与主表字段不对应 (19)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Mybatis  一对多延迟加载,并且子查询中与主表字段不对应应用说明。

实现一对多关联(懒加载),一个教研组对应多个教师,既:教师的教研编号与教研组的教研编号关联,并且教师关联教研组外键与教研组编号不一致。

1、工程资配置文件

   1)、本应用实际应用到了(开启延迟加载配置、关闭立即加载配置);

   2) 、外关联查询语句对应XMl文件 :<;mapPEr resource="com/mybatis03/mapper/teacherGroupToTeacherMapper.xML"/>

   3)、主查询xml文件:<mapper resource="com/mybatis03/mapper/TeacherMapper.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" ofType="com.mybatis03.bean.Teacher"
         select="com.mybatis03.mapper.teacherGroupToTeacherMapper.queryGroupToTeacherByNO" column="groupno" >
        </collection>
    </resultMap>
</mapper>

说明:由于在关联过程中,教研组编号与教师编号不一致,通过重命名方式使。关联字段一致:

A、本应用实现懒加载使用原始SQL关联查询应为:SELECT g.*,t.* From teachergroup g  INNER JOIN teacher t  ON g.groupid = t.groupno  WHERE g.groupid =#{groupid}

B、应用懒加载实现说明解决字段不一致参加红色浪线;

Mybatis  一对多延迟加载,并且子查询中与主表字段不对应 (19)

 2.2 外关联查询教师信息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.teacherGroupToTeacherMapper">
    <!-- 查询教师,延迟加载应用此配置文件 -->
    <!-- 查询教师对应的课程 -->
    <select id="queryGroupToTeacherByNO" parameterType="int" resultType="com.mybatis03.bean.Teacher">
        SELECT * FROM teacher WHERE groupno = #{groupno}
    </select>
</mapper>

3、教师接口类

public interface TeacherMapper {
    /* 实现一对多关联(延迟加载),一个教研组对应多个教师,既:教师的教研编号与教研组的教研编号关联  */
    TeacherGroup queryWithLazyGroupAndTeachers(int groupNo);
}

4、实体类

4.1 教师实体类

public class Teacher {
    @override
    public String toString() {
        return "Teacher{" +
                "teaNo=" + teaNo +
                ", courseNo=" + courseNo +
                ", teaName='" + teaName + ''' +
                ", teacherCourse{" +

                "courseNo=" + teacherCourse.getCourseNo() +
                ", courseName=" + teacherCourse.getCourseName() +"}"+

                '}';
    }


    /* 教师编号 */
    private int teaNo;
    /* 课程编号 */
    private int courseNo;
    /* 教师名称 */
    private String teaName;

    /* 教师课程类,课程作为老师属性 */
    private TeacherCourse teacherCourse;

    /* 新增一个教研组编号,用于关联教研组编号,实现多对一关联*/
    private int  groupNo;

    /**
     *  <!--利用resultMaP实现一对一 -->
     * @return
     */
    public TeacherCourse getTeacherCourse() {
        return teacherCourse;
    }

    public void setTeacherCourse(TeacherCourse teacherCourse) {
        this.teacherCourse = teacherCourse;
    }

    public int getGroupNo() {
        return groupNo;
    }

    public void setGroupNo(int groupNo) {
        this.groupNo = groupNo;
    }

    public int getCourseNo() {
        return courseNo;
    }

    public void setCourseNo(int courseNo) {
        this.courseNo = courseNo;
    }

    public int getTeaNo() {
        return teaNo;
    }

    public void setTeaNo(int teaNo) {
        this.teaNo = teaNo;
    }

    public String getTeaName() {
        return teaName;
    }

    public void setTeaName(String teaName) {
        this.teaName = teaName;
    }
}

4.2 教研组实体类

 1 public class TeacherGroup {
 2     @Override
 3     public String toString() {
 4 
 5         String str = "";
 6         for (int i = 0; i < teacherList.size(); i++) {
 7 
 8             str += "teaNo=" + teacherList.get(i).getTeaNo() + ",";
 9             str += "courseNo=" + teacherList.get(i).getCourseNo() + ",";
10             str += "teaName=" + teacherList.get(i).getTeaName() + ",";
11             str += "groupNo=" + teacherList.get(i).getGroupNo();
12             if (i < teacherList.size() - 1) {
13                 str += ",";
14             }
15 
16         }
17         return "TeacherGroup{" +
18                 "groupID=" + groupID +
19                 ", groupName='" + groupName + ''' +
20                 ", teacherList{" +
21 //                "teaNo=" + teacherList.get(0).getTeaNo() + "," +
22 //                "courseNo=" + teacherList.get(0).getCourseNo() + "," +
23 //                "teaName=" + teacherList.get(0).getTeaName() + "," +
24 //                "groupNo=" + teacherList.get(0).getGroupNo() + "," +
25                     str+
26                 "}" +
27                 '}';
28     }
29 
30 
31     /* 教研组编号:汉语教研组 1,英语教研组2,日语教研组3,德语教研组 4 */
32     /* 教研组编号,用于关联教师编号,实现多对一关联*/
33     private int groupID;
34 
35     /* 教研组名称,英语教研组,日语教研组还是德语教研组*/
36     private String groupName;
37 
38     /* 一个教研组对应多个教师,属于一对多关系。关联关系:教师的教研编号与教研组的教研编号关联 */
39     private List<Teacher> teacherList;
40 
41     public List<Teacher> getTeacherList() {
42         return teacherList;
43     }
44 
45     public void setTeacherList(List<Teacher> teacherList) {
46         this.teacherList = teacherList;
47     }
48 
49     public int getGroupID() {
50         return groupID;
51     }
52 
53     public void setGroupID(int groupID) {
54         this.groupID = groupID;
55     }
56 
57     public String getGroupName() {
58         return groupName;
59     }
60 
61     public void setGroupName(String groupName) {
62         this.groupName = groupName;
63     }
64 }

5、测试类

 1     @test
 2     public void queryWithLazyGroupAndTeachers() throws Exception {
 3         Reader reader = Resources.getResourceAsReader("mybatis-03.xml");
 4         SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
 5 
 6         SqlSession session = sessionFactory.openSession();
 7         int groupNo = 1;
 8         TeacherMapper personMapper = session.getMapper(TeacherMapper.class);
 9         TeacherGroup teacherGroup = personMapper.queryWithLazyGroupAndTeachers(groupNo);
10         System.out.println("教研组编号:"+teacherGroup.getGroupID()+",教研组名称:"+teacherGroup.getGroupName());
11         List<Teacher> teacherList = teacherGroup.getTeacherList();
12         for (Teacher teacher : teacherList) {
13             System.out.println("教师编号:"+teacher.getTeaNo()+",教师名称:"
14                     +teacher.getTeaName()+",教研组编号:"+teacher.getGroupNo());
15         }
16     }

测试结果

"C:Program FilesJavajdk1.8.0_25binjava" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:UsersnewsoftAppDataRoamingJetbrainsIntelliJ IDEA 2017.3.5libidea_rt.jar=1031:C:UsersnewsoftAppDataRoamingJetBrainsIntelliJ IDEA 2017.3.5bin" -DFile.encoding=UTF-8 -classpath "C:UsersnewsoftAppDataRoamingJetBrainsIntelliJ IDEA 2017.3.5libidea_rt.jar;C:UsersnewsoftAppDataRoamingJetBrainsIntelliJ IDEA 2017.3.5pluginsjunitlibjunit-rt.jar;C:UsersnewsoftAppDataRoamingJetBrainsIntelliJ IDEA 2017.3.5pluginsjunitlibjunit5-rt.jar;D:downloadlibmavenTolltransfermic-repositoryorgjunitplatformjunit-platform-launcher1.5.2junit-platform-launcher-1.5.2.jar;D:downloadlibmavenTollTransfermic-repositoryorgapiGuardianapiguardian-api1.1.0apiguardian-api-1.1.0.jar;D:downloadlibmavenTollTransfermic-repositoryorgjunitplatformjunit-platform-engine1.5.2junit-platform-engine-1.5.2.jar;D:downloadlibmavenTollTransfermic-repositoryorgopentest4jopentest4j1.2.0opentest4j-1.2.0.jar;D:downloadlibmavenTollTransfermic-repositoryorgjunitplatformjunit-platform-commons1.5.2junit-platform-commons-1.5.2.jar;D:downloadlibmavenTollTransfermic-repositoryorgjunitjupiterjunit-jupiter-engine5.5.2junit-jupiter-engine-5.5.2.jar;D:downloadlibmavenTollTransfermic-repositoryorgjunitjupiterjunit-jupiter-api5.5.2junit-jupiter-api-5.5.2.jar;D:downloadlibmavenTollTransfermic-repositoryorgjunitvintagejunit-vintage-engine5.5.2junit-vintage-engine-5.5.2.jar;D:downloadlibmavenTollTransfermic-repositoryjunitjunit4.12junit-4.12.jar;D:downloadlibmavenTollTransfermic-repositoryorghamcresthamcrest-core1.3hamcrest-core-1.3.jar;C:Program FilesJavajdk1.8.0_25jrelibcharsets.jar;C:Program FilesJavajdk1.8.0_25jrelibdeploy.jar;C:Program FilesJavajdk1.8.0_25jrelibextaccess-bridge-64.jar;C:Program FilesJavajdk1.8.0_25jrelibextcldrdata.jar;C:Program FilesJavajdk1.8.0_25jrelibextdnsns.jar;C:Program FilesJavajdk1.8.0_25jrelibextjaccess.jar;C:Program FilesJavajdk1.8.0_25jrelibextjfxrt.jar;C:Program FilesJavajdk1.8.0_25jrelibextlocaledata.jar;C:Program FilesJavajdk1.8.0_25jrelibextnashorn.jar;C:Program FilesJavajdk1.8.0_25jrelibextsunec.jar;C:Program FilesJavajdk1.8.0_25jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.8.0_25jrelibextsunmscapi.jar;C:Program FilesJavajdk1.8.0_25jrelibextsunpkcs11.jar;C:Program FilesJavajdk1.8.0_25jrelibextzipfs.jar;C:Program FilesJavajdk1.8.0_25jrelibjavaws.jar;C:Program FilesJavajdk1.8.0_25jrelibjce.jar;C:Program FilesJavajdk1.8.0_25jrelibjfr.jar;C:Program FilesJavajdk1.8.0_25jrelibjfxswt.jar;C:Program FilesJavajdk1.8.0_25jrelibjsse.jar;C:Program FilesJavajdk1.8.0_25jrelibmanagement-agent.jar;C:Program FilesJavajdk1.8.0_25jrelibplugin.jar;C:Program FilesJavajdk1.8.0_25jrelibresources.jar;C:Program FilesJavajdk1.8.0_25jrelibrt.jar;D:ideaworkspaceProjectStudymybatis-02targetclasses;D:downloadlibmavenTollTransfermic-repositoryorghamcresthamcrest-core2.1hamcrest-core-2.1.jar;D:downloadlibmavenTollTransfermic-repositoryorghamcresthamcrest2.1hamcrest-2.1.jar;D:downloadlibmavenTollTransfermic-repositoryorgmybatismybatis3.4.5mybatis-3.4.5.jar;D:downloadlibmavenTollTransfermic-repositorymysqlmysql-connector-java5.1.44mysql-connector-java-5.1.44.jar;D:downloadlibmavenTollTransfermic-repositorylog4jlog4j1.2.17log4j-1.2.17.jar;D:downloadlibmavenTollTransfermic-repositoryorgslf4jslf4j-log4j121.7.12slf4j-log4j12-1.7.12.jar;D:downloadlibmavenTollTransfermic-repositoryorgslf4jslf4j-api1.7.30slf4j-api-1.7.30.jar;D:downloadlibmavenTollTransfermic-repositorycglibcglib3.3.0cglib-3.3.0.jar;D:downloadlibmavenTollTransfermic-repositoryorgow2asmasm7.1asm-7.1.jar;D:downloadlibmavenTollTransfermic-repositorynetlogstashlogbacklogstash-logback-encoder5.3logstash-logback-encoder-5.3.jar;D:downloadlibmavenTollTransfermic-repositorycomfasterxmljacksoncorejackson-databind2.10.3jackson-databind-2.10.3.jar;D:downloadlibmavenTollTransfermic-repositorycomfasterxmljacksoncorejackson-annotations2.10.3jackson-annotations-2.10.3.jar;D:downloadlibmavenTollTransfermic-repositorycomfasterxmljacksoncorejackson-core2.10.3jackson-core-2.10.3.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit5 com.mybatis03.test.testTeacher01,queryWithLazyGroupAndTeachers
[lsjSso]2021-10-20 09:17:47,649-org.apache.ibatis.logging.LogFactory-0   [main]DEBUGorg.apache.ibatis.logging.LogFactory-Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
[lsjSso]2021-10-20 09:17:47,753-org.apache.ibatis.logging.LogFactory-104 [main]DEBUGorg.apache.ibatis.logging.LogFactory-Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
[lsjSso]2021-10-20 09:17:47,781-org.apache.ibatis.datasource.pooled.PooledDataSource-132 [main]DEBUGorg.apache.ibatis.datasource.pooled.PooledDataSource-PooledDataSource forcefully closed/removed all connections.
[lsjSso]2021-10-20 09:17:47,781-org.apache.ibatis.datasource.pooled.PooledDataSource-132 [main]DEBUGorg.apache.ibatis.datasource.pooled.PooledDataSource-PooledDataSource forcefully closed/removed all connections.
[lsjSso]2021-10-20 09:17:47,781-org.apache.ibatis.datasource.pooled.PooledDataSource-132 [main]DEBUGorg.apache.ibatis.datasource.pooled.PooledDataSource-PooledDataSource forcefully closed/removed all connections.
[lsjSso]2021-10-20 09:17:47,782-org.apache.ibatis.datasource.pooled.PooledDataSource-133 [main]DEBUGorg.apache.ibatis.datasource.pooled.PooledDataSource-PooledDataSource forcefully closed/removed all connections.
[lsjSso]2021-10-20 09:17:47,953-org.apache.ibatis.transaction.jdbc.JdbcTransaction-304 [main]DEBUGorg.apache.ibatis.transaction.jdbc.JdbcTransaction-Opening JDBC Connection
[lsjSso]2021-10-20 09:17:48,174-org.apache.ibatis.datasource.pooled.PooledDataSource-525 [main]DEBUGorg.apache.ibatis.datasource.pooled.PooledDataSource-Created connection 16503286.
[lsjSso]2021-10-20 09:17:48,174-org.apache.ibatis.transaction.jdbc.JdbcTransaction-525 [main]DEBUGorg.apache.ibatis.transaction.jdbc.JdbcTransaction-setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@fbd1f6]
[lsjSso]2021-10-20 09:17:48,177-com.mybatis03.mapper.TeacherMapper.queryWithLazyGroupAndTeachers-528 [main]DEBUGcom.mybatis03.mapper.TeacherMapper.queryWithLazyGroupAndTeachers-==>  Preparing: SELECT g.*,g.groupID AS groupno FROM teachergroup g WHERE g.groupid =? 
[lsjSso]2021-10-20 09:17:48,211-com.mybatis03.mapper.TeacherMapper.queryWithLazyGroupAndTeachers-562 [main]DEBUGcom.mybatis03.mapper.TeacherMapper.queryWithLazyGroupAndTeachers-==> Parameters: 1(Integer)
[lsjSso]2021-10-20 09:17:48,257-com.mybatis03.mapper.TeacherMapper.queryWithLazyGroupAndTeachers-608 [main]DEBUGcom.mybatis03.mapper.TeacherMapper.queryWithLazyGroupAndTeachers-<==      total: 1
教研组编号:1,教研组名称:chinese
[lsjSso]2021-10-20 09:17:48,258-com.mybatis03.mapper.teacherGroupToTeacherMapper.queryGroupToTeacherByNO-609 [main]DEBUGcom.mybatis03.mapper.teacherGroupToTeacherMapper.queryGroupToTeacherByNO-==>  Preparing: SELECT * FROM teacher WHERE groupno = ? 
[lsjSso]2021-10-20 09:17:48,258-com.mybatis03.mapper.teacherGroupToTeacherMapper.queryGroupToTeacherByNO-609 [main]DEBUGcom.mybatis03.mapper.teacherGroupToTeacherMapper.queryGroupToTeacherByNO-==> Parameters: 1(Integer)
[lsjSso]2021-10-20 09:17:48,261-com.mybatis03.mapper.teacherGroupToTeacherMapper.queryGroupToTeacherByNO-612 [main]DEBUGcom.mybatis03.mapper.teacherGroupToTeacherMapper.queryGroupToTeacherByNO-<==      Total: 2
教师编号:1001,教师名称:sara,教研组编号:1
教师编号:1002,教师名称:sakula,教研组编号:1

Process finished with exit code 0

说明:

Mybatis  一对多延迟加载,并且子查询中与主表字段不对应 (19)

 

脚本宝典总结

以上是脚本宝典为你收集整理的Mybatis 一对多延迟加载,并且子查询中与主表字段不对应 (19)全部内容,希望文章能够帮你解决Mybatis 一对多延迟加载,并且子查询中与主表字段不对应 (19)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。