Mybatis级联,使用JOIN和Associa,以及一些ID覆盖和自动变换。
先说下坑,比如数据库的字段是 DW_ID ,用generator讲mybatis自动转换的时候,会省略下表_变成dwId,所以我们之后自己手动设计的时候也尽量换成dwId;
generate的mybatis不是重新生成而是覆盖原来文字
Mybatis的级联
<resultMap id="BaseResultMap" type="com.ylzinfo.apps.rsdl.domain.RSDL_SHXX">
<id column="ID" jdbcType="VARCHAR" property="id" />
<result column="DW_ID" jdbcType="VARCHAR" property="dwId" />
<result column="DY_TYPE" jdbcType="VARCHAR" property="dyType" />
<result column="DWNAME" jdbcType="VARCHAR" property="dwname" />
<result column="ZJHM" jdbcType="VARCHAR" property="zjhm" />
<result column="SBSJ" jdbcType="VARCHAR" property="sbsj" />
<result column="YDLJG_ID" jdbcType="VARCHAR" property="ydljgId" />
<result column="YDLSTATE" jdbcType="VARCHAR" property="ydlstate" />
<result column="YDLOPNION" jdbcType="VARCHAR" property="ydlopnion" />
<result column="XDLJG_ID" jdbcType="VARCHAR" property="xdljgId" />
<result column="XDLSTATE" jdbcType="VARCHAR" property="xdlstate" />
<result column="XDLOPNION" jdbcType="VARCHAR" property="xdlopnion" />
<result column="JYSTATE" jdbcType="VARCHAR" property="jystate" />
<result column="JYREASON" jdbcType="VARCHAR" property="jyreason" />
<result column="JYOPNION" jdbcType="VARCHAR" property="jyopnion" />
<result column="SCSQ" jdbcType="VARCHAR" property="scsq" />
<result column="YLZD1" jdbcType="VARCHAR" property="ylzd1" />
<result column="YLZD2" jdbcType="VARCHAR" property="ylzd2" />
<result column="YLZD3" jdbcType="VARCHAR" property="ylzd3" />
<result column="YLZD4" jdbcType="VARCHAR" property="ylzd4" />
<result column="YLZD5" jdbcType="VARCHAR" property="ylzd5" />
<result column="SYS_CREATE_TIME" jdbcType="VARCHAR" property="sysCreateTime" />
<result column="SYS_CREATE_USER" jdbcType="VARCHAR" property="sysCreateUser" />
<result column="SYS_UPDATE_TIME" jdbcType="VARCHAR" property="sysUpdateTime" />
<result column="SYS_UPDATE_USER" jdbcType="VARCHAR" property="sysUpdateUser" />
<association column="YDLJG_ID" select="getYdwjg" property="ydwjg"/>
<association column="XDLJG_ID" select="getXdwjg" property="xdwjg"/> <result column="SYS_CREATE_USER" jdbcType="VARCHAR" property="sysCreateUser" />
<result column="SYS_UPDATE_TIME" jdbcType="VARCHAR" property="sysUpdateTime" />
<result column="SYS_UPDATE_USER" jdbcType="VARCHAR" property="sysUpdateUser" />
<association column="YDLJG_ID" select="getYdwjg" property="ydwjg"/>
</resultMap>
<sql id="Base_Column_List">
ID, DW_ID, DY_TYPE, DWNAME, ZJHM, SBSJ, YDLJG_ID, YDLSTATE, YDLOPNION, XDLJG_ID,
XDLSTATE, XDLOPNION, JYSTATE, JYREASON, JYOPNION, SCSQ, YLZD1, YLZD2, YLZD3, YLZD4,
YLZD5, SYS_CREATE_TIME, SYS_CREATE_USER, SYS_UPDATE_TIME, SYS_UPDATE_USER
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from RSDL_SHXX
where ID = #{id,jdbcType=VARCHAR}
</select>
<select id="getYdwjg" parameterType="java.lang.String" resultType="com.ylzinfo.apps.unit.domain.UnitBaseInfo">
SELECT NAME FROM Unit_Baseinfo WHERE id=#{ydwjg,jdbcType=VARCHAR}
</select> <select id="selectByDwId" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from RSDL_SHXX
where DW_ID = #{dwId,jdbcType=VARCHAR}
</select>
里面是级联部分代码,其中resultMap用来映射实体类对应的字段,用于返回数据,其中如果原本的实体类里面又包含实体类,我们就可以使用级联。在resultMap里面跟上级联实体类的名字,后面加入方法,
之后专门添加对应的select进行级联。
因为上个方法在项目中不知道为什么原因,如果名字一样就只能显示一个名字,而且如果只是要名字的话却封装一个对象,有点大材小用,故用到JOIN 来替换。
<select id="queryAndName" parameterType="java.lang.String"
resultMap="BaseResultMap2">
select r.id as ID,
r.dw_id as DW_ID,
r.dwname as DWNAME,
r.zjhm as ZJHM,
r.sbsj as SBSJ,
r.ydljg_id as YDLJG_ID,
r.ydlstate as YDLSTATE,
r.xdljg_id as XDLJG_ID,
r.xdlstate as XDLSTATE,
r.ylzd1 as YLZD1,
u1.dwname as YDLJG_NAME,
u2.dwname as XDLJG_NAME
from RSDL_SHXX r
left outer join RSDL_DLJG u1 on r.ydljg_id = u1.dwid
left outer join RSDL_DLJG u2 on r.xdljg_id = u2.dwid
where 1=1
<if test="dwId != null and dwId != ''">
and DW_ID like CONCAT(CONCAT('%',#{dwId}),'%')
</if>
<if test="dyType != null and dyType != ''">
and DY_TYPE like CONCAT(CONCAT('%',#{dyType}),'%')
</if>
<if test="dwname != null and dwname != ''">
and DWNAME like CONCAT(CONCAT('%',#{dwname}),'%')
</if>
<if test="zjhm != null and zjhm != ''">
and ZJHM like CONCAT(CONCAT('%',#{zjhm}),'%')
</if>
<if test="sbsj != null and sbsj != ''">
and SBSJ like CONCAT(CONCAT('%',#{sbsj}),'%')
</if>
<if test="ydljgId != null and ydljgId != ''">
and YDLJG_ID like CONCAT(CONCAT('%',#{ydljgId}),'%')
</if>
<if test="ydlstate != null and ydlstate != ''">
and YDLSTATE like CONCAT(CONCAT('%',#{ydlstate}),'%')
</if>
<if test="ydlopnion != null and ydlopnion != ''">
and YDLOPNION like CONCAT(CONCAT('%',#{ydlopnion}),'%')
</if>
<if test="xdljgId != null and xdljgId != ''">
and XDLJG_ID like CONCAT(CONCAT('%',#{xdljgId}),'%')
</if>
<if test="xdlstate != null and xdlstate != ''">
and XDLSTATE like CONCAT(CONCAT('%',#{xdlstate}),'%')
</if>
<if test="ydlopnion != null and ydlopnion != ''">
and XDLOPNION like CONCAT(CONCAT('%',#{ydlopnion}),'%')
</if>
<if test="jystate != null and jystate != ''">
and JYSTATE like CONCAT(CONCAT('%',#{jystate}),'%')
</if>
<if test="jyreason != null and jyreason != ''">
and JYREASON like CONCAT(CONCAT('%',#{jyreason}),'%')
</if>
<if test="jyopnion != null and jyopnion != ''">
and JYOPNION like CONCAT(CONCAT('%',#{jyopnion}),'%')
</if>
<if test="ylzd1 != null and ylzd1 != ''">
and YLZD1 like CONCAT(CONCAT('%',#{ylzd1}),'%')
</if>
<if test="ylzd2 != null and ylzd2 != ''">
and YLZD2 like CONCAT(CONCAT('%',#{ylzd2}),'%')
</if>
<if test="ylzd3 != null and ylzd3 != ''">
and YLZD3 like CONCAT(CONCAT('%',#{ylzd3}),'%')
</if>
<if test="ylzd4 != null and ylzd4 != ''">
and YLZD4 like CONCAT(CONCAT('%',#{ylzd4}),'%')
</if>
<if test="ylzd5 != null and ylzd5 != ''">
and YLZD5 like CONCAT(CONCAT('%',#{ylzd5}),'%')
</if>
order by r.sbsj desc
<!-- select <include refid="Base_Column_List" /> from RSDL_SHXX where DW_ID
= #{dwId,jdbcType=VARCHAR} order by sbsj desc -->
</select>
resultmap和java实体类
<resultMap id="BaseResultMap2" type="com.ylzinfo.apps.rsdl.domain.RSDL_SHXX">
<id column="ID" jdbcType="VARCHAR" property="id" />
<result column="DW_ID" jdbcType="VARCHAR" property="dwId" />
<result column="DY_TYPE" jdbcType="VARCHAR" property="dyType" />
<result column="DWNAME" jdbcType="VARCHAR" property="dwname" />
<result column="ZJHM" jdbcType="VARCHAR" property="zjhm" />
<result column="SBSJ" jdbcType="VARCHAR" property="sbsj" />
<result column="YDLJG_ID" jdbcType="VARCHAR" property="ydljgId" />
<result column="YDLSTATE" jdbcType="VARCHAR" property="ydlstate" />
<result column="YDLOPNION" jdbcType="VARCHAR" property="ydlopnion" />
<result column="XDLJG_ID" jdbcType="VARCHAR" property="xdljgId" />
<result column="XDLSTATE" jdbcType="VARCHAR" property="xdlstate" />
<result column="XDLOPNION" jdbcType="VARCHAR" property="xdlopnion" />
<result column="JYSTATE" jdbcType="VARCHAR" property="jystate" />
<result column="JYREASON" jdbcType="VARCHAR" property="jyreason" />
<result column="JYOPNION" jdbcType="VARCHAR" property="jyopnion" />
<result column="SCSQ" jdbcType="VARCHAR" property="scsq" />
<result column="YLZD1" jdbcType="VARCHAR" property="ylzd1" />
<result column="YLZD2" jdbcType="VARCHAR" property="ylzd2" />
<result column="YLZD3" jdbcType="VARCHAR" property="ylzd3" />
<result column="YLZD4" jdbcType="VARCHAR" property="ylzd4" />
<result column="YLZD5" jdbcType="VARCHAR" property="ylzd5" />
<result column="SYS_CREATE_TIME" jdbcType="VARCHAR" property="sysCreateTime" />
<result column="SYS_CREATE_USER" jdbcType="VARCHAR" property="sysCreateUser" />
<result column="SYS_UPDATE_TIME" jdbcType="VARCHAR" property="sysUpdateTime" />
<result column="SYS_UPDATE_USER" jdbcType="VARCHAR" property="sysUpdateUser" />
<result column="YDLJG_NAME" jdbcType="VARCHAR" property="ydwjg" />
<result column="XDLJG_NAME" jdbcType="VARCHAR" property="xdwjg" />
</resultMap>
/**
* 创建时间,一旦创建无法改变。
*/
private String sysCreateTime; /**
* 创建用户,一旦创建无法改变。
*/
private String sysCreateUser; /**
* 更改时间
*/
private String sysUpdateTime; /**
* 更改用户
*/
private String sysUpdateUser; /**
* 原单位机构,用来取名字。
*/
private String ydwjg; /**
* 新单位机构,用来取名字。
*/
private String xdwjg;
Mybatis级联,使用JOIN和Associa,以及一些ID覆盖和自动变换。的更多相关文章
- mybatis 级联
级联是一个数据库实体的概念.一对多的级联,一对多的级联,在MyBatis中还有一种被称为鉴别器的级联,它是一种可以选择具体实现类的级联. 级联不是必须的,级联的好处是获取关联数据十分便捷,但是级联过多 ...
- mybatis ---- 级联查询 一对多 (集合映射)
关联有嵌套查询和嵌套结果两种方式,本文是按照嵌套结果这种方式来说明的 上一章介绍了多对一的关系,用到了<association></association>,这是一个复杂类型的 ...
- (三)mybatis级联的实现
mybatis级联的实现 开篇 级联有三种对应关系: 1.一对一(association):如学号与学生 2.一对多(collection):如角色与用户 3.多对多(discri ...
- mybatis级联查询
1.定义四个实体.User Role Privilege Resource,他们之间的对于关系为 2.需求:我通过用户名username查找出该用户对应的角色以及角色对应的权限和资源 3 ...
- 【mybatis】mybatis中insert操作,返回自增id
需求是这样的: mybatis中insert操作,返回自增id,因为这个自增id需要给后续业务用到. 原本是这样的: 将insert语句传入,正常执行insert操作,返回int永远是 0[失败] 或 ...
- mybatis mapper xml文件配置resultmap时,id行和result行有什么区别?
mybatis mapper xml文件配置resultmap时,id行和result行有什么区别? <resultMap id = "CashInvoiceMap" typ ...
- mybatis的插入与批量插入的返回ID的原理
目录 背景 底层调用方法 单个对象插入 列表批量插入 完成 背景 最近正在整理之前基于mybatis的半ORM框架.原本的框架底层类ORM操作是通过StringBuilder的append拼接的,这次 ...
- Mybatis 级联查询 (一对多 )
后台系统中 涉及到添加试卷 问题 答案的一个模块的.我需要通过试卷 查询出所有的试题,以及试题的答案.这个主要要使用到Mybatis的级联查询. 通过试卷 查询出与该试卷相关的试题(一对多),查询出试 ...
- Mybatis级联:关联、集合和鉴别器的使用
Mybatis中级联有关联(association).集合(collection).鉴别器(discriminator)三种.其中,association对应一对一关系.collection对应一对多 ...
随机推荐
- 从华为数字化转型看IT自动化运维重要性
关注嘉为科技,获取运维新知 8月有幸聆听了华为CIO陶总(陶景文)关于“华为数字化转型秘诀:坚定“以客户为中心”的思想”的演讲,获益良多.其中陶总也分享了IT运营平台的建设对于华为实现数字化转型的重要 ...
- Apache Hadoop Operations at Scale
book: Hadoop Operations,A Guide for Developers and Administrators Apache Hadoop Operations at Scale ...
- es的mapping设置
自定义mapping的api PUT test_index { "mappings": { #mappings关键字 "doc": { #type " ...
- 网络基础之 tcp/ip五层协议 socket
1 网络通信协议(互联网协议) 1.1 互联网的本质就是一系列的网络协议 1.2 osi七层协议 1.3 tcp/ip五层模型讲解 1.3.1 物理层 1.3.2 数据链路层 1.3.3 网络层 1. ...
- 四则运算Java语言实验设计过程1
题目要求: 像二柱子那样,花二十分钟写一个能自动生成三十道小学四则运算题目的 “软件”.要求:除了整数以外,还要支持真分数的四则运算(需要验证结果的正确性).题目避免重复.可定制出题的数量. 设计思路 ...
- InnoDB存储引擎介绍-(2)redo和undo学习
01 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制(简称:MVCC). - 事务的原子性(Atomi ...
- python安装MySQLdb(即mysql-Python)模块的一些问题
1.超时问题 如果出现:ReadTimeoutError: HTTPSConnectionPool(host='pypi.python.org', port=443): Read timed out ...
- php获取当月天数及当月第一天及最后一天
1.获取上个月第一天及最后一天. echo date('Y-m-01', strtotime('-1 month')); echo "<br/>"; ech ...
- windows配置教程
1.卸载预装软件 2.卸载非安装的预装软件 有些软件被改成了“绿色版”软件不能通过软件列表卸载,一般在C:\Program Files (x86)目录下 可以直接删除其文件夹,如果提示文件夹无法删除则 ...
- 整合elk(2)(十三)
配置.启动kibana 到kibana的安装目录: 1 ./bin/kibana 默认配置即可. 访问localhost:5601,网页显示: 证明启动成功. 创建springboot工程 起步依赖如 ...