mybatis——多表关联查询

如何实现多表关联查询,我们来看两种常见的情况:

1、多表关联返回一张表的信息

userMapping中stuByuser是查询多张表返回一张表信息,stuAnduserByuser是查询多张表,返回多张表信息

<?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.etc.dao.UserDao">

    <select id="stuByuser" resultType="Student">
       SELECT student.*
        FROM users
        INNER JOIN user_stu  on user_stu.userid = users.id
        INNER JOIN student  on student.id = user_stu.stuid
        WHERE users.id = #{id};
    </select>

    <select id="stuAnduserByuser" resultType="map">
        SELECT student.*,
				users.id,
				users.`name`,
				users.`password`
        FROM users
        INNER JOIN user_stu  on user_stu.userid = users.id
        INNER JOIN student  on student.id = user_stu.stuid
        WHERE users.id = 1;
    </select>
</mapper>

UserDao

package com.etc.dao;

import com.etc.model.Student;
import com.etc.model.User;

import java.util.List;

public interface UserDao {
    
    List<Student> stuByuser(int id);

    List stuAnduserByuser(int id);
}

UserTest 

import com.etc.dao.UserDao;
import com.etc.model.Student;
import com.etc.model.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class UserTest extends BaseMapper {

    @Test
   public void  stuByuser(){
        try (SqlSession sqlSession = this.getSqlSession()){
            UserDao dao = sqlSession.getMapper(UserDao.class);
            List<Student> students = dao.stuByuser(1);
            System.out.println(students);
        }
   }

   @Test
public void stuAnduserByuser(){
       try (SqlSession sqlSession = this.getSqlSession()){
           UserDao dao = sqlSession.getMapper(UserDao.class);
           List maps = dao.stuAnduserByuser(1);
           System.out.println(maps);
       }
}

}

stuByuser只返回了一张表的信息

stuAnduserByuser返回了两张表的信息

猜你喜欢

转载自blog.csdn.net/Milan__Kundera/article/details/82114853