<?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.bdqn.mybatis.mapper.CameraMapper">
<!-- 关键是where部分,得根据条件的有效性进行判断 使用where标签动态做-->
<select id="findCamera" resultType="Camera">
SELECT
id,
typeId,
brandId,
title,
pixel,
zoom,
price,
color
FROM Camera
<where>
<if test="typeId!=null">typeId=#{typeId}</if> <if test="brandId!=null">and brandId=#{brandId}</if>
<!-- 由于标签就是由<>组成的,在xml文件中是具有特殊含义的字符,在解析xml时发生错误,解析器xmlcdata块中是普通的字符 -->
<if test="pixel!=null"><![CDATA[and pixel>=#{pixel}]]></if>
<if test="zoom!=null"><![CDATA[and zoom>=#{zoom}]]></if>
<if test="price!=null"><![CDATA[and price<=#{price}]]></if>
<if test="color!=null">and color like #{color}</if>
<if test="title!=null">and title like #{title}</if>
</where>
ORDER BY id </select>
</mapper>
package cn.bdqn.mybatis.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import cn.bdqn.mybatis.entity.Camera;
import cn.bdqn.mybatis.entity.Grade;
import cn.bdqn.mybatis.entity.User; //通过接口里边的抽象方法来调用对应的语句
//接口对应映射文件----把SQL语句的命名空间设置成接口的完整类名 //相当于原来dao层,我只需要定义dao接口,那具体的实现类现在不用咱自己写了,只需拿到mapper接口类即可 省了很多事,提高开发效率
public interface CameraMapper { //根据条件搜索,mybatis不会自动识别我要对应到哪个属性上,需要添加注解
public List<Camera> findCamera(
@Param("typeId") Long typeId,
@Param("brandId") Long brandId,
@Param("pixel") Integer pixel,
@Param("zoom") Double zoom,
@Param("price") Double price,
@Param("color") String color,
@Param("title") String title
); }

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

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

第一步:添加分页插件

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

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

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

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. Reporting Service报表项默认可见+号和-号的显示问题

    在Reporting Service里面可以设置报表项(组.tablix行.tablix列.文本框等所有SSRS报表项)的可见性,并且可以设置某个报表项的可见性由点击另外一个报表项来控制,比如报表项A ...

  2. Android_adb详解

    adb定义:adb(android debug bridge)是android系统中的一种命令行工具,通过它可以和android设备或模拟器通信. adb工具位置: <path-to-sdk&g ...

  3. OpenStack 新加计算节点后修改

    Contents [hide] 1 前提 2 iptables禁止snat= 3 vlan支持 4 Quota支持 5 修改物理资源设置. 6 添加collectd 7 重启服务 前提 我们使用fue ...

  4. fedora环境安装webkit支持作爬虫下载解析JS

    环境: 我使用的fedora19.1-xfce版本,属于redhat系的桌面环境. 1.安装 webkit源码安装webkit失败,这里提供的是yum安装方式. a.查看当前yum库中的webkit资 ...

  5. Ubuntu 安装 “宋体,微软雅黑,WPS Office的symbol、wingdings、wingdings 2、wingdings 3、webding字体,Consolas雅黑混合版编程字体” 等 Windows 7 下的字体(转)

    Windows平台下,"宋体"."微软雅黑"."Courier New(编程字体)"用的比较多,看的也习惯了.那如何在 Ubuntu下也安装 ...

  6. linux设备驱动归纳总结(三):6.poll和sellct【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-61749.html linux设备驱动归纳总结(三):6.poll和sellct xxxxxxxxxx ...

  7. Linux Kernel之flush_cache_all在ARM平台下是如何实现的【转】

    转自:http://blog.csdn.net/u011461299/article/details/10199989 版权声明:本文为博主原创文章,未经博主允许不得转载. 在驱动程序的设计中,我们可 ...

  8. Verilog语法基础讲解之参数化设计

    Verilog语法基础讲解之参数化设计   在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...

  9. ACM题目————还是畅通工程

    Submit Status Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路 ...

  10. initComponents()方法

    initComponents()是在使用GUI工具设计GUI界面时,NetBeans系统自动生成的方法. 其功能是在界面添加各个组件,并为它们注册监听器. 把initComponents()放在构造方 ...