06.Mybatis关联查询
1.一对一关联查询
需求:查询出每条orders记录和其关联的user信息
在orders实体类中添加属性与set、get方法
/** * 测试1对1关联查询 */ private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; }
接口:
public interface OrdersMapper { /** * 测试1对1关联查询 */ public List<Orders> findAllOrdersCNUser(); }
映射:
<!-- 1对1的返回map 不能省略映射,必须把所有想要查询出来的属性都手动映射 --> <resultMap type="Orders" id="orders"> <id property="id" column="id"/> <result property="userId" column="user_id"/> <result property="number" column="number"/> <result property="createtime" column="createtime"/> <result property="note" column="note"/> <!-- 1对1属性 --> <!-- javaType必须写!! --> <association property="user" javaType="user"> <id property="id" column="id"/> <result property="username" column="username"/> <result property="sex" column="sex"/> <result property="birthday" column="birthday"/> <result property="address" column="address"/> </association> </resultMap> <!-- 测试一对1关联查询 --> <select id="findAllOrdersCNUser" resultMap="orders"> select * from orders o left join user u on o.user_id=u.id </select>
测试:
/** * 1对1关联查询 */ @Test public void m01() { // 获取sqlSession,和Spring整理后由Spring管理 SqlSession sqlSession = this.sqlSessionFactory.openSession(); // 从sqlSession中获取Mapper接口的代理对象 OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class); // 执行查询 List<Orders> list = ordersMapper.findAllOrdersCNUser(); for (Orders orders : list) { System.out.println(orders); System.out.println(orders.getUser()); } // 和Spring整理后由Spring管理 sqlSession.close(); }
2.一对多关联查询
需求:查询出所有的user和与其对应的orders信息
在user实体类中添加属性和set、get方法
/** * 测试1对多 */ List<Orders> ordersList; public List<Orders> getOrdersList() { return ordersList; } public void setOrdersList(List<Orders> ordersList) { this.ordersList = ordersList; }
接口:
/** * 测试1对多 */ public List<User> findAllUserCNOrders();
映射:
<!-- 1对多返回映射 --> <resultMap type="User" id="user"> <id property="id" column="id" /> <result property="username" column="username" /> <result property="sex" column="sex" /> <result property="birthday" column="birthday" /> <result property="address" column="address" /> <!-- javaType && ofType必须写!! --> <collection property="ordersList" javaType="List" ofType="Orders"> <id property="id" column="id" /> <result property="userId" column="user_id" /> <result property="number" column="number" /> <result property="createtime" column="createtime" /> <result property="note" column="note" /> </collection> </resultMap> <!-- 测试1对多 --> <select id="findAllUserCNOrders" resultMap="user"> select * from user u left join orders o on u.id = o.user_id </select>
测试:
/** * 测试1对多 */ @Test public void m01() { // 获取sqlSession,和Spring整理后由Spring管理 SqlSession sqlSession = this.sqlSessionFactory.openSession(); // 从sqlSession中获取Mapper接口的代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 执行查询 List<User> list = userMapper.findAllUserCNOrders(); for (User user : list) { System.out.println(user); System.out.println(user.getOrdersList()); } // 和Spring整理后由Spring管理 sqlSession.close(); }
06.Mybatis关联查询的更多相关文章
- Mybatis关联查询和数据库不一致问题分析与解决
Mybatis关联查询和数据库不一致问题分析与解决 本文的前提是,确定sql语句没有问题,确定在数据库中使用sql和项目中结果不一致. 在使用SpringMVC+Mybatis做多表关联时候,发现也不 ...
- MyBatis基础:MyBatis关联查询(4)
1. MyBatis关联查询简介 MyBatis中级联分为3中:association.collection及discriminator. ◊ association:一对一关联 ◊ collecti ...
- MyBatis关联查询,一对多关联查询
实体关系图,一个国家对应多个城市 一对多关联查询可用三种方式实现: 单步查询,利用collection标签为级联属性赋值: 分步查询: 利用association标签进行分步查询: 利用collect ...
- mybatis 关联查询实现一对多
场景:最近接到一个项目是查询管理人集合 同时每一个管理人还存在多个出资人 要查询一个管理人列表 每个管理人又包含了出资人列表 采用mybatis关联查询实现返回数据. 实现方式: 1 .在实体 ...
- MyBatis关联查询、多条件查询
MyBatis关联查询.多条件查询 1.一对一查询 任务需求; 根据班级的信息查询出教师的相关信息 1.数据库表的设计 班级表: 教师表: 2.实体类的设计 班级表: public class Cla ...
- Mybatis关联查询之二
Mybatis关联查询之多对多 多对多 一.entity实体类 public class Student { private Integer stuid; private String stuname ...
- mybatis关联查询基础----高级映射
本文链接地址:mybatis关联查询基础----高级映射(一对一,一对多,多对多) 前言: 今日在工作中遇到了一个一对多分页查询的问题,主表一条记录对应关联表四条记录,关联分页查询后每页只显示三条记录 ...
- MyBatis关联查询和懒加载错误
MyBatis关联查询和懒加载错误 今天在写项目时遇到了个BUG.先说一下背景,前端请求更新生产订单状态,后端从前端接收到生产订单ID进行查询,然后就有问题了. 先看控制台报错: org.apache ...
- Mybatis关联查询(嵌套查询)
上一篇文章介绍了基于Mybatis对数据库的增.删.改.查.这一篇介绍下关联查询(join query). 三张表:user article blog 表的存储sql文件: /* Navicat My ...
随机推荐
- 如何设置linux启动过程中的停止阶段
设置方法: 1 启动过程中点击“e”键(fedora)或者"tab"(centOS)键进入目标启动项的命令行参数下,移除initrd所在行末尾的"quiet" ...
- 为什么Netty这么火?与Mina相比有什么优势?
Netty是什么?为什么这么火? Netty是目前最流行的由JBOSS提供的一个Java开源框架NIO框架,Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服 ...
- java-day22
数据库设计的范式 * 概念:设计数据库时,需要遵循的一些规范.要遵循后边的范式要求,必须先遵循前边的所有范式要求 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不 ...
- 利用MySqlBulkLoader生成csv文件,批量添加数据
DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("Yw ...
- 看了Google编码规范,我突然有个感觉
那么个编码规范,充分体现了西方人的自我感觉良好,以及以自己为中心的程度, 以及西方人对待事物的双重标准.
- 前端实现预览ppt,word,xls,pdf文件
1.前端实现pdf文件在线预览功能 ps:刚好工作上有这个需求,所以到处找了一下处理方案,大家有需要可以试一下这几种方案,找到合适自己的 方式一. pdf文件理论上可以在浏览器直接打开预览但是需要打开 ...
- Spring BeanName生成规则
1. XML方式 <bean class="com.fishblog.service.UserService"></bean> beanName: com. ...
- Failed selinux 错误
再看他如何解决,步骤大概是: 1.开机之后进入linux启动选择界面,停在平时启动的哪那一行按E键,进入grub编辑页面. 2.按↓键光标往下移,在标签fi下面的内容里加上一个enforcing=0. ...
- BIO、NIO和AIO
BIO(Blocking I/O)同步阻塞I/O 这是最基本与简单的I/O操作方式,其根本特性是做完一件事再去做另一件事,一件事一定要等前一件事做完,这很符合程序员传统的顺序来开发思想,因此BIO模型 ...
- react 使用react-router-dom 在Route对象上component 参数接收的是一个方法而非一个对象
其实对于jsx语法 一直觉的它有点清晰都不是很好,js和html混在一起有点不伦不类的样子,以下是我在使用react中遇到的一个很奇葩的事情 假定你定义了一个component Mine import ...