java mybatis连表查询

 

 1 TeacherMapper.xml文件
 2 
 3 
 4 
 5 <?xml version="1.0" encoding="UTF-8" ?>
 6 <!DOCTYPE mapper
 7         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 8         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 9 <!--核心配置文件-->
10 <mapper namespace="com.kuang.dao.TeacherMapper">
11     <select id="getTeacher" resultType="Teacher">
12         select *
13         from mybatis.teacher;
14     </select>
15 
16     <!--    按照结果嵌套查询-->
17     <select id="getTeacher2" resultMap="TeacherStudent">
18         select s.s_id,s.s_name,t.t_name,t.t_id
19         from teacher t,student s
20         where s.t_id=t.t_id and t.t_id=#{t_id}
21     </select>
22 
23     <resultMap id="TeacherStudent" type="Teacher">
24         <result property="t_id" column="t_id"/>
25         <result property="t_name" column="t_name"/>
26         <!--复杂的属性我们要单独处理
27             对象:association
28             集合:collection
29 
30             javaType=""指定属性类型
31             结合中的泛型信息,我们使用 ofTypeu获取
32         -->
33         <collection property="students" ofType="Student">
34             <result property="s_id" column="s_id"/>
35             <result property="s_name" column="s_name"/>
36             <result property="t_id" column="t_id"/>
37         </collection>
38     </resultMap>
39 
40 
41     <!--    ==========================================-->
42 
43     <select id="getTeacher3" resultMap="TeacherStudent2">
44         select * from mybatis.teacher where t_id=#{t_id}
45     </select>
46 
47     <resultMap id="TeacherStudent2" type="Teacher">
48         <collection property="students" javaType="ArrayList" ofType="Student" select="getStudentByTeacherId"
49                     column="t_id"/>
50     </resultMap>
51 
52     <select id="getStudentByTeacherId" resultType="Student">
53         select * from mybatis.student where t_id=#{t_id}
54     </select>
55 
56 </mapper>

 1 pojo实体类
 2 
 3 package com.kuang.pojo;
 4 
 5 import lombok.Data;
 6 
 7 import java.util.List;
 8 
 9 @Data
10 public class Teacher {
11     private int t_id;
12     private String t_name;
13     //一个老师拥有多个学生
14     private List<Student> students;
15 }
 1 dao接口类
 2 
 3 package com.kuang.dao;
 4 
 5 import com.kuang.pojo.Teacher;
 6 import org.apache.ibatis.annotations.Param;
 7 import org.apache.ibatis.annotations.Select;
 8 
 9 import java.util.List;
10 
11 public interface TeacherMapper {
12     //获取老师
13     List<Teacher> getTeacher();
14 
15     //获取指定老师下的所有学生以及老师信息
16     Teacher getTeacher2(@Param("t_id") int t_id);
17 
18     //获取指定老师下的所有学生以及老师信息  子查询
19     Teacher getTeacher3(@Param("t_id") int t_id);
20 
21 }
MybatisUtils 工具类

package com.kuang.utils;


import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

//工具类
//sqlSessionFactory -->sqlSession
public class MybatisUtils {

    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            //使用mybatis第一步,获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    //既然有了SqlSessionFactory,顾名思义,我们就可以从中获得SqlSeseion 的实例
    //SqlSession 完全包含了面向数据库执行SQL命令所需的所有方法
    public static SqlSession getSqlSession() {
        //sqlSession sqlSession=new sqlSessionFactory.openSession();
        //return sqlSession
        return sqlSessionFactory.openSession(true);
        // sqlSessionFactory.openSession();

    }

}
MyTest 测试类

import com.kuang.dao.TeacherMapper;
import com.kuang.pojo.Teacher;
import com.kuang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class MyTest {

    @Test
    public void test() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        List<Teacher> teacher = sqlSession.getMapper(TeacherMapper.class).getTeacher();
        for (Teacher teacher1 : teacher) {
            System.out.println(teacher1);
        }

        sqlSession.close();
    }


    @Test
    public void getTeacher2() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        Teacher teacher = sqlSession.getMapper(TeacherMapper.class).getTeacher2(1);

        System.out.println(teacher);

//        Teacher(t_id=1, t_name=张老师, students=[Student(s_id=1, s_name=张三, t_id=1), Student(s_id=2, s_name=李四, t_id=1), Student(s_id=3, s_name=王五, t_id=1)])
        sqlSession.close();
    }

    @Test
    public void getTeacher3() {
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        Teacher teacher = sqlSession.getMapper(TeacherMapper.class).getTeacher3(1);

        System.out.println(teacher);

//        Teacher(t_id=1, t_name=张老师, students=[Student(s_id=1, s_name=张三, t_id=1), Student(s_id=2, s_name=李四, t_id=1), Student(s_id=3, s_name=王五, t_id=1)])
        sqlSession.close();
    }

}

 

posted @ 2023-03-07 18:45  Bruce_Sun  阅读(75)  评论(0)    收藏  举报