Mybatis(关联查询)

Posted zfyyfw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis(关联查询)相关的知识,希望对你有一定的参考价值。

  Mybatis在写查询的时候经常会遇到链表查询,Mybatis的联表查询写法如下:

  (1) 根据 classId 查询对应的班级信息,包括学生,老师

  
-- 创建表和数据:
create database mybatis;
use mybatis;
CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME
VARCHAR(20), age INT);
INSERT INTO users(NAME, age) VALUES(Tom, 12);
INSERT INTO users(NAME, age) VALUES(Jack, 11);

CREATE TABLE student(
s_id INT PRIMARY KEY AUTO_INCREMENT,
s_name VARCHAR(20),
class_id INT
);


  

//班级
public class Clazz 
    private int cId;
    private String cName;
    private String teacherId;
    private Teacher teacher;    //将Teacher封装到班级里
    //get,set      

//老师
public class Teacher 
    private int id;
    private String name;
    //get,set   

 

  1.一对一或是多对一时

  二次查询

<?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.zhiyou100.hhz.dao.ClazzDao">
    <select id="selectById" parameterType="int" resultMap="mymap">
        select * from class where c_id=#cid
    </select>
    <select id="selectByTeacherId" resultType="com.zhiyou100.hhz.bean.Teacher">
        select t_id tid,t_name tname from teacher where t_id=#tid
    </select>
    <resultMap type="com.zhiyou100.hhz.bean.Clazz" id="mymap">
        <id column="c_id" property="cId"/>
        <result column="c_name" property="cName"/>
        <result column="teacher_id" property="teacherId"/>
        <association property="teacher" javaType="com.zhiyou100.hhz.bean.Teacher" 
        column="teacher_id" select="selectByTeacherId"></association>
    </resultMap>
</mapper>

  联表查询

<?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.zhiyou100.hhz.dao.ClazzDao">
    
    <select id="selectByTeacherId" resultMap="TeacherMap">
        select * from teacher t join class c on t.t_id=c.teacher_id where c_id=#id
    </select>
    
    <resultMap type="com.zhiyou100.hhz.bean.Clazz" id="TeacherMap">
        <id column="c_id" property="cId"/>
        <result column="c_name" property="cName"/>
        <result column="teacher_id" property="teacherId"/>
        <association property="teacher" javaType="com.zhiyou100.hhz.bean.Teacher">
        <result column="t_id" property="tId"/>
        <result column="t_name" property="tName"/>
        </association>
    </resultMap>
</mapper>

  2. 一对多

  二次查询

<?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.zhiyou100.hhz.dao.ClazzDao">
    <select id="selectById" parameterType="int" resultMap="mymap">
        select * from class where c_id=#cid
    </select>
    <select id="selectByTeacherId" resultType="com.zhiyou100.hhz.bean.Teacher">
        select t_id tid,t_name tname from teacher where t_id=#tid
    </select>
    <select id="selectByClassId" resultType="com.zhiyou100.hhz.bean.Student">
        select s_id id,s_name name from student where class_id=#classid
    </select>
    <resultMap type="com.zhiyou100.hhz.bean.Clazz" id="mymap">
        <id column="c_id" property="cId"/>
        <result column="c_name" property="cName"/>
        <result column="teacher_id" property="teacherId"/>
        <association property="teacher" javaType="com.zhiyou100.hhz.bean.Teacher" 
        column="teacher_id" select="selectByTeacherId"></association>
        <collection property="students" ofType="com.zhiyou100.hhz.bean.Student" select="selectByClassId" column="c_id"></collection>
    </resultMap>
</mapper>

 

  联表查询

 

<?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.zhiyou100.hhz.dao.ClazzDao">
    
    <select id="selectByTeacherId" resultMap="TeacherMap">
        select * from teacher t join class c on t.t_id=c.teacher_id join student s on s.class_id=c.c_id where c_id=#id
    </select>
    
    <resultMap type="com.zhiyou100.hhz.bean.Clazz" id="TeacherMap">
        <id column="c_id" property="cId"/>
        <result column="c_name" property="cName"/>
        <result column="teacher_id" property="teacherId"/>
        <association property="teacher" javaType="com.zhiyou100.hhz.bean.Teacher">
        <result column="t_id" property="tId"/>
        <result column="t_name" property="tName"/>
        </association>
        <collection property="students" ofType="com.zhiyou100.hhz.bean.Student">
            <result column="s_id" property="id"/>
            <result column="s_name" property="name"/>
        </collection>
    </resultMap>
</mapper>

 

 

以上是关于Mybatis(关联查询)的主要内容,如果未能解决你的问题,请参考以下文章

mybatis关联查询中 列名重复的解决办法

MyBatis高级篇 - 关联查询(一对多)

Mybatis关联查询(嵌套查询)

mybatis中的关联查询

MyBatis的关联查询

MyBatis关联查询 (association) 时遇到的某些问题/mybatis映射