首页 > 其他分享 >Mybatis中多对一与一对多

Mybatis中多对一与一对多

时间:2022-08-28 16:24:59浏览次数:54  
标签:name private id tid Mybatis 一对 teacher select 中多

多对一的处理

在pojo中就有

Student

private String name;
private String id;
private Teacher teacher;

比如说多个学生对应着一个老师

这样我们就要使用多表查询了

方法一:

按查询嵌套处理

<mapper namespace="com.xflsh.mapper.StudentMapper">
    <!--
    需求:获取所有学生及对应老师的信息
    思路:
        1. 获取所有学生的信息
        2. 根据获取的学生信息的老师ID->获取该老师的信息
        3. 思考问题,这样学生的结果集中应该包含老师,该如何处理呢,数据库中我们一般使用关联查询?
            1. 做一个结果集映射:StudentTeacher
            2. StudentTeacher结果集的类型为 Student
            3. 学生中老师的属性为teacher,对应数据库中为tid。
               多个 [1,...)学生关联一个老师=> 一对一,一对多
            4. 查看官网找到:association – 一个复杂类型的关联;使用它来处理关联查询
    -->
    <select id="getStudents" resultMap="StudentTeacher">
      select * from student
    </select>
    <resultMap id="StudentTeacher" type="Student">
        <!--association关联属性  property属性名 javaType属性类型 column在多的一方的表中的列名-->
        <association property="teacher"  column="tid" javaType="Teacher" select="getTeacher"/>
    </resultMap>
    <!--
    这里传递过来的id,只有一个属性的时候,下面可以写任何值
    association中column多参数配置:
        column="{key=value,key=value}"
        其实就是键值对的形式,key是传给下个sql的取值名称,value是片段一中sql查询的字段名。
    -->
    <select id="getTeacher" resultType="teacher">
        select * from teacher where id = #{id}
    </select>
</mapper>

按结果嵌套处理

<mapper namespace="com.xflsh.mapper.TeacherMapper">
    <!--
    思路:
        1. 从学生表和老师表中查出学生id,学生姓名,老师姓名
        2. 对查询出来的操作做结果集映射
            1. 集合的话,使用collection!
                JavaType和ofType都是用来指定对象类型的
                JavaType是用来指定pojo中属性的类型
                ofType指定的是映射到list集合属性中pojo的类型。
          column在多的一方的表中的列名 --> <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=#{id} </select> <resultMap id="TeacherStudent" type="Teacher"> <result property="name" column="tname"/> <collection property="students" ofType="Student"> <result property="id" column="sid" /> <result property="name" column="sname" /> <result property="tid" column="tid" /> </collection> </resultMap> </mapper>

标签:name,private,id,tid,Mybatis,一对,teacher,select,中多
From: https://www.cnblogs.com/flsh/p/16632951.html

相关文章

  • mybatis报错UnsupportedOperationException
    1:问题描述mapper文件定义   xml写法   运行则报错Causedby:org.apache.ibatis.exceptions.PersistenceException:###Errorqueryingdatabase.Cau......
  • 如何获取Mybatis
    1.maven仓库<!--https://mvnrepository.com/artifact/org.mybatis/mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId>......
  • 什么是 MyBatis?
    1.MyBatis是一款优秀的持久层框架2.它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简......
  • MyBatis-特殊SQL的执行
    1. 通过用户名模糊查询用户信息SpecialSQLMapper.javapublicinterfaceSpecialSQLMapper{List<User>getUserByLike(@Param("mohu")Stringmohu);}SpecialSQ......
  • myBatis复习
     myBatis如何使用①maven导入包 <dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId>......
  • MyBatis-各种查询功能
    1.获取总记录数countSelectMapper.javapublicinterfaceSelectMapper{  /**   *查询用户的总数量   *@return   */  IntegergetCount......
  • MyBatis保姆级理解与使用,动态SQL(核心)
    1. 动态SQL(核心)1.1 简介Mybatis框架的动态SQL技术是一种根据特定条件动态拼装SQL语句的功能,它存在的意义是为了解决拼接SQL语句字符串时的难点问题。比如:我们在多条......
  • mybatis面试题
    mybatis中#{}和${}的区别是什么?#{}是预编译处理,会将sql中的#{}替换为?号防止sql注入${}是字符串替换。当实体类中的属性名和表中的字段名不一样,怎么办?......
  • springboot 多数据库并配置mybatis
    spring.datasource.titan-master.url=jdbc:mysql://X.X.X.X:port/titan?characterEncoding=UTF-8spring.datasource.titan-master.username=spring.datasource.titan-mas......
  • Springboot+MybatisPlus多数据源比对数据
    欢迎关注博主公众号「Java大师」,专注于分享Java领域干货文章https://www.javaman.cn/基于不同的数据源进行数据比对,比较两个数据库的表之间数据的总量,以及处理后的总......