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抽取重复项的更多相关文章

  1. IDEA 配置datasource,提升编码效率,让你在 Mapper.xml 中编写sql可以飞起来~

    IDEA 2018 创建springboot工程后,如果你打开一个.sql文件,或者一个mybatis的mapper.xml文件,会提示: No data source are configured ...

  2. mapper.xml中的<sql>标签

    原文链接:http://blog.csdn.net/a281246240/article/details/53445547 sql片段标签<sql>:通过该标签可定义能复用的sql语句片段 ...

  3. Mybaits 源码解析 (六)----- 全网最详细:Select 语句的执行过程分析(上篇)(Mapper方法是如何调用到XML中的SQL的?)

    上一篇我们分析了Mapper接口代理类的生成,本篇接着分析是如何调用到XML中的SQL 我们回顾一下MapperMethod 的execute方法 public Object execute(SqlS ...

  4. MyBatis中动态SQL元素的使用

    掌握MyBatis中动态SQL元素的使用 if choose(when,otherwise) trim where set foreach <SQL>和<include> 在应 ...

  5. 转载:MyBatis mapper.xml中使用静态常量或者静态方法

    转自:https://my.oschina.net/wtslh/blog/682704 今天偶然之间刷到了这样一篇博客,有点意外 mybatis 还可以这样使用ONGL常量的方式,该方式针对 xml的 ...

  6. Mybatis中动态SQL语句中的parameterType不同数据类型的用法

    Mybatis中动态SQL语句中的parameterType不同数据类型的用法1. 简单数据类型,    此时#{id,jdbcType=INTEGER}中id可以取任意名字如#{a,jdbcType ...

  7. org.apache.commons.lang3.tuple.Pair 作为更新参数,XML 中的 Sql 取不到值、报错

    项目用的 Mybatis,今天改一个需求,落地实现是批量更新,且只需要根据主键(id)来更新一个字段(name). 于是,没有犹豫,像下面这样设计了数据结构: 既然是批量更新,那外层肯定是 List ...

  8. SSM框架 mapper.xml中 value的空值判断问题

    先看解决方案,其他的都是问题的出处 解决方案:if中使用 _parameter,#{value}不变 <if test="_parameter!='' and _parameter!= ...

  9. PL/SQL开发中动态SQL的使用方法

    一般的PL/SQL程序设计中,在DML和事务控制的语句中可以直接使用SQL,但是DDL语句及系统控制语句却不能在PL/SQL中直接使用,要想实现在PL/SQL中使用DDL语句及系统控制语句,可以通过使 ...

随机推荐

  1. Tool Scripts

    1. Function: 16进制转字符串 Create FUNCTION [dbo].[f_hextostr] (@hexstring VARCHAR(max)) RETURNS VARCHAR(m ...

  2. SQL 除去回车符 除去空格符

    update table set fa=replace(fa,chr(13),'') ; --- 除去回车符 update table set fa=replace(fa,' ','') ; --- ...

  3. 【3】.net MVC 使用IPrincipal进行Form登录即权限验证

    1.在MVC项目中添加用户类,可以根据实际项目需求添加必要属性 public class UserData { /// <summary> /// ID /// </summary& ...

  4. 简单来看看JavaBean

    1.什么是JavaBean? JavaBean是一个遵循特定写法的java类. 用作JavaBean的类必须有一个公共的,无参数的构造方法. JavaBean的属性与普通的Java类的属性的概念一样, ...

  5. Jvm性能监控和常用工具

    JDK常用命令行工具   Jps : jps [options] [hostid]  , -q 只显示jvmid, -m 传递给主类main的参数,-l 类全名,-v jvm启动参数 jstat : ...

  6. Cardinality Estimation算法学习(二)(Linear Counting算法、最大似然估计(MLE))

    在上篇,我了解了基数的基本概念,现在进入Linear Counting算法的学习. 理解颇浅,还请大神指点! http://blog.codinglabs.org/articles/algorithm ...

  7. javaScript 面向对象开发实例

    javaScript 面向对象开发实例 这个是结合require的模块化开发,首先创建构造函数: //test.js 1 function Test(lists) { var config={ nam ...

  8. c++开发ocx入门实践一

    原文:http://blog.csdn.net/yhhyhhyhhyhh/article/details/51374200 最近项目中利用ocx封装了底层视频播放及处理的控件,以供c#和web调用.对 ...

  9. 使用spring tool suite(STS)工具创建spring boot项目和出现错误后的处理

    一.先下载配置maven环境 1.下载地址:http://maven.apache.org/download.cgi windows下下载zip文件 2.解压后放到某个文件目录下 3.配置环境变量 ( ...

  10. Maximum Subarray解题报告zz

    http://fisherlei.blogspot.com/2012/12/leetcode-maximum-subarray.html Find the contiguous subarray wi ...