Mybatis 一对多 结果集映射 简单入门 易懂

2022-08-16 12:18:47

Mybatis官方文档说明处

一、搭建数据库环境

student 表

DROPTABLEIFEXISTS`student_2`;CREATETABLE`student_2`(`id`int(10)NOTNULL,`name`varchar(30)CHARACTERSET utf8COLLATE utf8_general_ciNULLDEFAULTNULL,`tid`int(10)NULLDEFAULTNULL,PRIMARYKEY(`id`)USINGBTREE,INDEX`fktid`(`tid`)USINGBTREE,CONSTRAINT`fktid`FOREIGNKEY(`tid`)REFERENCES`teacher`(`id`)ONDELETERESTRICTONUPDATERESTRICT)ENGINE=InnoDBCHARACTERSET= utf8COLLATE= utf8_general_ci ROW_FORMAT= Dynamic;INSERTINTO`student_2`VALUES(1,'小明',1);INSERTINTO`student_2`VALUES(2,'邱ss',2);INSERTINTO`student_2`VALUES(3,'邱大哥',3);INSERTINTO`student_2`VALUES(4,'杨大哥',1);INSERTINTO`student_2`VALUES(5,'杨ss',2);

teacher

DROPTABLEIFEXISTS`teacher`;CREATETABLE`teacher`(`id`int(10)NOTNULLAUTO_INCREMENT,`name`varchar(255)CHARACTERSET utf8COLLATE utf8_general_ciNOTNULL,PRIMARYKEY(`id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=4CHARACTERSET= latin1COLLATE= latin1_swedish_ci ROW_FORMAT= Dynamic;-- ------------------------------ Records of teacher-- ----------------------------INSERTINTO`teacher`VALUES(1,'小王老师');INSERTINTO`teacher`VALUES(2,'小李老师');INSERTINTO`teacher`VALUES(3,'小黑老师');

二、idea 搭建maven 项目 (mybatis-demo)

2.1、项目结构

在这里插入图片描述

2.2、导入依赖

<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.48</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies>

2.3、mysql 配置文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm-study?useSSL=false
jdbc.username=root
jdbc.password=123456

2.4、创建pojo 类

学生

/**
 * @Author: crush
 * @Date: 2021-06-17 18:23
 * version 1.0
 */publicclassStudent{/**
     * 学生id
     */privateInteger id;/**
     * xueshneg xingming
     */privateString name;/**
     * 老师id
     */privateInteger tid;}

老师

/**
 * @Author: crush
 * @Date: 2021-06-17 18:23
 * version 1.0
 */publicclassTeacher{/**
     * 老师id
     */privateInteger id;/**
     * 老师的姓名
     */privateString name;/**
     * 每个老师是不是有很多学生
     */privateList<Student> students;}

2.5、写一个mybatis 的工具类

/**
 * @author crush
 */publicclassMybatisUtil{privatestaticSqlSessionFactory sqlSessionFactory;static{try{String resource="mybatis-config.xml";InputStream inputStream=Resources.getResourceAsStream(resource);
            sqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);}catch(IOException e){
            e.printStackTrace();}}publicstaticSqlSessiongetSession(){return sqlSessionFactory.openSession(true);}}

2.7、 写一个TeacherMapper

importcom.crush.pojo.Teacher;importorg.apache.ibatis.annotations.Param;importjava.util.List;publicinterfaceTeacherMapper{// 获取老师List<Teacher>getTeacher();//获取指定老师下的所有学生及老师的信息TeachergetTeacher2(@Param("tid")Integer id);//获取指定老师下的所有学生及老师的信息TeachergetTeacher3(@Param("tid")Integer id);}

写一个TeacherMapper.xml文件

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.crush.dao.TeacherMapper"><selectid="getTeacher"resultType="Teacher">
        select * from teacher</select><selectid="getTeacher2"resultMap="TeacherStudent">
        select s.id sid,s.name sname,t.name tname,
           t.id tid from student_2 s,teacher t where s.tid=t.id and t.id=#{tid}</select><resultMapid="TeacherStudent"type="Teacher"><resultproperty="id"column="tid"/><resultproperty="name"column="tname"/><!--
            复杂的属性,我们需要单独处理 对象 association  集合collection
               javaType ="" 是指属性的类型
               集合中的泛型的信息 我们使用ofType 获取
        --><collectionproperty="students"ofType="Student"><resultproperty="id"column="sid"/><resultproperty="name"column="sname"/><resultproperty="tid"column="tid"/></collection></resultMap><!--========================= 结果集映射=============================--><selectid="getTeacher3"resultMap="TeacherStudent3">
        select * from teacher where id=#{tid}</select><resultMapid="TeacherStudent3"type="Teacher"><collectionproperty="students"javaType="ArrayList"ofType="Student"select="getStudentByTeacherId"column="id"/></resultMap><selectid="getStudentByTeacherId"resultType="Student">
        select  * from  student_2 where tid=#{tid}</select></mapper>

2.8、mybatis-config.xml 文件

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--属性--><propertiesresource="dbconfig.properties"/><!--设置--><settings><!-- STDOUT_LOGGING 打印到控制台 --><settingname="logImpl"value="STDOUT_LOGGING"/><!-- 开启驼峰 --><settingname="mapUnderscoreToCamelCase"value="true"/></settings><!--别名--><typeAliases><!--这是 自己 取别名--><typeAliasalias="Student"type="com.crush.pojo.Student"/><typeAliasalias="Teacher"type="com.crush.pojo.Teacher"/></typeAliases><environmentsdefault="development"><environmentid="development"><transactionManagertype="JDBC"></transactionManager><dataSourcetype="POOLED"><propertyname="driver"value="${jdbc.driver}"/><propertyname="url"value="${jdbc.url}"/><propertyname="username"value="${jdbc.username}"/><propertyname="password"value="${jdbc.password}"/></dataSource></environment></environments><mappers><mapperresource="mapper/StudentMapper.xml"/><mapperresource="mapper/TeacherMapper.xml"/></mappers></configuration>

测试:

/**
 * @Author: crush
 * @Date: 2021-06-17 18:22
 * version 1.0
 */publicclassMyTest{@TestpublicvoidgetTeacher(){SqlSession session=MybatisUtil.getSession();TeacherMapper mapper= session.getMapper(TeacherMapper.class);List<Teacher> teacher= mapper.getTeacher();System.out.println(teacher);

        session.close();}@TestpublicvoidgetTeacher2(){SqlSession session=MybatisUtil.getSession();TeacherMapper mapper= session.getMapper(TeacherMapper.class);Teacher teacher2= mapper.getTeacher2(1);System.out.println(teacher2);
        session.close();}@TestpublicvoidgetTeacher3(){SqlSession session=MybatisUtil.getSession();TeacherMapper mapper= session.getMapper(TeacherMapper.class);Teacher teacher2= mapper.getTeacher3(1);System.out.println(teacher2);
        session.close();}}

自言自语

难啊,加油吧

  • 作者:宁在春
  • 原文链接:https://blog.csdn.net/weixin_45821811/article/details/118002266
    更新时间:2022-08-16 12:18:47