MyBatis如何实现多表查询

先说结论,在MyBatis中我们有两种方式来实现多表查询

一、使用sqlmapper配置文件

二、使用注解

直入主题首先我们来看如何使用配置文件的方式来实现一对一,和一对多查询

首先我们有教师表和课程表,这里我们假定:一个课程可以有多个老师(一对多),一个老师只教一门课程(一对一)

课程表

教师表

先来看一对一怎么写

在实体类中我们需要创建一个 课程类型的外部属性

public class Teacher {private int tid;private String tname;private String tsex;private Date tbirthday;private String taddress;private String temail;private String tmoney;private int cid;//外部属性private Course course;
}

TeacherMapper.xml

这里在ResultMap标签中使用association标签来建立一对一的映射关系

<mapper namespace="com.day4.mapper.TeacherMapper"><!-- 类路径 --><resultMap id="Teahcer_Scoure_Map" type="Teacher"><result property="tid" column="tid"/><result property="tname" column="tname"/><result property="tbirthday" column="tbirthday"/><result property="tsex" column="tsex"/><result property="taddress" column="taddress"/><result property="temail" column="temail"/><result property="tmoney" column="tmoney"/><result property="cid" column="cid"/><association property="course"  ><result column="cid" property="cid"/><result column="cname" property="cname"/></association></resultMap><select id="FindAllTeacherbysqlmapper" resultMap="Teahcer_Scoure_Map">select * from course inner join teacheron teacher.cid = course.cid</select></mapper>

结果:

一对多

我们需要在课程的实体类中创建一个老师类型的集合

public class Course {private int cid;private String cname;//外部属性private List<Teacher> tlsit;}

CourseMapper.xml

这里在ResultMap标签中使用collection标签来建立一对多的映射关系

<mapper namespace="com.day4.mapper.CourseMapper"><!-- 类路径 --><resultMap id="Teahcer_Scoure_Map" type="course"><result column="cid" property="cid"/><result column="cname" property="cname"/><collection property="tlsit" ofType="Teacher" ><result property="tid" column="tid"/><result property="tname" column="tname"/><result property="tbirthday" column="tbirthday"/><result property="tsex" column="tsex"/><result property="taddress" column="taddress"/><result property="temail" column="temail"/><result property="tmoney" column="tmoney"/></collection></resultMap><select id="FindAllCoursebysqlmapper" resultMap="Teahcer_Scoure_Map">select * from teacher inner join courseon teacher.cid = course.cid</select></mapper>

结果:

使用注解的方式

同样我们需要在Teacher实体类中创建一个课程类型的外部属性

Teacher.java

public class Teacher {private int tid;private String tname;private String tsex;private Date tbirthday;private String taddress;private String temail;private String tmoney;private int cid;//外部属性private Course course;
}

TeacherMapper接口
使用@Results完成数据库字段和JavaBean属性的映射@Results中可以包含多个@Result

    @Results({@Result (column="cid" ,property="cid"),@Result( column="cid" ,property="course",<!-- @One 实现一对一-->one=@One(select = "com.day4.mapper.CourseMapper.FindAllCoursebyid"))})@Select("select * from teacher")public List<Teacher> FindAllTeacher();

CourseMapper接口

    @Select("select * from course where cid = #{v}")public Course FindAllCoursebyid(int v);

结果:

一对多

Course.java实体类

public class Course {private int cid;private String cname;private int tid;private List<Teacher> tlsit;
}

TeacherMapper.java实体类

 @Select("select * from teacher where cid = #{v}")public Teacher FindAllTeacherbyid(int cid);

CourseMapper接口

    @Results({@Result (column="cid" ,property="cid"),@Result( column="cid" ,property="tlsit",<!-- @Many 实现一对多-->many=@Many(select = "com.day4.mapper.TeacherMapper.FindAllTeacherbyid"))})@Select("select * from course")public List<Course> FindAllCourser();

结果:

MyBatis如何实现多表查询相关推荐

  1. mybatis 多表关联查询_Java修行第041天--MyBatis框架(下)--多表查询

    1 解决列名和属性名不一致问题 如果查询时使用 resultType 属性, 表示采用 MyBatis 的Auto-Mapping(自动映射)机制, 即相同的列名和属性名会自动匹配. 因此, 当数据库 ...

  2. MyBatis动态SQL_多表查询_延迟加载_缓存

    POJO包装传递对象 //POJO实体 public class QueryConditionObject {private User user;//user get,set方法 }//Dao 接口 ...

  3. mybatis中的多表查询

    首先我们先创建两个表和pojo用来演示多表查询,如下: 用户表:t_emp表,其中emp_id为自增主键. t_emp对应的pojo:Employee public class Employee {p ...

  4. MyBatis如何实现多表查询(一对一、一对多)

    Mybatis实现多表的查询分为以下两种: 方式一:sqlMapper配置文件 一对一:在resultMap标签中使用 association 标签 一对多:在resultMap 标签中使用colle ...

  5. 《Mybatis实现数据库多表查询》——————多对一

    1.准备工作 1.1数据库准备 在数据库中建立员工表(t_emp)和部门表(t_dept) Idea准备 项目目录结构 1.2.1pom.xml <?xml version="1.0& ...

  6. Mybatis入门:4(多表查询操作)

    多表查询操作 Mybatis的多表操作 表之间的关系有几种:一对多.一对一.多对一.多对多 举例: 用户和订单就是一对多--一个用户可以下多个订单 订单和用户就是多对一--多个订单属于同一个用户 人和 ...

  7. 7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)

    视频地址:http://edu.51cto.com/sd/be679 在Mybatis中的管理表查询这里主要介绍的是一对一和一对多的关联查询的resultMap的管理配置查询,当然你也可以用包装类来实 ...

  8. 修改 连接层_Mybatis连接池_动态sql语句_多表查询实现

    Mybatis连接池 Mybatis中的连接池Mybatis连接池提供了3种方式的配置:配置的位置:主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种 ...

  9. 多表查询,字段名重复问题解决

    mybatis在进行多表查询的时候遇到多表有重复的列名,会导致查询的结果有误,少赋值,或者错赋值等问题. 尽量减少列名重复,无法避免时可以给列名起别名,用resultMap中的column属性值就是你 ...

最新文章

  1. 关于共用体所占的内存空间的问题
  2. Mybatis中的模糊查询
  3. Linux学习笔记:Linux分区
  4. Sql Server 关于整表插入另一个表部分列的语法以及select 语句直接插入临时表的语法 (转帖)...
  5. 本地缓存之Guava简单使用
  6. Trie 树是什么样的数据结构?有哪些应用场景?
  7. Hibernate day01
  8. php苹果app微信支付 无法返回,微信支付,php_微信支付APP返回-1怎么解决,微信支付,php,移动app - phpStudy...
  9. vue 中引入使用jquery
  10. python控制风扇_如何使用Python在raspberrypi3上使用GPIO控制风扇?
  11. avc水平什么意思_avc是什么意思(pvc是什么材质)
  12. matlab 产生瑞利信道,瑞利信道仿真 matlab
  13. Linux下ls、vi命令失效的解决办法
  14. 如何区分网线是几类的_网线怎么区分是几类的
  15. 5千字长文:KeePass完全入门指南(附已经配置好的版本)
  16. win7重装的那些事儿
  17. CSMA/CD协议详解
  18. 一个由两个长的如此相像的字引起的问题
  19. 在Oracle中,如何得到真实的执行计划?
  20. 基于脱敏数据,使用huggingface的Transformers预训练模型

热门文章

  1. 自定义一个求平均值函数
  2. 自媒体、电商、网赚是否过了红利期?你常见的网赚是不是骗局?
  3. linux修改登录密码
  4. App Store “我们未能完成您的购买”解决方法_Mac
  5. C/C++用宏定义函数
  6. Flyway migration 问题
  7. 现象级存在的百度之星2020:看百度重仓的AI人才培养计划
  8. html舞动特效,7款纯CSS3实现的炫酷动画应用
  9. 功能测试常用6种方法_画册封面设计的6种常用形式
  10. python连接高斯数据库