1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="cn.bdqn.mybatis.mapper.CameraMapper">
  6. <!-- 关键是where部分,得根据条件的有效性进行判断 使用where标签动态做-->
  7. <select id="findCamera" resultType="Camera">
  8. SELECT
  9. id,
  10. typeId,
  11. brandId,
  12. title,
  13. pixel,
  14. zoom,
  15. price,
  16. color
  17. FROM Camera
  18. <where>
  19. <if test="typeId!=null">typeId=#{typeId}</if>
  20.  
  21. <if test="brandId!=null">and brandId=#{brandId}</if>
  22. <!-- 由于标签就是由<>组成的,在xml文件中是具有特殊含义的字符,在解析xml时发生错误,解析器xmlcdata块中是普通的字符 -->
  23. <if test="pixel!=null"><![CDATA[and pixel>=#{pixel}]]></if>
  24. <if test="zoom!=null"><![CDATA[and zoom>=#{zoom}]]></if>
  25. <if test="price!=null"><![CDATA[and price<=#{price}]]></if>
  26. <if test="color!=null">and color like #{color}</if>
  27. <if test="title!=null">and title like #{title}</if>
  28. </where>
  29. ORDER BY id
  30.  
  31. </select>
  32. </mapper>
  1. package cn.bdqn.mybatis.mapper;
  2.  
  3. import java.util.List;
  4.  
  5. import org.apache.ibatis.annotations.Param;
  6.  
  7. import cn.bdqn.mybatis.entity.Camera;
  8. import cn.bdqn.mybatis.entity.Grade;
  9. import cn.bdqn.mybatis.entity.User;
  10.  
  11. //通过接口里边的抽象方法来调用对应的语句
  12. //接口对应映射文件----把SQL语句的命名空间设置成接口的完整类名
  13.  
  14. //相当于原来dao层,我只需要定义dao接口,那具体的实现类现在不用咱自己写了,只需拿到mapper接口类即可 省了很多事,提高开发效率
  15. public interface CameraMapper {
  16.  
  17. //根据条件搜索,mybatis不会自动识别我要对应到哪个属性上,需要添加注解
  18. public List<Camera> findCamera(
  19. @Param("typeId") Long typeId,
  20. @Param("brandId") Long brandId,
  21. @Param("pixel") Integer pixel,
  22. @Param("zoom") Double zoom,
  23. @Param("price") Double price,
  24. @Param("color") String color,
  25. @Param("title") String title
  26. );
  27.  
  28. }

mybatis自带的分页机制不推荐使用:首先会用sql语句,把数据库中所有数据加载回内存,再用我指定的页号、每页行数在内存中把那一页的数据提取出来。效率差。

更好的分页,在查询的时候,把我想看的分页语句只显示出来。自己手写底层分页语句。借助插件机制,自己写一个分页插件(可能公司有自己的分页插件)

第一步:添加分页插件

 mybatis的特点就是专注于执行语句的效率

在配置文件中,环境上边配置插件

  1. <plugins>
  2. <plugin interceptor="cn.bdqn.mybatis.plugin.PaginationInterceptor">
  3. <property name="dialectClass" value="cn.bdqn.mybatis.plugin.MySQLDialect"/> //分页插件支持两种方言类  oracle和mysql
  4. </plugin>
  5. </plugins>
  1. public List<Camera> findCamera(
                  //cn.bdqn.mybatis.plugin.中存在PageParam这个类
  2. @Param("pageParam") PageParam param, 名字必须叫"pageParam"
  3. @Param("typeId") Long typeId,
  4. @Param("brandId") Long brandId,
  5. @Param("pixel") Integer pixel,
  6. @Param("zoom") Double zoom,
  7. @Param("price") Double price,
  8. @Param("color") String color,
  9. @Param("title") String title
  10. );

MyBatis 动态SQL查询,多条件,分页的更多相关文章

  1. mybatis 动态SQL查询总结

    背景 ××项目需要提供系统部分函数第三方调用接口,基于安全性和避免暴露数据库表信息的基础上进行函数接口的设计,根据第三方调用身份的权限提供某张表的自定义集合.本项目基于mybatis的持久层框架,支持 ...

  2. mybatis动态SQL的<set>条件

    写代码,作笔记是个好习惯: <update id="update" parameterType="FaultMainten"> update FAU ...

  3. Mybatis 动态sql if 判读条件等于一个数字

    在Mybatis中 mapper中 boolean updateRegisterCompanyFlag(@Param(value = "companyId") String com ...

  4. Mybatis动态sql及分页、特殊符号

    目的: mybatis动态sql(案例:万能查询) 查询返回结果集的处理 mybatis的分页运用 mybatis的特殊符号 mybatis动态sql(案例:万能查询) 根据id查询 模糊查询 (参数 ...

  5. mybatis动态sql以及分页

    1.mybatis动态sql 2.模糊查询 3.查询返回结果集的处理 4.分页查询 5.特殊字符处理 1.mybatis动态sql If.trim.foreach If 标签判断某一字段是否为空 &l ...

  6. mybatis动态sql和分页

    mybatis动态sql foreach BookMapper.xml <select id="selectBooksIn" resultType="com.lin ...

  7. MyBatis动态Sql 的使用

    Mapper.xml提示: 1:mapper包中新建一个文件:mybatis-3-mapper.dtd 2:在web app libraries/mybatis.jar/org.apache.ibat ...

  8. mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句

    mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...

  9. mybatis动态SQL标签的用法

    动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格 ...

随机推荐

  1. android 项目学习随笔十六( 广告轮播条播放)

    广告轮播条播放 if (mHandler == null) {//在此初始化mHandler , 保证消息不重复发送 mHandler = new Handler() { public void ha ...

  2. ubuntu支持shh远程连接记录

    打开终端输入sudo apt-get update更新软件库 在输入sudo apt-get install openssh-server下载ssh sudo /etc/init.d/ssh rest ...

  3. python any()和all()用法

    #any(x)判断x对象是否为空对象,如果都为空.0.false,则返回false,如果不都为空.0.false,则返回true #all(x)如果all(x)参数x对象的所有元素不为0.''.Fal ...

  4. api-ms-win-crt-runtimel1-1-0.dll缺失的解决方案

    api-ms-win-crt-runtime就是MFC的运行时环境的库, 在windows上编译也是用微软的visual studio C++编译的软件, 底层也会用到微软提供的C++库和runtim ...

  5. 理解Linux中断 (1)【转】

    转自:http://blog.csdn.net/tommy_wxie/article/details/7425685 版权声明:本文为博主原创文章,未经博主允许不得转载. 一直认为,理解中断是理解内核 ...

  6. oracle sql获取随机数

    SQL> select round(dbms_random.value(10000,99999)) num from dual;

  7. DE1-SOC开发板上搭建NIOS II处理器运行UCOS II

    DE1-SOC开发板上搭建NIOS II处理器运行UCOS II   今天在DE1-SOC的开发板上搭建NIOS II软核运行了UCOS II,整个开发过程比较繁琐,稍微有一步做的不对,就会导致整个过 ...

  8. webservice cxf error:java.lang.IllegalArgumentException: Argument(s) "type" can't be null.

    客户端请求DTO和服务器端的DTO定义不一样,客户端必须定义@XmlAccessorType和@XmlType,如: @XmlAccessorType(XmlAccessType.FIELD) @Xm ...

  9. 怎么使用PHP获取用户客户端真实IP的解决方案呢?

    function getIp(){if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIE ...

  10. [转]在iOS项目中使用CorePlot框架

    转载地址:http://blog.csdn.net/llfjfz/article/details/7849190#comments Core Plot是OS X和IOS下的一个开源图形库,它提供数据的 ...