mybatis逆向工程,实现join多表查询,避免多表相同字段名的陷阱

时间:2022-09-07 00:14:18

mybatis逆向工程,实现join多表查询,避免多表相同字段名的陷阱

​ 前言:使用 mybatis generator 生成表格对应的pojo、dao、mapper,以及对应的example的pojo、dao、mapper,自带对单表的增删改查方法,这里实现一下对多表的join查询。

​ 网上join多表查询的博客不少,但避免多表相同字段名的方法没看到比较简单好用的

​ 最后在https://blog.csdn.net/xzm_rainbow/article/details/15336933这篇13年的博客得到了启发。

​ 在这里整理一下:

  1. SQL 语句给相同字段起别名
  2. 给 resultMap 加上一个 association
  3. 给 association 中的 result 对应列改 column 为第一步中起的别名

下面代码示例:

在 mapper 的 xml 文件中自定义多表查询方法以及对应的结果集

<!-- self defined -->
<sql id="Base_Column_List_With_Tag">
resident_detail.id, address, base_case, relation, resident_detail.name, gender, birthday, identity, nation, status,
military, education, telephone, company, marriage, health, poverty, place, security_state,
property_name, property_number, area, marriage_number, marriage_date, contraception_method,
only_date, boys, girls, remark, enter_case, care_type, update_time, tag_id, resident_tag.name "tag_name"
</sql>
<!-- self defined -->
<select id="selectByExampleWithTag" parameterType="club.iashe.pojo.ResidentDetailExample" resultMap="BaseResultMap">
select
<if test="distinct">
distinct
</if>
<include refid="Base_Column_List_With_Tag" />
from resident_detail
LEFT JOIN resident_tag ON resident_detail.tag_id = resident_tag.id
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null">
order by ${orderByClause}
</if>
</select>

注意:原本对应的列应该是name,这里改成tag_name 这个上面SQL语句中起的别名

<!-- add -->
<resultMap id="TagResultMap" type="club.iashe.pojo.ResidentTag">
<id column="tag_id" jdbcType="INTEGER" property="id" />
<result column="tag_name" jdbcType="VARCHAR" property="name" />
<result column="pid" jdbcType="INTEGER" property="pid" />
<result column="path" jdbcType="VARCHAR" property="path" />
<result column="level" jdbcType="INTEGER" property="level" />
</resultMap>

在原本主类的resultMap中加入上述对应的association

<!-- add -->
<association property="residentTag" resultMap="TagResultMap" />
</resultMap>

最后,在对应实体类中要加上

// 加的关联表
private ResidentTag residentTag;

mybatis逆向工程,实现join多表查询,避免多表相同字段名的陷阱的更多相关文章

  1. mybatis进阶案例之多表查询

    mybatis进阶案例之多表查询 一.mybatis中表之间的关系 在数据库中,实体型之间的关系主要有如下几种: 1.一对一 如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之 ...

  2. 对于大量left join 的表查询,可以在关键的 连接节点字段上创建索引。

    对于大量left join 的表查询,可以在关键的 连接节点字段上创建索引. 问题: 大量的left join 怎么优化 select a.id,a.num,b.num,b.pcs,c.num, c. ...

  3. Mybatis源码分析--关联表查询及延迟加载原理(二)

    在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...

  4. Oracle生成查询包括对应于所有数据表记录语句中指定的字段名

    应用:已知的字段名,表中的所有数据的查询数据库中包含的所有数据表的字段名 操作方法:指定字段名,用户数据库表,它可以执行以下查询 --Oracle生成查询包括对应于所有数据表记录语句中指定的字段名 d ...

  5. Mybatis学习笔记之---多表查询&lpar;1&rpar;

    Mybatis多表查询(1) (一)举例(用户和账户) 一个用户可以有多个账户 一个账户只能属于一个用户(多个账户也可以属于同一个用户) (二)步骤 1.建立两张表:用户表,账户表,让用户表和账户表之 ...

  6. Mybatis学习笔记之---多表查询&lpar;2&rpar;

    Mybatis多表查询(2) (一)举例 用户和角色 一个用户可以有多个角色,一个角色可以赋予多个用户 (二)步骤 1.建立两张表:用户表,角色表,让用户表和角色表具有多对多的关系.需要使用中间表,中 ...

  7. MyBatis学习总结——实现关联表查询&lpar;转&rpar;

    原文链接:孤傲苍狼 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关 ...

  8. Django ORM queryset object 解释&lpar;子查询和join连表查询的结果&rpar;

    #下面两种是基于QuerySet查询 也就是说SQL中用的jion连表的方式查询books = models.UserInfo.objects.all() print(type(books)) --- ...

  9. mysql中各种join连表查询总结

    通常我们需要连接多个表查询数据,以获取想要的结果. 一.连接可以分为三类: (1) 内连接:join,inner join (2) 外连接:left join,left outer join,righ ...

随机推荐

  1. wine install 32bit netframewok

    WINEARCH=win32 WINEPREFIX=~/.wine32 winecfg env WINEARCH=win32 WINEPREFIX=~/.wine32 winetricks dotne ...

  2. windows 7 和 Ubuntu的双系统安全删除Ubuntu

    1,准备文件 百度云盘链接:http://pan.baidu.com/s/1kVxuwSn 密码:e8ma 2,操作流程 #1,进入win7,将第一步下载的文件放在C:\windows\system3 ...

  3. 如何混合使用ARC和非ARC

    如果你的项目使用的非ARC模式,则为ARC模式的代码文件加入-fobjc-arc标签.如果你的项目使用的ARC模式,则为非ARC模式的代码文件加入 -fno-objc-arc标签.添加标签的方法: 1 ...

  4. Android 简介:Android SDK 和开发框架简介

    理解Android软件栈: 库: C/C++库(libc,SSL) Android 运行时可以让Android手机从本质上与一个移动Linux实现区分开来.Dalvik并不是Java虚拟机,是一个基于 ...

  5. python爬虫框架scrapy初试&lpar;二点一&rpar;

    功能:爬取某网站部分新闻列表和对应的详细内容. 列表页面http://www.zaobao.com/special/report/politic/fincrisis 实现代码: import scra ...

  6. 基于socket&period;io打造hybrid调试页面

    前言 参考的钉钉调试页面实现,仅供学习! 功能为: PC端编写代码,手机端执行 解决的痛点是: 避免了调试hybrid应用时重复写各种测试页面 源码与示例 源码 https://github.com/ ...

  7. &lbrack;Swift&rsqb;LeetCode846&period; 一手顺子 &vert; Hand of Straights

    Alice has a hand of cards, given as an array of integers. Now she wants to rearrange the cards into ...

  8. Java泛型中&lt&semi;? extends E&gt&semi;和&lt&semi;? super E&gt&semi;的区别

    这篇文章谈一谈Java泛型声明<? extends E>和<? super E>的作用和区别 <? extends E> <? extends E> 是 ...

  9. linux内核设计第七周——可执行程序的装载

  10. 安装graphlab伤透了心,终于搞定了

    为了方便研究各种机器学习算法,我想用graphlab来辅助我对后续算法的研究.所以我的目标就是安装graphlab到我的windows笔记本中.而基于python的graphlab的安装最好是采用如下 ...