IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Mybatis学习笔记:多对一&&一对多 -> 正文阅读

[开发工具]Mybatis学习笔记:多对一&&一对多


多对一

多个学生对于一个老师

环境搭建

  1. 导入lombok
 <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
  1. 新建实体类Teacher,Student
@Data
public class Student {
    private int id;
    private String name;
    //学生关联一个老师
    private  Teacher teacher;
}
@Data
public class Teacher {
    private int id;
    private String name;
}
  1. 建立Mapper接口
public interface StudentMapper {
    //查询所有学生信息,以及对于老师的信息
    public List<Student> getStudent();
    public List<Student> getStudent2();
}
public interface TeacherMapper {
    @Select("select * from teacher where id =#{id}")
    Teacher getTeacher(@Param("id") int id);
}
  1. 建立Mapper.xml文件(StudentMapper.xml)
<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.weirdo.dao.StudentMapper">

</mapper>
  1. 在核心配置文件中绑定注册我们的Mapper接口或者文件 【方式很多,随心选】
<!--绑定接口-->
    <mappers>
        <mapper class="com.weirdo.dao.TeacherMapper"/>
        <mapper class="com.weirdo.dao.StudentMapper"/>
    </mappers>
  1. 测试查询是否能够成功

按照查询嵌套处理

 <!--思路:
        1.查询所有的学生信息
        2.根据查询出来的学生tid,寻找对应的老师!!!子查询!!!
    -->
     <select id="getStudent" resultMap="StudentTeacher">
         select * from student;
     </select>
     <resultMap id="StudentTeacher" type="Student">
         <result property="id" column="id"/>
         <result property="name" column="name"/>
         <!--复杂的属性,我们需要单独处理 对象:association  集合:collection -->
         <association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
     </resultMap>
    <select id="getTeacher" resultType="Teacher">
        select * from teacher where id=#{id};
    </select>
   @Test
    public void testStudent(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List<Student> studentlist = mapper.getStudent();
        for (Student student : studentlist) {
            System.out.println(student);
        }
        sqlSession.close();
    }

按照结果嵌套处理

<!--按照结果嵌套处理-->
    <select id="getStudent2" resultMap="StudentTeacher2">
        select s.id sid,s.name sname,t.name tname
        from student s,teacher t
        where s.tid =t.id;
    </select>
    <resultMap id="StudentTeacher2" type="Student">
        <result property="id" column="sid"/>
        <result property="name" column="sname"/>
        <association property="teacher" javaType="Teacher">
            <result property="name" column="tname"/>
        </association>
    </resultMap>
@Test
    public void testStudent2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        List<Student> studentlist = mapper.getStudent2();
        for (Student student : studentlist) {
            System.out.println(student);
        }
        sqlSession.close();
    }

回顾Mysql多对一查询方式:

  • 子查询 (按照查询嵌套)
  • 联表查询 (按照结果嵌套)

一对多

按照查询嵌套处理

<!--按照查询嵌套处理-->
    <select id="getTeacher2" resultMap="TeacherStudent2">
        select * from mybatis.teacher where id = #{tid}
    </select>
    <resultMap id="TeacherStudent2" type="Teacher">
        <collection property="students" javaType="ArrayList" ofType="Student" select="getStudentByTeacherId" column="id"/>
    </resultMap>
    <select id="getStudentByTeacherId" resultType="Student">
        select * from mybatis.student where tid=#{tid}
    </select>
    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
        Teacher teacher = mapper.getTeacher(1);
        System.out.println(teacher);
        sqlSession.close();
    }

结果输出

Teacher(id=1, name=张老师,students=[Student(id=1, name=小明, tid=1), Student(id=2, name=小红, tid=1), Student(id=3, name=小兰, tid=1), Student(id=4, name=小黑, tid=1), Student(id=5, name=小白, tid=1)])

按照结果嵌套处理

<!--    按照结果嵌套查询-->
       <select id="getTeacher" resultMap="TeacherStudent">
           select s.id sid,s.name sname,t.name tname,t.id tid
           from student s,teacher t
           where s.tid=t.id and t.id=#{tid}
       </select>
    <resultMap id="TeacherStudent" type="Teacher">
        <result property="id" column="tid"/>
        <result property="name" column="tname"/>
        <!--复杂的属性,我们需要单独处理 对象:association  集合:collection
        javatype 指定属性的类型
        集合中的泛型信息,我们使用oftype获取
        -->
        <collection property="students" ofType="Student">
            <result property="id" column="sid"/>
            <result property="name" column="sname"/>
            <result property="tid" column="tid"/>
        </collection>
    </resultMap>

小结

  1. 关联 - association 【多对一】
  2. 集合 - collection 【一对多】
  3. javaType & ofType:
    JavaType用来指定实体类中的类型
    ofType用来指定映射到List或者集合中的pojo类型,泛型中的约束类型
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 21:55:41  更:2021-11-14 21:56:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:58:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码