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学习笔记之---多表查询(1)

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

  6. Mybatis学习笔记之---多表查询(2)

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

  7. MyBatis学习总结——实现关联表查询(转)

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

  8. Django ORM queryset object 解释(子查询和join连表查询的结果)

    #下面两种是基于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. Thymeleaf3语法详解

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code   Thymeleaf是Spring boot推荐使用的模版引擎,除此之外常见的还有F ...

  2. 深度学习框架PyTorch一书的学习-第一/二章

    参考https://github.com/chenyuntc/pytorch-book/tree/v1.0 希望大家直接到上面的网址去查看代码,下面是本人的笔记 pytorch的设计遵循tensor- ...

  3. VC++6.0 add files to project 造成Visual Studio崩溃的解决方法

    1.下载filetool.exe,然后将文件解压在一个小文件夹内2.打开filetool.dsw 在release模式下编译程序,复制filetool.dll3.放在VC6.0安装目录AddIns的下 ...

  4. PAT A1055 The World's Richest (25 分)——排序

    Forbes magazine publishes every year its list of billionaires based on the annual ranking of the wor ...

  5. mac sourcetree push分支选中所有tag的时候报错

    错误信息: ....... ! [rejected] 573_0811_stable -> 573_0811_stable (already exists)updating local trac ...

  6. day95

    Linux基本部署配置及常见扩展应用 Linux软件包安装方法 1. 安装: 整个安装过程可以分为以下几步: 1) 取得应用软件:通过下载.购买光盘的方法获得: 2)解压缩文件:一般tar包,都会再做 ...

  7. hibernate坑边闲话3

    could not initialize proxy - no Session] with root cause org.hibernate.LazyInitializationException: ...

  8. sqlserver笔记

    表结构: 一,字段类型sqlserver jdbc java char char Stringnchar nchar Stringvarchar varchar Stringnvarchar nvar ...

  9. CodeForces Round #548 Div2

    http://codeforces.com/contest/1139 A. Even Substrings You are given a string s=s1s2…sns=s1s2…sn of l ...

  10. EF内容记录_EF连接Mysql版本问题

    EF连接MySQL可用版本,由于EF.MySQLConnection.mysql-for-visualstudio.VS版本.MySQL.Data.MySQL.Data.Entity版本问题较花时间, ...