如何实现多表关联查询,我们来看两种常见的情况:
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返回了两张表的信息