精华内容
下载资源
问答
  • 业务装配实现多表查询(多对一)mapper 层只做单表查询操作, 在 service 层进行手动装配,实现关联查询的结果.实体类创建班级类(Clazz)和学生类(Student), 并在 Student 中添加一个 Clazz 类型的属性, 用于表示学生的...

    业务装配实现多表查询(多对一)

    mapper 层只做单表查询操作, 在 service 层进行手动装配,实现关联查询的结果.

    实体类

    创建班级类(Clazz)和学生类(Student), 并在 Student 中添加一个 Clazz 类型的属性, 用于表示学生的班级信息.

    ac503abbae116faf89854067efabca96.png

    mapper 层

    提供 StudentMapper 和 ClazzMapper, StudentMapper 查询所有学生信息, ClazzMapper 根据编号查询班级信息.

    <mapper 

    service 层

    调用 mapper 层, 先查询所有学生, 再根据每个学生的班级编号查询班级信息, 手动进行组装, 称之为业务装配.

    public 

    测试代码

    public 

    resultMap的N+1方式实现多表查询(多对一)

    实体类

    创建班级类(Clazz)和学生类(Student), 并在 Student 中添加一个 Clazz 类型的属性, 用于表示学生的班级信息.

    mapper 层

    提供 StudentMapper 和 ClazzMapper, StudentMapper 查询所有学生信息, ClazzMapper 根据编号查询班级信息. 再StudentMapper 中使用<association>设置装配.

    <association>用于关联一个对象

    1. property: 指定要关联的属性名
    2. select: 设定要继续引用的查询, namespace+id
    3. column: 查询时需要传递的列
    <mapper 

    service 层

    由于装配已经完成, service 层只需要调用 mapper 即可, 不需要再进行装配了.

    public 

    resultMap 的关联方式实现多表查询(多对一)

    mapper 层

    a)在 StudentMapper.xml 中定义多表连接查询 SQL 语句, 一次性查到需要的所有数据, 包括对应班级的信息.

    b)通过<resultMap>定义映射关系, 并通过<association>指定对象属性的映射关系. 可以把<association>看成一个<resultMap>使用. javaType 属性表示当前对象, 可以写全限定路径或别名.

    ofType 属性表示集合的泛型, 可以写全限定路径或别名

    关联集合对象---关联集合 : <association property="clazz" select="com.bjsxt.mapper.ClazzMapper.selById" column="cid"></association>

    <resultMap 

    resultMap的N+1方式实现多表查询(一对多)

    实体类

    在班级类中定义一个学生集合, 用于存放该班级的所有学生信息

    mapper 层

    提供 ClazzMapper 和 StudentMapper, ClazzMapper 查询所有班级信息, StudentMapper 根据班级编号查询学生信息.在 ClazzMapper 中使用<collection>设置装配.

    a)<collection>用于关联一个集合

    • property: 指定要关联的属性名
    • select: 设定要继续引用的查询, namespace+id
    • column: 查询时需要传递的列
    <mapper 

    resultMap的关联方式实现多表查询(一对多)

    在 ClazzMapper.xml 中定义多表连接查询 SQL 语句, 一性查到需要的所有数据, 包括对应学生的信息.

    通过<resultMap>定义映射关系, 并通过<collection>定集合属性泛型的映射关系. 可以把<collection>看成一个<resultMap>使用. ofType 属性表示集合的泛型, 可以写全限定路径或别名.

    <mapper 

    通过 Auto-Mapping 实现多表查询

    通过 MyBatis 的 Auto-Mapping 机制及数据库查询时的别名结合, 可以方便的实现多表查询.

    SQL 语句中, 别名出现特殊符号时, 必须进行处理. MySQ可以使用(``)符号, Oracle 可以使用("")符号.

    <mapper 

    注解开发

    a)注解是用于描述代码的代码. 例如: @Test(用于描述方法进行 junit 测试), @Override(用于描述方法的重写),@Param(用于描述属性的名称)

    注解的使用风格: @xxx(属性), 使用前必须先导包

    使用注解一般用于简化配置文件. 但是, 注解有时候也不是很友好(有时候反而更麻烦), 例如动态 SQL.

    关于注解的属性:属性的设定方式是: 属性名=属性值

    关于属性值的类型

    • 基本类型和 String, 可以直接使用双引号的形式
    • 数组类型, name={值 1, 值 2, ...}; 如果数组元素只有一个, 可以省略大括号
    • 对象类型, name=@对象名(属性)
    • 如果属性是该注解的默认属性, 而且该注解只配置这一个属性, 可以将属性名省略

    注解和配置文件可以配合使用

    MyBatis 中常用的注解

    • @Select: 类似于<select>
    • @Insert: 类似于<insert>
    • @Update: 类似于<update>
    • @Delete: 类似于<delete>
    @Select

    其他注解

    • @Results: 类似于<resultMap>
    • @Result: 类似于<resultMap>的子标签
    • @One: 类似于<association>
    • @Many: 类似于<collection>
    public 
    展开全文
  • 示例A:author_idauthor_name1Kimmy2Abel3Bill4Berton示例B:book_idauthor_idstart_dateend_date912017-09-25 21:16:042017-09-25 21:16:061031122017-09-25 21:21:462017-09-25 21:21:47121138示例C:order_id...

    e975453dbf16604d84846f36dcd65d40.png

    示例表A:

    author_idauthor_name
    1Kimmy
    2Abel
    3Bill
    4Berton

    示例表B:

    book_idauthor_idstart_dateend_date
    912017-09-25 21:16:042017-09-25 21:16:06
    103
    1122017-09-25 21:21:462017-09-25 21:21:47
    121
    138

    示例表C:

    order_idbook_idpriceorder_date
    190.22017-09-24 21:21:46
    290.62017-09-25 21:16:04
    3110.12017-09-25 21:21:46

    在以上表中执行AB表关联

    SELECT `authors`.*, `books`.book_id FROM `authors`
    LEFT JOIN `books` ON `authors`.author_id = `books`.author_id

    结果

    author_idauthor_namebook_id
    1Kimmy9
    3Bill10
    2Abel11
    1Kimmy12
    4Berton

    结果出现了2条author_id为1的记录,因为右表中存在了两条关联author_id=1的行

    右边出现N条关联左边的记录,结果就会相应出现N条关联了右表出现的记录

    在以上表中执行ABC表关联

    SELECT `authors`.*, `books`.book_id, `orders`.order_id, `orders`.price FROM `authors`
    LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
    LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id

    结果

    author_idauthor_namebook_idorder_idorder_price
    1Kimmy910.2
    1Kimmy920.6
    2Abel1130.1
    3Bill10
    1Kimmy12
    4Berton

    结果出现了3条author_id=1的记录,因为authors第一次关联了books表book_id为9和12的book关联了author_id为1的作者,而book_id为9的书本则关联了两个orders记录,所以结果集包含3条author_id为1的记录

    64ab54fd7410eda0c913c0abc46f518e.png

    可以运用

    count(),sum()

    等函数通过

    group by

    来统计结果

    SELECT `authors`.*, sum(`orders`.price) FROM `authors`
    LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
    LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id
    GROUP BY `books`.book_id

    结果集会基于book_id来统计每一本书的订单总额

    author_idauthor_namebook_idsum(order_price)
    4Berton
    1Kimmy90.80
    3Bill10
    2Abel110.10
    1Kimmy12

    book_id为9的订单总额为0.80,并且9的记录从多条合并为1条。

    多条件join

    SELECT `authors`.*, `books`.book_id, `orders`.order_id, sum(`orders`.price) FROM `authors`
    LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
    LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id AND `orders`.order_date >= `books`.start_date AND `orders`.order_date <= `books`.end_date
    GROUP BY `books`.book_id

    选取在一定时间区间范围内的order订单,可以看到订单order_id为1的订单不再纳入book_id为9的统计当中,因为它的时间区间不符合join条件

    author_idauthor_namebook_idorder_idsum(`order`.price)
    4Berton
    1Kimmy920.60
    3Bill10
    2Abel1130.10
    1Kimmy12

    关于where的使用,看下面示范

    SELECT `authors`.*, `books`.book_id, `orders`.order_id, sum(`orders`.price) AS prices FROM `authors`
    LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
    LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id AND `orders`.order_date >= `books`.start_date AND `orders`.order_date <= `books`.end_date
    WHERE prices is not NULL
    GROUP BY `books`.book_id

    以上语句假设选取price不为空的记录,导致了一个错误的出现

    [Err] 1054 - Unknown column 'prices' in 'where clause'

    因为where不能用于选取列的AS别名判断,MYSQL的处理机制是先进行选取,再进行筛选,在选取阶段就启用了where条件,因为这时并不存在prices的筛选结果后才产生的字段,所以这里会抛出错误

    我们可以这样做

    SELECT `authors`.*, `books`.book_id, `orders`.order_id, sum(`orders`.price) AS prices FROM `authors`
    LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
    LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id AND `orders`.order_date >= `books`.start_date AND `orders`.order_date <= `books`.end_date
    WHERE `orders`.price is not NULL
    GROUP BY `books`.book_id

    选取阶段order表是存在price字段的,所以只有price不为空的记录才会被选取

    author_idauthor_namebook_idorder_idprices
    2Abel1130.10
    1Kimmy920.60

    运用

    having

    对那些无法进行 WHERE 的AS别名的字段进行一些筛选查询

    SELECT `authors`.*, `books`.book_id, sum(`orders`.price)AS prices FROM `authors`
    LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
    LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id
    GROUP BY `books`.book_id
    HAVING prices > 0.1

    这时只有sum为0.8的结果被选中 

    author_idauthor_namebook_idsum(order_price)
    1Kimmy90.80

    对于组合其他语法查询,也是没问题的

    SELECT `authors`.*, `books`.book_id, sum(`orders`.price)AS prices FROM `authors`
    LEFT JOIN `books` ON `authors`.author_id = `books`.author_id
    LEFT JOIN `orders` ON `books`.book_id = `orders`.book_id
    GROUP BY `books`.book_id
    HAVING prices >= 0.1
    ORDER BY prices asc
    LIMIT 1,1

    原文链接:https://www.cnblogs.com/yiyide266/p/7594058.html

    24d4ae455c97f2f04f8f962654268742.png

    如果感觉推送内容不错,不妨右下角点个在看,感谢支持!
    展开全文
  • 多表同步可以有以下两种方式实现,接下来笔者就给大家分别介绍下实现方式:方式一:多表关联查询后,写入一张表1、根据这两张表的数据,表有学生表和班级表,写入目标表:学生班级表2、选择表输入,双击表输入,在...

    以下操作都在5.0.1版本下进行开发,其余版本可以进行自动比对

    在平时工作当中,会遇到这种情况,而且很常见。比如:读取对方的多个视图或者表,写入目标库的一张表中,就涉及到多表的同步。

    多表同步可以有以下两种方式实现,接下来笔者就给大家分别介绍下实现方式:

    方式一:多表关联查询后,写入一张表

    1、根据这两张表的数据,表有学生表和班级表,写入目标表:学生班级表

    56857312bebeb5ef9527a60f7173edba.png
    be19993a6077d81c12a24bbdebcbc8e1.png
    555f4f4c8fcf07970ffbf68e86b8967d.png

    2、选择表输入,双击表输入,在sql一栏里写入关联sql语句,点击预览后,查询出相关数据,点击确定

    407e8ad87e401595b019f7d3363e7155.png
    872543e161f6a32145e4d0154c875917.png

    3、在核心对象中,选择表输出,按住shift键,鼠标连接表输入和表输出,双击表输出,选择数据库连接,选择目标表和提交数量点击确定

    6cac673e276753b4ca1743a9d284ed04.png

    >4、点击运行按钮,写入成功

    a4aca80d29fe6ef6b05b2ef74735166d.png
    b6cf6ec52aacd55ee5599dc977ed6ffd.png

    >5、验证成功,数据已经写入相关表

    90f53a116d561a262306d8eec9fcc376.png

    方式二:

    如图所示,需要创建表输入1(学生),表输入2(班级),记录集连接(连接学生和班级表),表输出(写入目标表)

    58ed7e6f8bfab3eff7c0c3324ef458bc.png

    1、表输入1,获取相应的写入字段

    1bbf1b4a6f1cfa4b83d022fb5208eb19.png

    2、表输入2,获取班级相应的写入字段

    7e5879e9c3b9605e3feb6bb650517e1a.png

    3、表输入1和表输入2,同时按住shift连接记录集连接控件后,点击记录集连接控件,输入连接字段1和连接字段2,连接类型选择inner(数据库相关知识)

    29c3d48bf9ef7de4e22fe3c539be0dd6.png

    4、最后连接表输出,选择数据库字段后(必须和目标表的表结构一致),点击确认

    eacae281dd86c8fd95e75888041623db.png
    4b3ba4aa2fd8aadde5551c32a788e4ea.png

    5、双击运行,执行完毕,到数据库验证通过

    c6d3ca09064d74b57a64bfd640349073.png
    1fb557512bbe11207171f5605c2317b6.png

    简单的操作步骤已经讲解完毕,具体实例ktr和kjb文件,请私信

    原文链接:https://blog.csdn.net/weixin_44846436/article/details/103511213

    展开全文
  • 日期数据如何处理多表关联查询(利用vlookup函数)如何对数据进行分组(利用vlookup函数)一、日期数据如何处理下面是从公众号后台导出的数据,包含有三个字段,分别是:标题、日期、当日涨粉量。案例可以看到,”...

    76196dff5145a890a8412a591314d3d1.png

    这篇文章将介绍用Excel处理数据的一些小技巧,包括实际案例哦。

    • 日期数据如何处理
    • 多表关联查询(利用vlookup函数)
    • 如何对数据进行分组(利用vlookup函数)

    一、日期数据如何处理

    下面是从公众号后台导出的数据,包含有三个字段,分别是:标题、日期、当日涨粉量。

    f6b62496cc3ee58536f9e7b7ddef225e.png
    案例

    可以看到,”日期“列的数据并不是统一的格式,现在我们要将它转换成标准的日期格式。

    解决方法:

    选中列——数据选项卡——分列——下一步——下一步——日期——完成——再选中”日期“列——设置单元格格式(Ctrl+1)——自定义yyyy/m/d——完成

    968201b426334e2d4ce34f2e2fec85b6.png
    处理后的数据

    问题1:每月涨粉量?最近几个月的变化趋势?

    即:如何按月汇总数据

    解决办法:

    step1:插入数据透视表——行:日期;

    值:求和项:当日涨粉量(按天统计涨粉量)

    84c18ef908d6ab27509279f0c17e7a88.png
    按天汇总数据

    step2:选中日期列中任一单元格,鼠标右击选”组合“——选中”年“”月“——确定

    58e748c78de5b383a1c8704e760e6abc.png
    具体操作步骤

    最后得到按月汇总数据

    42bb93f94cc18ad182f6034c3317c10a.png
    按月汇总数据

    按周汇总数据

    在”组合“中,起始于2018/3/26(最早日期且为周一),终止于2018/6/3 21:00:00,日,天数7

    0a18155fa50d9d7de459048beddc1d1d.png
    具体操作步骤

    最后得到按周汇总的数据

    6a339bb0da53db9c451c314b3a9ebfee.png
    按周汇总数据

    问题2:按月汇总数据后,想知道”日用户涨粉量“的最大值是多少

    解决办法:利用数据透视表

    按月汇总数据后——

    值:求和项:当日涨粉量——值字段设置——最大值——确定

    e408761175a824e50bf3fe83b66c0c04.png
    按月汇总后,日涨粉量的最大值

    可以看到每个月单日涨粉量的最大值。

    问题3:当有多张表时,如何将一个Excel表中的数据匹配到另一个Excel表中?怎么用vlookup函数进行多表关联查询?

    vlookup函数:vlookup(lookup_value,table_array,col_index_num,range_lookup)

    四个参数的含义分别是:

    lookup_value:要查找的值,可以是数值,引用或文本字符串

    table_array:查找区域

    col_index_num:返回数据在查找区域的第几列

    range_lookup:精确匹配(FALSE或0)/近似匹配(True或1)

    总结:vlookup(找什么,在哪找,第几列,精确找还是近似找)

    精确查找返回第一个值;模糊查找(近似查找)返回最后一个值。

    实例:

    表1 学生信息表

    ebb55399b23ffc00eee1dff2b94c0567.png
    表1 学生信息表

    表2 三好学生表

    3d8ee6a9de2c2fa12b2e5299832c0c20.png
    表2 三好学生表

    现在,想要依据”三好学生表“中的”姓名“,在”学生信息表“中找出对应的”班级“,将“三号学生表”制作完整。我们会发现表1中叫“猴子”的同学有两人。

    如何用vlookup函数查出重复值?

    可以通过”添加辅助列“的方法,来保证数据的唯一性。

    将“学号”与“姓名”两个单元格中的内容合并起来,即”学号&姓名“作为辅助列,如下所示,

    a50ace6c7841a2574adaedc3974a0de3.png
    添加辅助列后的”学生信息表“

    在”三好学生表“中添加辅助列后

    43b67c01fb73371261001c7317ff564d.png
    查询结果

    问题4:如何对数据进行分组?

    解决方法:vlookup函数

    e5b9f564966378c455707d9cfe9b6635.png
    消费数据

    要求:将月消费水平分为高消费、中消费、低消费三种。

    step1:在表的右边建立一个分组定义,确定3组消费类型的区间范围,将每一组消费类型区间范围的最小值作为阈值

    42dc14df9049661d60cbc35432cf3965.png
    分组定义

    step2:在C2单元格中插入vlookup函数,设置4个参数,即=VLOOKUP(B2,$E$1:$G$4,2,1)

    注:三种引用方式——相对引用A1、绝对引用$A$1、混合引用$A1、A$1

    a090bfd4853f811ad44fe716dd1e8120.png
    计算结果

    好啦,今日学习到此结束,继续努力!

    展开全文
  • MybatisPlus 多表关联查询带分页

    千次阅读 2019-12-27 23:47:45
    demo:https://download.csdn.net/download/caidingnu/12064636 1、目录结构 2、Controller package ...import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper...
  • 菜单和角色是关系,有一个关联表,菜单去重,角色返回集合 public class MenuVO extends SysMenu { private List<SysRole> roles; } 实现一 @Select("select rm.menu_id,m.`name`,m.url from ...
  • 驱动表的概念是指多表关联查询时,第一个被处理的表,使用此表的记录去关联其他表。驱动表的确定很关键,会直接影响多表连接的关联顺序,也决定了后续关联时的查询性能。驱动表的选择遵循一个原则:在对最终结果集没...
  • 即席查询将数据仓库中的维度和事实映射到语义层,用户可以通过语 义层选择,建立间的关联,最终生成 SQL 语句。即席查询与通常查询从 SQL 语句上来 说,并没有本质的差别。在设计即席查询时,把即席查询定位...
  • 要建设一个商家商品搜索系统,能够为用户提供快速、准确的搜索能力,在用户输入搜索内容时,要能从商家名称和商品名称两个维度去搜索,搜索出来的结果,按照准确率排序,并按商家所属商品的关联关系,来组合数据结构...
  • 阅读提示本内容为日常频繁使用的数据处理操作,不涉及底层技术问题,烦请爱钻牛角的杠精绕行。本内容尽量简单直白、...有兴趣的可以翻看之前的内容本期内容介绍数据的多表关联,以及多表联合操作部分,下面我们开...
  • MybatisPlus 多表分页关联查询

    千次阅读 2020-04-17 11:52:31
    今天使用mybatis plus进行多表分页查询,通过查阅资料,掌握了基本操作,如下: 我这里提供的是mybatis plus 和 xml配置文件结合的方式: 直接从service层开始写: //这是service层,多表分页的简单逻辑处理,重点...
  • BaseMapper提供的默认查询方法都是单表的,如果需要多表关联查询,同时还要支持分页,一个方案就是自己写Sql。现在自己写Sql一般用的应该不是传统MyBatis那种写xml的老方法,而是通过在Mapper类里写注解来实现。还...
  • BaseMapper提供的默认查询方法都是单表的,如果须要多表关联查问,同时还要反对分页,一个计划就是本人写Sql。当初本人写Sql个别用的应该不是传统MyBatis那种写xml的老办法,而是通过在Mapper类里写注解来实现。还...
  • MyBatisPlus多表自定义分页查询 问题: 我需要对一个文章信息+类型名称,它们分别属于不同的表,所以需要进行多表关联,再其次我需要查询的数据进行分页,所以我们还需要加入分页的相关条件。 两个实体类: @Data @...
  • 需求:多表关联查询,返回结构包含多表字段 持久层:mybatis plus 1.封装请求体参数 2.封装返回结构 3.Mapper层 4.自定义sql 5.Service层 6.Impl 控制台打印日志 返回值
  • 通过前面三篇学习,了解了MP基本的CURD操作和分页查询,但是到目前为止我们仅限于单表操作,而实际中通常都是多表关联查询使用的比较多,这一篇就记录一下多表的关联查询。关联查询和单表查询其实差不多,在处理一对...
  • 实现商品,通过内的id关联查询到供应商的name属性 商品 如下所示 供应商 如下所示 新建查询测试sql 注意, 1、查询tb_goods的全部,所以用t1.*,查询t2的name,并用supplierName替换名称 2、使用...
  • @MybatisPlus自定义sql多表关联分页条件查询 mp封装了crud但是对应复杂sql还是需要自己定义 网上对于多表分页查询的mp描述不是很清楚,我在这里重新写一篇文章。 1.数据库准备 需要实现的sql是两表关联条件查询 ...
  • MybatisPlus-实现基于分页的多表关联查询介绍 新手入门,目录结构可能不够严谨,我这边没有用mybatis-plus自带的代码生成器,但是大致原理不变,这边我会重点介绍下我踩的坑,比较难找的几个问题,我有单独写在java...

空空如也

空空如也

1 2 3
收藏数 59
精华内容 23
关键字:

mybatisplus多表关联查询