刚来到一家新公司, 翻看项目代码, 发现一位同事写的查询逻辑很好, 不用插件, 一个语句完成了分页条件查询.

而我之前一般都是在业务层对参数进行判断, 如果有条件,就调用条件查询的方法, 如果没有条件, 就调用查询所有的方法, 代码冗余较多

贴下代码:

1, 首先定义resultMap:

  

<resultMap id="xxxModel" type="com.aaa.XxxModel">
<id column="id" javaType="java.lang.Long" jdbcType="BIGINT" property="id" />
<result column="ip" javaType="java.lang.String" jdbcType="VARCHAR" property="ip" />
<result column="port" javaType="java.lang.Integer" jdbcType="INTEGER" property="port" />
<result column="userName" javaType="java.lang.String" jdbcType="VARCHAR" property="userName" />
<result column="password" javaType="java.lang.String" jdbcType="VARCHAR" property="password" />
<result column="lineNum" javaType="java.lang.Integer" jdbcType="INTEGER" property="lineNum" />
<result column="isInternation" javaType="java.lang.Integer" jdbcType="INTEGER" property="isInternation" />
<result column="createDate" javaType="java.lang.String" jdbcType="VARCHAR" property="createDate" />
<result column="updateDate" javaType="java.lang.String" jdbcType="VARCHAR" property="updateDate" />
</resultMap> 2, 定义sql片段, 方便阅读:
//条件和分页参数的封装, 利用动态sql, 特别是模糊查询的%拼接, 很赞:
<sql id="pageListCount">
from anti_http_proxy a
<if test="groupId != null and groupId !=''">
LEFT JOIN anti_proxy_group b on a.`host` = b.`host`
LEFT JOIN anti_group_server c on b.group_id = c.group_id
</if>
where 1=1
<if test="ip != null and ip !=''">
and a.`host` like CONCAT('%','${ip}','%')
</if>
<if test="groupId != null and groupId !=''">
and c.id = #{groupId}
</if>
ORDER BY a.gmt_modified desc
<if test="(pageNumber != null and pageNumber != '' or pageNumber == 0) and pageSize != null and pageSize != ''">
limit #{pageNumber}, #{pageSize}
</if>
</sql> <sql id="resultCol">
a.id
,a.`host` as ip
,a.`port`
,a.username as userName
,a.`password`
,a.band as lineNum
,a.international as isInternation
,DATE_FORMAT(a.gmt_create,'%Y-%m-%d %H:%i:%s') as createDate
,DATE_FORMAT(a.gmt_modified,'%Y-%m-%d %H:%i:%s') as updateDate
</sql>
3, 完成查询方法
<select id="selectAllByPage" resultMap="xxxModel">
select
<include refid="resultCol" />
<include refid="pageListCount" />
</select>

Mybatis 的分页条件查询语句编写的更多相关文章

  1. 对于Oracle中分页排序查询语句执行效率的比较分析

    转自:http://bbs.csdn.net/topics/370033478 对于Oracle中分页排序查询语句执行效率的比较分析 作者:lzgame 在工作中我们经常遇到需要在Oracle中进行分 ...

  2. 使用jdbc拼接条件查询语句时如何防止sql注入

    本人微信公众号,欢迎扫码关注! 使用jdbc拼接条件查询语句时如何防止sql注入 最近公司的项目在上线时需要进行安全扫描,但是有几个项目中含有部分老代码,操作数据库时使用的是jdbc,并且竟然好多都是 ...

  3. mybatis按datetime条件查询,参数为时间戳时

    mybatis按datetime条件查询,参数为时间戳时,如果数据库为2018-1-1 20:22:10, 你的时间戳也为2018-1-1 20:22:10,但却没找到数据.可能是时差导致的.百度修正 ...

  4. mybatis学习(五)(动态mybatis(多条件查询))

    有时候要查询条件是多条件的,尤其是使用mybatis的时候如何创建sql语句呢? 这里mybatis有自己的办法,如下: 案例:通过传入map,根据map里面的数据来查询 mapper配置如下: &l ...

  5. SSM-MyBatis-13:Mybatis中多条件查询

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 实体类 public class Book { private Integer bookID; private ...

  6. thinkphp分页+条件查询

    最近项目上面有一个带条件查询的分页列表,一开始form用的post,点击第二页就没有跳转成功,原因是分页是get请求,post数据链接到其他页面就会被清除. 解决办法: 1.form表单method= ...

  7. MyBatis中的条件查询(动态sql)

    本文将介绍使用MyBatis框架,编写DAO层接口类和接口类对应的sql映射文件,使用动态sql查询满足条件的用户集合. 首先,需要创建一个实体类User,供封装数据使用: package com.x ...

  8. 黑马学习MyBatis 用MyBatis对表进行条件查询 模糊查询 动态sql

    package cn.itcast.domain; /* CREATE TABLE `message` ( `id` int(11) NOT NULL, `command` varchar(16) D ...

  9. sql多条件查询语句

    如上图:三个文本可选项,那sql语句怎么写呢? 1.首先获取三个文本的值分别为Name,Age,Sex. 2.string sql="select * from 表 where 1=1&qu ...

随机推荐

  1. VirtualBox的快照功能

    VirtualBox是非常好用的一个虚拟机软件,无论是性能还是易用性不比商用的Vmware差.VirtualBox最初是Sun公司的产品,由于Sun被Oracle收购,现在也归Oracle了.除了虚拟 ...

  2. 格式化输出和printf命令

    GNU版本的printf命令用来格式化输出,效果类似与C语言的printf函数.2.x以上版本的Bash内建的printf命令和e/usr/bin下的printf命令使用方法一样. 例子:$print ...

  3. JS性能优化之怎么加载JS文件

    IE8+等实行并行下载,各JS下载不受影响,但仍阻塞其他资源下载 如: 图片 所以首要规则就是:将JS放在body底部(推荐) 加载100kb的单个文件比4个25kb的文件快(减少外链文件数量)(脚本 ...

  4. 【知识整理】这可能是RxJava 2.x 最好的入门教程(一)

    一.前言 RxJava 对大家而言肯定不陌生,其受欢迎程度不言而喻.而在去年的早些时候,官方便宣布,将在一段时间后不再对 RxJava 1.x 进行维护,而在仓库中另辟蹊径,开始对 RxJava 2. ...

  5. 流畅的python学习笔记:第五章

    在python中一切都可以视作为对象,包括函数.我们来看个例子: def function_try():     '''it is funciton try doc'''     print 'fun ...

  6. Swift自增和自增运算

    自增和自增运算 和 C 语言一样,Swift 也提供了方便对变量本身加1或减1的自增(++)和自减(--)的运算符.其操作对象可以是整形和浮点型. ‌ var i = ++i // 现在 i = 1 ...

  7. 解决ubuntu不能安装g++的问题

    下面提供一种解决方法,解决方法不唯一 首先贴出错误原因: 上文是g++-4.8不能下载,所以退而求其次,指定版本4.7,不下载最新的 解决方法如下: 安装成功后而已查看版本信息确认 使用g++-4.7 ...

  8. 关于mysql查询数据库时间和系统时间差

    1. MySQL数据库表中有两个时间的字段,需要计算他们的时间差: (1)datediff函数来表示时间差. 基本语法: DATEDIFF(datepart,startdate,enddate) 说明 ...

  9. vijos1046题解

    题目: 学校里面有N个景点.两个景点之间可能直接有道路相连,用Dist[I,J]表示它的长度:否则它们之间没有直接的道路相连.这里所说的道路是没有规定方向的,也就是说,如果从I到J有直接的道路,那么从 ...

  10. 使用gulp实现文件压缩及浏览器热加载

    一.安装gulp 首先,你要安装过nodejs,如果没有安装过的同学请自行下载.  先再命令行里输入   npm install gulp -g   下载gulp 二.创建gulp项目 创建一个你需要 ...