<?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. android显示当前时间

    SimpleDateFormat formatter = new SimpleDateFormat ("yyyy年MM月dd日 HH:mm:ss ");        Date c ...

  2. Delphi 取得桌面文件夹的路径和取得我的文档的路径

    Uses Windows,Registry; function GetShellFolders(strDir: string): string; const regPath = '\Software\ ...

  3. 161018、springMVC中普通类获取注解service方法

    1.新建一个类SpringBeanFactoryUtils 实现 ApplicationContextAware package com.loiot.baqi.utils; import org.sp ...

  4. Git几块区域关系

  5. miniUI 可编辑datagrid获取值的问题

    <div id="variableGrid" class="mini-datagrid" borderStyle="border-right:0 ...

  6. table 单线条

    <style>        .a{            cursor:pointer;            color: blue;            text-decorati ...

  7. Distinct<TSource>(IEqualityComparer<TSource> comparer) 根据列名来Distinct

    1. DistinctEqualityComparer.cs public class DistinctEqualityComparer<T, V> : IEqualityComparer ...

  8. 20151124001 关闭C#主窗体弹出是否关闭对话框

    关闭C#主窗体弹出是否关闭对话框 private void Frm_Main_FormClosing(object sender, FormClosingEventArgs e)        {   ...

  9. JQuery的$(document).ready(function(){})与JS的window.onload 的各自优势!

    由于项目需要,使用JQuery也有相当一段时间了.由于经常要处理DOM节点加载.图片显示以及动态资源请求,所以对$(document).ready(function(){})理解也越来越深了,所有在此 ...

  10. C#实现中国天气网XML接口测试

    点击链接查看中国天气网接口说明,最近想研究一下接口测试,源于最近一次和某公司的技术总监(交大校友)谈话,发现接口测试的需求是比较大的,于是想要研究一下. 好不容易在网上找到了一个关于中国天气网的接口说 ...