Mybatis学习路之一对一分布式关联查询

 

一个简单的需求,Student表和Course表,Student表中有一个courseId字段,对应的是Course表的id主键,进行关联查询,查询学生的时候,同时查出学生对应的课程信息;

这里利用Mybatis的<resultMap>中的<association>进行分布式关联查询。简单的实体类以及接口不在这里展示,主要看一下mapper.xml文件内容

1、StudentMapper.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.springboot.mybatis.mapper.StudentMapper">
    
    <cache></cache>
    <resultMap id="selectStudentByIdMap" type="com.springboot.mybatis.entity.Student">
        <id property="id" column="id"></id>
        <result property="name" column="name"></result>
        <result property="age" column="age"></result>
        <association property="course" select="com.springboot.mybatis.mapper.ClasserMapper.getClasserById" column="classId"></association>
    </resultMap>

    <select id="selectStudentById" parameterType="int" resultMap="selectStudentByIdMap">

        select id ,name,age,classId from student where id = #{id}

    </select>
</mapper>

2、CourseMapper.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.springboot.mybatis.mapper.ClasserMapper">
    <cache></cache>

    <resultMap id="getClasserByIdMap" type="com.springboot.mybatis.entity.Course">
        <id column="id" property="id"></id>
        <result column="class_name" property="className"></result>
    </resultMap>

    <select id="getClasserById" parameterType="int" resultMap="getClasserByIdMap">

      select id,class_name,teacherId from course where id = #{classId}

    </select>
</mapper>

3、查询结果展示

2019-03-29 16:19:06.572 DEBUG 6184 --- [           main] c.s.mybatis.mapper.StudentMapper         : Cache Hit Ratio [com.springboot.mybatis.mapper.StudentMapper]: 0.0
2019-03-29 16:19:06.578  INFO 6184 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2019-03-29 16:19:06.827  INFO 6184 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2019-03-29 16:19:06.833 DEBUG 6184 --- [           main] c.s.m.m.StudentMapper.selectStudentById  : ==>  Preparing: select id ,name,age,classId from student where id = ? 
2019-03-29 16:19:06.854 DEBUG 6184 --- [           main] c.s.m.m.StudentMapper.selectStudentById  : ==> Parameters: 1(Integer)
2019-03-29 16:19:06.903 DEBUG 6184 --- [           main] c.s.m.m.StudentMapper.selectStudentById  : <==      Total: 1
2019-03-29 16:19:06.917 DEBUG 6184 --- [           main] c.s.mybatis.mapper.ClasserMapper         : Cache Hit Ratio [com.springboot.mybatis.mapper.ClasserMapper]: 0.0
2019-03-29 16:19:06.917 DEBUG 6184 --- [           main] c.s.m.m.ClasserMapper.getClasserById     : ==>  Preparing: select id,class_name,teacherId from course where id = ? 
2019-03-29 16:19:06.918 DEBUG 6184 --- [           main] c.s.m.m.ClasserMapper.getClasserById     : ==> Parameters: 1(Integer)
2019-03-29 16:19:06.920 DEBUG 6184 --- [           main] c.s.m.m.ClasserMapper.getClasserById     : <==      Total: 1
2019-03-29 16:19:06.922 DEBUG 6184 --- [           main] c.s.mybatis.mapper.TeacherMapper         : Cache Hit Ratio [com.springboot.mybatis.mapper.TeacherMapper]: 0.0
2019-03-29 16:19:06.922 DEBUG 6184 --- [           main] c.s.m.m.TeacherMapper.getTeacherById     : ==>  Preparing: select id,teacher_name from teacher where id = ? 
2019-03-29 16:19:06.922 DEBUG 6184 --- [           main] c.s.m.m.TeacherMapper.getTeacherById     : ==> Parameters: 1(Integer)
2019-03-29 16:19:06.923 DEBUG 6184 --- [           main] c.s.m.m.TeacherMapper.getTeacherById     : <==      Total: 1
Student{id=1, name='Tom', age=11, course=Course{id=1, className='Java', teacher=Teacher{id=1, teacherName='YANG'}}}
2019-03-29 16:19:06.929  INFO 6184 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2019-03-29 16:19:06.937  INFO 6184 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

通过查询日志来看,是分布的查询,然后最后组装一起,然后返回结果的,那么接下来看下association标签具体的一些属性,见下表:

property映射数据库列的字段或属性。
colum数据库的列名或者列标签别名。
javaTyp完整java类名或别名。
jdbcType支持的JDBC类型列表列出的JDBC类型。
resultMap一个可以映射联合嵌套结果集到一个适合的对象视图上的ResultMap
select表明当前属性是调用select指定的方法查出的结果,此时的column表示指定将哪一列的值传给这个方法

上面的例子中就是利用select属性和colum属性进行分布式的一对一查询操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值