使用mybatis进行多表联查

一.使用mybatis的基本步骤

1.导入jar包

2.配置文件

3.使用配置文件完成操作

二.实战演习

    需求:教师表里有教师id和教师姓名 学生表里有学生id,姓名,年龄,教师id

     一个教师有多个学生,一个学生只有一个教师,现在需要显示学生表的学生信息和教师姓名

1.导入jar包

2.导入配置文件,mybatis和log4j都是写了一次以后随便用

这些都是写死了的,直接配好即可

三.开始多表联查

1.业务装配方式,分为两步,

1.1查询所有的学生,

1.2根据学生的tid得到教师的信息存入学生类中

得到结果为

完成.这是简化版的,直接在test类中显示得到的数据,本来应该写在业务层,传给控制层,在视图层显示

2.ResultMapper n+1方式

上面的写法很好理解,但是很繁琐,需要写两遍sql语句

而使用ResultMapper 可以在查询student时跳转至查询teacher语句.一句搞定

用到的类有Teacher中的selTeaByTid Student类中的selStuRm.其意义为,查询所有学生,根据注入的属性跳转到根据tid查询所有的教师,association标签表示学生和老师是一对一关系.学生是主语.

如果是根据教师来查学生,就是一对多关系,使用的标签就是collection.意义都是一样的,就是带着值跳转到执行语句

这个方法其实也使用了两句sql语句

还是两次单表查询,访问数据库2次

3.联合查询

其实和上面一样,只是sql语句不再是单表查询了,而是双标联查.ResultMapper也不再是跳转,而是将两个表都拿来做操作

在association内再添加联合查询的另一个表.得到相同的结果

回过头来看,ResultMapper n+1方式不如业务装载方式直观,不如联合查询访问次数少,是个中间的存在

在sql语句使用熟练的情况下,还是选联合查询好...

原文地址:https://www.cnblogs.com/waibangma/p/11358385.html

时间: 2024-10-10 00:49:59

使用mybatis进行多表联查的相关文章

mybatis.net 多表联查

mybatis.net针对多表联查,其实不用讲联查出的所有的列全部做一个新的resultMap,我们完全可以通过集成关系来实现,真是上一次说的懒加载,在一定程度上可以提高其性能,但这并不是说懒加载性能一定就差,他有其自己的用途,比如我们只需要查询主表的一条记录,但是在从表中却有1000条记录,就比较适合用懒加载. 参见http://www.cnblogs.com/zuolijun/p/5443823.html <resultMap id="teamMemberPermissionDocto

使用Mybatis进行多表联查操作

(1)增加一个测试数据库shop_order,sql语句如下: CREATE DATABASE `shop_order`; USE `shop_order`; CREATE TABLE `t_user` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `username` VARCHAR(20) DEFAULT NULL, `password` VARCHAR(50) DEFAULT NULL, `sex` VARCHAR(2) DEFAULT NULL, `br

使用mybatis多表联查的时候结果异常及springmvc的理解

今天使用mybatis多表联查的时候,在dos窗口查询时可以出结果集,但是使用mybatis查询的时候最后返回的结果只有最后一个结果 然后研究了半天没弄出来,后来无意中发现添加了最外层从表的ID字段后结果就查出来了,由此可见,数据是由主键来区分的,当主键不在查询范围时,数据默认调用最后一条语句 另外使用springmvc时无法使用实例化service对象,会报空指针异常

MyBatis(四)关于多表联查 关联关系之一--------一对多(单条sql语句查询)

在MyBatis中,进行多表联查时关联关系主要有这几种:一对多,多对一,多对多,还有一种自关联 1.一对多:有两种方式 (1)用一条sql语句进行查询    (以查询部门和员工为案例) 首先创建实体类 package entity; import java.util.List; /** * Created by mycom on 2018/2/26. */ public class Dept {//部门 private Integer deptNo; private String deptNam

SpringBoot整合mybatis多表联查之数据库建表

1.各关联表尽量不要使用相同的字段.因为在多表联查时,如果出现相同的字段,数据库自动使这些相同字段的值相等. 比如说,订单表有一个表示订单状态的status字段,而它的外键关联的表car有一个表示车状态的status字段,这两个status表示的含义完全不一样,但因为两个status字段一样,数据库默认将他们的值相等,导致数据失真. 2.在mapper.xml文件中使用的sql语句,应先在数据库测试成功后才使用. 3.在运行整个项目之前,应先对各个mapper,service,controlle

五表联查sql和复选框 增删改查

这是五表联查的效果图,如果这个不明显,那么用添加说话 这样就明显了把 这个送餐时间和地点,都是一对多的,那么这个菜单就是多对多,其实对于老鸟来说没有什么大不了,但是对于新手,我希望还是可以有点帮助的,这个是用Mybatis写的 首先我们先把sql给贡献出来,或许有些丑,不过,这反正也是给自己写的随笔无所谓了 select a.*,b.fname from    (select a.*,c.aname from (select a.*,b.name tname from    t_order a,

MVC +EF+linq 多表联查

关于linq的多表联查效果的实现: 后台多表查询  内连接: SELECT [Extent2].[partID] AS [partID], [Extent1].[userName] AS [userName], [Extent3].[partName] AS [partName]FROM [dbo].[User] AS [Extent1]INNER JOIN [dbo].[User_partB] AS [Extent2] ON [Extent1].[userGUID] = [Extent2].[

CDH中,执行HIVE脚本表联查权限问题。。

文章来自http://www.cnblogs.com/hark0623/p/4174641.html 转发请注明 有时候执行表联查的时候总会出现没有权限写文件的情况. 这个时候使用sudo -H hive hive -e "select * from tbl1 join tbl2 on tbl1.field = tbl2.field"即可

Mybatis自动创建表/更新表结构

最近有小伙伴问我mybatis有没有自动创建表结构的功能,因为他们之前一直使用hibernate用习惯了,理所当然的认为,在实体类上配置下注解或者写写映射文件,系统启动后就可以自动创建表. 我只能很遗憾的告诉他,mybatis并没有这个功能,看他兴致阑珊的样子,我只能安慰他,就算没有这功能,我们可以自己开发啊~~ 所以就有了下面这套系统,已开源大家可以下来看看~~ Mybatis_BuildTable_V0.2 https://git.oschina.net/sunchenbin/Mybatis