MyBatis如何实现多表查询
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如何实现多表查询相关推荐
- mybatis 多表关联查询_Java修行第041天--MyBatis框架(下)--多表查询
1 解决列名和属性名不一致问题 如果查询时使用 resultType 属性, 表示采用 MyBatis 的Auto-Mapping(自动映射)机制, 即相同的列名和属性名会自动匹配. 因此, 当数据库 ...
- MyBatis动态SQL_多表查询_延迟加载_缓存
POJO包装传递对象 //POJO实体 public class QueryConditionObject {private User user;//user get,set方法 }//Dao 接口 ...
- mybatis中的多表查询
首先我们先创建两个表和pojo用来演示多表查询,如下: 用户表:t_emp表,其中emp_id为自增主键. t_emp对应的pojo:Employee public class Employee {p ...
- MyBatis如何实现多表查询(一对一、一对多)
Mybatis实现多表的查询分为以下两种: 方式一:sqlMapper配置文件 一对一:在resultMap标签中使用 association 标签 一对多:在resultMap 标签中使用colle ...
- 《Mybatis实现数据库多表查询》——————多对一
1.准备工作 1.1数据库准备 在数据库中建立员工表(t_emp)和部门表(t_dept) Idea准备 项目目录结构 1.2.1pom.xml <?xml version="1.0& ...
- Mybatis入门:4(多表查询操作)
多表查询操作 Mybatis的多表操作 表之间的关系有几种:一对多.一对一.多对一.多对多 举例: 用户和订单就是一对多--一个用户可以下多个订单 订单和用户就是多对一--多个订单属于同一个用户 人和 ...
- 7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)
视频地址:http://edu.51cto.com/sd/be679 在Mybatis中的管理表查询这里主要介绍的是一对一和一对多的关联查询的resultMap的管理配置查询,当然你也可以用包装类来实 ...
- 修改 连接层_Mybatis连接池_动态sql语句_多表查询实现
Mybatis连接池 Mybatis中的连接池Mybatis连接池提供了3种方式的配置:配置的位置:主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种 ...
- 多表查询,字段名重复问题解决
mybatis在进行多表查询的时候遇到多表有重复的列名,会导致查询的结果有误,少赋值,或者错赋值等问题. 尽量减少列名重复,无法避免时可以给列名起别名,用resultMap中的column属性值就是你 ...
最新文章
- 关于共用体所占的内存空间的问题
- Mybatis中的模糊查询
- Linux学习笔记:Linux分区
- Sql Server 关于整表插入另一个表部分列的语法以及select 语句直接插入临时表的语法 (转帖)...
- 本地缓存之Guava简单使用
- Trie 树是什么样的数据结构?有哪些应用场景?
- Hibernate day01
- php苹果app微信支付 无法返回,微信支付,php_微信支付APP返回-1怎么解决,微信支付,php,移动app - phpStudy...
- vue 中引入使用jquery
- python控制风扇_如何使用Python在raspberrypi3上使用GPIO控制风扇?
- avc水平什么意思_avc是什么意思(pvc是什么材质)
- matlab 产生瑞利信道,瑞利信道仿真 matlab
- Linux下ls、vi命令失效的解决办法
- 如何区分网线是几类的_网线怎么区分是几类的
- 5千字长文:KeePass完全入门指南(附已经配置好的版本)
- win7重装的那些事儿
- CSMA/CD协议详解
- 一个由两个长的如此相像的字引起的问题
- 在Oracle中,如何得到真实的执行计划?
- 基于脱敏数据,使用huggingface的Transformers预训练模型