<?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. Linux 的 Crontab 命令运用(转)

    cron来源于希腊单词chronos(意为“时间”),是linux系统下一个自动执行指定任务的程序.例如,你想在每晚睡觉期间创建某些文件或文件夹的备份,就可以用cron来自动执行. 服务的启动和停止 ...

  2. source insight资源

    http://www.cnblogs.com/Red_angelX/p/3713935.html https://github.com/redxu/sihook

  3. 为什么super()和this()调用语句不能同时在一个构造函数中出现的解释

    我想这应该是Java构造函数的一种机制吧,首先以子类和父类为例.当你创建一个子类的实例时,首先会调用父类的构造函数,然后再调用子类的构造函数,如果父类中没有缺省构造函数,则必须再子类的构造函数中显示的 ...

  4. 6*17点阵的Window程序, Java写的。

    package com.wulala; import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;imp ...

  5. Pascal's Triangle

    class Solution { public: vector<vector<int>> generate(int numRows) { vector<vector< ...

  6. The reference to entity “idNo” must end with the ';' delimiter 异常处理

    解决方案很简单,就是把配置项值中用到"&"的地方改成"&".原因是sax解析的类库在读取文件的时候是根据转义后的格式进行读取的,遇到" ...

  7. JQuery知识快览之四—样式

    前面我们获取了对象集,本文介绍怎么控制对象集的样式 基本概念 在一个html页面中,我们有两种方式来控制一个对象的样式,用HTML attribute控制,或者用CSS类来控制,这两种方法虽然都能控制 ...

  8. 山东理工大学第七届ACM校赛-字符的变化 分类: 比赛 2015-06-26 10:32 46人阅读 评论(0) 收藏

    字符的变化 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 一个长度为n(1<=n<=1000)的字符串(只包含小写字 ...

  9. C#相对路径转绝对路径,绝对路径转相对路径

    1.绝对路径转相对路径 绝对转相对似乎C#没有提供实现,需要自己写,这里摘选了一位博友的实现方法: string RelativePath(string absolutePath, string re ...

  10. request、response 中文乱码问题与解决方式

    request乱码指的是:浏览器向服务器发送的请求参数中包含中文字符,服务器获取到的请求参数的值是乱码:   response乱码指的是:服务器向浏览器发送的数据包含中文字符,浏览器中显示的是乱码: ...