mapper.xml中动态sql抽取重复项
mabatis重点是通过标签对sql灵活的组织,通过配置的方式完成输入 输出映射.
1.对mapper.xml中重复的sql抽取统一维护,以及foreach使用
UserMapperCustom.xml <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.itcast.mybatis.mapper.UserMapperCustom"> <!-- 定义一个sql片段,将重复的sql语句抽取出来
建议:定义查询条件以单表为单位去定义,sql片段可重用性才高
建议不要包括where
建议以单个为单位去定义查询条件,一般要将查询条件写全
-->
<sql id="query_user_where">
<!-- 如果有条件值再拼接 -->
<if test="user!=null">
<if test="user.username!=null and user.username!=''">
<!-- 用户输入条件值再拼接 -->
and username like '%${user.username}%'
</if>
<if test="user.sex!=null and user.sex!=''">
and sex = #{user.sex}
</if>
<!-- 下边要拼接:
AND id IN (1,10,16)
-->
<!-- 遍历id列表
collection:接收输入参数中的集合属性
item:每次循环定义一个对象名
open:开始循环时拼接的sql
close:结束循环时拼接的sql
separator:每两次循环中间拼接的sql
-->
<foreach collection="ids" item="id" open=" AND id IN ( " close=" ) " separator=",">
#{id}
</foreach>
<!-- 思考:如何拼接 AND (id=1 OR id=10 OR id=16) 实现 SELECT * FROM USER WHERE sex = '1' AND id IN (1,10,16)
-->
</if>
</sql> <!-- 综合条件查询用户 -->
<select id="findUserList" parameterType="queryUserVo"
resultType="user">
select id,username,birthday,sex,address from user <!-- where标签 相关于where关键字,可以将条件中的第一个and去掉 -->
<where>
<!-- 引用sql片段
如果跨mapper引用需要前边加namespace
-->
<include refid="query_user_where"></include>
</where>
</select> <!-- 综合条件查询用户记录汇总 -->
<select id="findUserCount" parameterType="queryUserVo" resultType="int">
select count(*) from user
<!-- where标签 相关于where关键字,可以将条件中的第一个and去掉 -->
<where>
<!-- 引用sql片段
如果跨mapper引用需要前边加namespace
-->
<include refid="query_user_where"></include>
</where>
</select> </mapper>
UserMapperCustom.java
public interface UserMapperCustom {
//综合条件查询用户信息
public List<User> findUserList(QueryUserVo queryUserVo) throws Exception;
//综合条件查询用户记录总数
public int findUserCount(QueryUserVo queryUserVo) throws Exception;
}
mapper.xml中动态sql抽取重复项的更多相关文章
- IDEA 配置datasource,提升编码效率,让你在 Mapper.xml 中编写sql可以飞起来~
IDEA 2018 创建springboot工程后,如果你打开一个.sql文件,或者一个mybatis的mapper.xml文件,会提示: No data source are configured ...
- mapper.xml中的<sql>标签
原文链接:http://blog.csdn.net/a281246240/article/details/53445547 sql片段标签<sql>:通过该标签可定义能复用的sql语句片段 ...
- Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)
上一篇我们分析了Mapper接口代理类的生成,本篇接着分析是如何调用到XML中的SQL 我们回顾一下MapperMethod 的execute方法 public Object execute(SqlS ...
- MyBatis中动态SQL元素的使用
掌握MyBatis中动态SQL元素的使用 if choose(when,otherwise) trim where set foreach <SQL>和<include> 在应 ...
- 转载:MyBatis mapper.xml中使用静态常量或者静态方法
转自:https://my.oschina.net/wtslh/blog/682704 今天偶然之间刷到了这样一篇博客,有点意外 mybatis 还可以这样使用ONGL常量的方式,该方式针对 xml的 ...
- Mybatis中动态SQL语句中的parameterType不同数据类型的用法
Mybatis中动态SQL语句中的parameterType不同数据类型的用法1. 简单数据类型, 此时#{id,jdbcType=INTEGER}中id可以取任意名字如#{a,jdbcType ...
- org.apache.commons.lang3.tuple.Pair 作为更新参数,XML 中的 Sql 取不到值、报错
项目用的 Mybatis,今天改一个需求,落地实现是批量更新,且只需要根据主键(id)来更新一个字段(name). 于是,没有犹豫,像下面这样设计了数据结构: 既然是批量更新,那外层肯定是 List ...
- SSM框架 mapper.xml中 value的空值判断问题
先看解决方案,其他的都是问题的出处 解决方案:if中使用 _parameter,#{value}不变 <if test="_parameter!='' and _parameter!= ...
- PL/SQL开发中动态SQL的使用方法
一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,但是DDL语句及系统控制语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DDL语句及系统控制语句,可以通过使 ...
随机推荐
- .NET Unity IOC框架使用实例
1.IOC简介 IOC(Inversion of Control), 控制反转 DI (Dependency Injection),依赖注入 IOC的基本概念是:不创建对象,但是描述创建它们的方式.在 ...
- Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控
目录 1.环境介绍 2.服务监控 2.1 加入依赖 2.2 修改配置文件 2.3 修改启动文件 2.4 监控服务 2.5 小结 3. 利用hystrix实现消费服务熔断 3.1 加入服务熔断 3.2 ...
- 关于利用MQ实现分布式事务的想法【转】
转自:https://www.jianshu.com/p/bafb09954f18 假设:消息服务不丢消息 场景 服务A 服务B 服务C 消息服务Q 伪代码 服务A中 transaction{ A本地 ...
- 《第一行代码》Android特色开发,基于位置服务,出现的问题
手机GPS定位较慢.精度高.耗电量多,网络定位较快.精度低.耗电量少 当位置精度要求非常高的时候,使用GPS定位:一般情况下,使用网络定位. 按<第一行代码>写了一个定位程序,真机一直没有 ...
- mysql的with rollup
无意间发现了mysql的with rollup函数(用在group by 函数后面) 测试 1. SELECT NAME,DATE,score FROM stu 结果是 2. SELECT NAME, ...
- Object.defineProperty使用技巧
Object.definedProperty 该方法允许精确添加或修改对象的属性.通过赋值操作添加的普通属性是可枚举的,能够在属性枚举期间呈现出来(for...in 或 Object.keys 方法) ...
- csharp:.net 3.5 using System.Runtime.Serialization.Json read json
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- 记录开发Nodejs c++ addon的一些经验(三、关于node-gyp)
关于node-gyp如何进行编译,我想它的官网已经说的很详细了: https://github.com/nodejs/node-gyp 但是我感觉关于binding.gyp文件的语法规则还是说的不明确 ...
- safari兼容时间格式
前提: 使用iview的DatePicker组件,保存时间后台接收时间戳 问题: safari中不支持2018-02-13这种格式转为时间戳会显示NaN 解决: new Date('2018/02/1 ...
- IIS并发连接数限制