Mybatis之旅第六篇-关联查询】的更多相关文章

一.引言 通过动态SQL我们可以进行复杂SQL的编写,但之前的例子都是单表查询,在实际开发中,当然不可能都是单表,很多时候我们需要进行关联多表查询(有些公司为了性能还是尽量的使用单表查询),表与表之间的关系分为一对一,一对多,多对多,我们讲讲这三种是如何编写的. 先进行表和实体的创建: CREATE TABLE `user` ( `id` ) NOT NULL AUTO_INCREMENT, `username` ) NOT NULL COMMENT '用户名称', `birthday` dat…
前面几节的示例基本都是一些单表查询,实际项目中,经常用到关联表的查询,比如一对一,一对多等情况.在Java实体对象中,一对一和一对多可是使用包装对象解决,属性使用List或者Set来实现,在mybatis中一对一和一对多可是使用association或者collection标签来配合实现. 在MyBatis中有两种方式实现关联查询: 1. 嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集.首先,然让我们来查看这个元素的属性.所有的你都会看到,它和普通的只由 select 和resultMap…
这里搞一个测试场景: 用户和订单,一位用户可以有多个订单,而每个订单只属于一位用户 以用户为中心,相对于订单:一对多 以订单为中心,当对于用户:一对一 两张表结构: 订单表: 用户表: 对应的POJO类: User: package pojo; import java.io.Serializable; import java.util.Date; import java.util.List; public class User implements Serializable { private…
关本文是Mybatis基础系列的第四篇文章,点击下面链接可以查看前面的文章: mybatis基础系列(三)——动态sql mybatis基础系列(二)——基础语法.别名.输入映射.输出映射 mybatis基础系列(一)——mybatis入门 关联查询 表设计时通常需要分析表与表的关联关系.数据库级别表与表之间的业务关系. 一对一查询 员工表和部门表之间的关系分析:一个员工只能属于一个部门. 需求:查询出员工编号为7369的员工信息和部门信息. sql语句: resultType映射 看看myba…
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS等: 本篇概览 本文是<MyBatis初级实战>系列的第五篇,从多表获取数据是个常见的场景,一般有以下两种方式: 联表查询:join操作,一次查询完成 多次查询:用第一次查询的结果作为条件,再做查询(MyBatis中叫做嵌套查询) 本篇的内容就是学习MyBatis对上述两种查询的支持,全文由以下章…
一.什么是事务 什么是事务(Transaction)?事务是数据库中的概念,是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit). 有个非常经典的转账问题:A向B转款1000元,A转出成功,扣除了A账户的1000元,但当系统准备向B账户增加1000元出现了故障,转入失败,但是A账户的金额已经扣除,这样的结果是A账户凭空少了1000元,很明显这样是不行的,正确的做法应该是当B账户增加成功后,A账户的扣款才能生效. 简单总结一句话就是:事务逻辑上的一组操作,组成这组操作的各个逻辑单元,…
大纲摘要: 1.输入映射和输出映射 a) 输入参数映射 b) 返回值映射 2.动态sql a) If b) Where c) Foreach d) Sql片段 3.关联查询 a) 一对一关联 b) 一对多关联 [更新]:延迟加载 一.输入映射和输出映射 1.输入映射 也就是day01提到的入参 parameterType 传递简单类型:见day01,这里不再赘述 传递POJO包装类型: 开发中通过pojo传递查询条件 ,查询条件是综合的查询条件, 不仅包括用户查询条件还包括其它的查询条件(比如将…
一对一关联 创建表和数据:创建一张教师表和班级表,这里假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name ) ); CREATE TABLE class( c_id INT PRIMARY KEY AUTO_INCREMENT, c_name ), teacher_id INT ); ALTER TABLE class ADD CONSTRA…
一.前言 刚换工作,为了更快的学习框架和了解业务,基本每天都会加班,导致隔了几天没有进行总结,心里总觉得不安,工作年限越长越感到学习的重要性,坚持下去!!! 经过前两篇的总结,已经基本掌握了mybatis的开发模式,这篇主要是总结SqlMapConfig.xml文件的配置 SqlMapConfig.xml中配置的内容和顺序如下: 配置内容 作用 properties 用来加载属性文件 settings 用来设置全局参数 typeAliases 用来设置类型的别名 typeHandlers 用来设…
首先  数据库量表之间字段关系(没有主外键) studentmajor表的id字段对应student表里major字段 两个实体类 package com.model; import java.util.Date; public class Student { private Integer sno; private String sname; private String ssex; private Integer sclass; private StudentMajor studentmaj…
一.引言 在之前的CRUD例子中,都是一些很简单的SQL,然而实际的业务开发中会有一些复杂的SQL,我们经常需要拼接SQL,拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号.Mybatis个一个强大特性--动态SQL,这一特性可以彻底摆脱这种痛苦. 二.if标签 现在有如下查询: <!-- 根据条件查询用户 --> <select id="queryUserByWhere" parameterType="user" resultT…
一.引言 在日常开发用到mybatis时,因为实际的开发业务场景很复杂,不论是输入的查询条件,还是返回的结果,经常是需要根据业务来定制,这个时候我们就需要自己来定义一些输入和输出映射 二.parameterType(输入映射) 输入映射是在映射文件中通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型,当我们去查询用户时,有些字段基本不会用作查询条件,还有一些时候我们需要连表查询,那么这个时候我们可以用到包装类. 新建pojo包,定义包装类:…
一.引言 SpringBoot的一大优势就是Starter,由于SpringBoot有很多开箱即用的Starter依赖,使得我们开发变得简单,我们不需要过多的关注框架的配置. 在日常开发中,我们也会自定义一些Starter,特别是现在微服务框架,我们一个项目分成了多个单体项目,而这些单体项目中会引用公司的一些组件,这个时候我们定义Starter,可以使这些单体项目快速搭起,我们只需要关注业务开发. 在此之前我们再深入的了解下SpringBoot启动原理.而后再将如何自定义starter. 二.…
package com.bjsxt.mapper; import org.apache.ibatis.annotations.Select; import com.bjsxt.pojo.Clazz; public interface ClazzMapper { @Select("select * from t_class where id=#{0}") Clazz selById(int id); } package com.bjsxt.mapper; import java.util…
目前分页支持单表 , ) where TEntity : class { ) * size; var _reset = Get(filter, orderBy); total = _reset.Count(); _reset = skipCount > ? _reset.Skip(skipCount).Take(size) : _reset.Take(size); return _reset.ToList(); } public IQueryable<TEntity> Get<TE…
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6923464.html 前面有将到:Spring+SpringMVC+MyBatis深入学习及搭建(五)--动态sql 1.商品订单数据模型 1.1数据模型分析思路 (1)每张表记录的数据内容 分模块对每张表记录的内容进行熟悉,相当于你学习系统需求(功能)的过程. (2)每张表重要的字段设置 非空字段.外键字段 (3)数据库级别表与表之间的关系 外键关系 (4)表与表之间的业务关系 在分析表与表之间的业务关…
1.需求: 查询所有订单信息及订单下的订单明细信息. 订单信息与订单明细为一对多关系. 2.      sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.o…
一对多的管理查询结果映射   1.进行一对多的查询时候,要在主查询表对应的Po中加入关联查询表对应PO的类的list集合作为属性. public class Orders { private Integer id; private Integer userId; private String number; private Date createtime; private String note; //订单明细 private List<Orderdetail> orderdetails; p…
1.一对多查询 1.1 需求 查询订单及订单明细的信息. 1.2 sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id FROM order…
在使用mybatis框架的时候,很多时候需要一个查询结果里的属性包含多个对象,即一条查询结果有属性是集合,这个时候就需要使用collection标签 模型里面有集合 案例: 第一步:在Orders中添加定单明细 第二步:Mapper接口 第三步:OrderMapper.xml<关键> resultMap中有个extends属性,可以继承 Collection元素中使用的是ofType而不是javaType 第四步:测试 总结 mybatis使用resultMap的collection对关联查询…
一.订单商品数据模型 1.数据库执行脚本 创建数据库表代码: /*Table structure for table `t_user` */ CREATE TABLE t_user ( id INT NOT NULL AUTO_INCREMENT, username ) NOT NULL COMMENT '用户名称', birthday DATE DEFAULT NULL COMMENT '生日', sex ) DEFAULT NULL COMMENT '性别', address ) DEFAU…
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_二   传送门 JavaWeb_(Mybatis框架)Mapper动态代理开发_三  传送门 JavaWeb_(Mybatis框架)主配置文件介绍_四    传送门 JavaWeb_(Mybatis框架)输入和输出参数_五  传送门 JavaWeb_(Mybatis框架)关联查询_六传送门 传送门…
1.数据准备 2.编写实体类 package com.forest.owl.entity; import java.util.Date; public class User { private Long id; private String userName; private String userPassword; private String userPhone; private String userEmail; private byte[] headImg; private Date c…
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS等: 本篇概览 本文是<MyBatis初级实战>系列的第六篇,继续实践从多表获取数据: 回顾上一篇,咱们实战了多表关联的一对一关系,如下图所示,查找日志记录时,把对应的用户信息查出: 本篇要实践的是一对多关系:查询用户记录时,把该用户的所有日志记录都查出来,逻辑关系如下图: 在具体编码实现一对多查…
上一篇文章介绍了基于Mybatis对数据库的增.删.改.查.这一篇介绍下关联查询(join query). 三张表:user article blog 表的存储sql文件: /* Navicat MySQL Data Transfer Source Server : localhost Source Server Version : 50620 Source Host : localhost:3306 Source Database : mybatis Target Server Type :…
先说下问题产生的背景: 最近在做一个用到MyBatis的项目,其中有个业务涉及到关联查询,我是将两个查询分开来写的,即嵌套查询,个人感觉这样更方便重用: 关联的查询使用到了动态sql,在执行查询时就出现了如下错误:Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'id' in 'class java.lang.Integer' 因为出现了这个问题,…
注:这篇文章的代码有部分删减,不能直接使用,不过关键代码都存在  应用场景: 想用mybatis做关联查询,并且把查询出的数据自动组装成对象可以使用关联查询. 1.一对一实现 例如:一部小说,属于一个分类,查询小说的时候想同时查询出所属分类. 1)实体定义: public class Book { private static final long serialVersionUID = 1L; /** *小说ID */ private Integer bookId; /** *作者 */ pri…
前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性. 搭建开发环境 创建表author.表blog,构建一对多的查询场景. 创建author.blog model.author类中主要是添加属性List<Blog> blogs属性. public class Author { private int id; private String name; priv…
MyBatis从入门到放弃四:一对多关联查询 前言 上篇学习了一对一关联查询,这篇我们学习一对多关联查询.一对多关联查询关键点则依然是配置resultMap,在resultMap中配置collection属性,别忽略了ofType属性. 搭建开发环境 创建表author.表blog,构建一对多的查询场景. 创建author.blog model.author类中主要是添加属性List<Blog> blogs属性. public class Author { private int id; pr…
前言 实际开发项目中,很少是针对单表操作,基本都会联查多表进行操作,尤其是出一些报表的内容.此时,就可以使用Mybatis的关联查询还有动态SQL.前几篇文章已经介绍过了怎么调用及相关内容,因此这里只说明核心内容SQL映射文件的配置. 一对一关联 <association /> JavaType是用来指定pojo中属性的类型此处采用两种方式进行关联查询,一种是嵌套结果,一种是嵌套查询. <!-- 根据班级id查询班级和教师信息 --> <select id="get…