Mybatis动态SQL

If、trim、foreach

BookMapper

  /**
* 如果形参要在mapper.xml中使用需要加上面注解
* map.name: zs age: 12
* @param bookIds
* @return
*/
List<Book> selectBooksIn(@Param("bookIds") List bookIds);
BookService
1 List<Book> selectBooksIn(List bookIds);
BookServiceImpl
  @Override
public List<Book> selectBooksIn(List bookIds) {
return bookMapper.selectBooksIn(bookIds);
}

Bookmapper.xml

   <select id="selectBooksIn" resultType="com.Mybatis.model.Book" parameterType="java.util.List">
select * from t_mvc_book where bid in
<foreach collection="bookIds" item="bid" open="(" close=")" separator=",">
#{bid}
</foreach>
</select>

结果:

模糊查询

Mybatis对模糊查询共有三种方式
{}
${}
concat
#与$的区别
$会引起sql攻击
Java代码差别(#):%圣墟%
select * from t_mvc_book where bname like #{bname}
select * from t_mvc_book where bname like %圣墟% select * from t_mvc_book where bname like '${bname}' 人为加的引导
%圣墟%正常传值
比如:'%圣墟% or 1=1'
select * from t_mvc_book where bname like ''%圣墟% or 1=1''
BookMapper
 /**
*Mybatis对模糊查询共有三种方式
* #{}
* ${}
* concat
* @param bname
* @return
*/
List<Book> selectBooksLike1(@Param("bname")String bname);
List<Book> selectBooksLike2(@Param("bname")String bname);
List<Book> selectBooksLike3(@Param("bname")String bname);
BookService
 /**
*Mybatis对模糊查询共有三种方式
* #{}
* ${}
* concat
* @param bname
* @return
*/
List<Book> selectBooksLike1(String bname);
List<Book> selectBooksLike2(String bname);
List<Book> selectBooksLike3(String bname);

Bookmapper.xml

 <select id="selectBooksLike1" resultType="com.Mybatis.model.Book" parameterType="java.lang.String">
select * from t_mvc_book where bname like #{bname}
</select> <select id="selectBooksLike2" resultType="com.Mybatis.model.Book" parameterType="java.lang.String">
select * from t_mvc_book where bname like '${bname}'
</select> <select id="selectBooksLike3" resultType="com.Mybatis.model.Book" parameterType="java.lang.String">
select * from t_mvc_book where bname like concat(concat('%',#{bname}),'%')
</select>
BookServiceImpl
  @Override
public List<Book> selectBooksLike1(String bname) {
return bookMapper.selectBooksLike1(bname);
} @Override
public List<Book> selectBooksLike2(String bname) {
return bookMapper.selectBooksLike2(bname);
} @Override
public List<Book> selectBooksLike3(String bname) {
return bookMapper.selectBooksLike3(bname);
}

测试:

Mybatis结果集处理的五种情况

resultMap:适合使用返回值是自定义实体类的情况

resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型

使用resultMap返回自定义类型集合

使用resultType返回List<T>

使用resultType返回单个对象

使用resultType返回List<Map>,适用于多表查询返回结果集

使用resultType返回Map<String,Object>,适用于多表查询返回单个结果集

BookMapper
  List<Book> list1();
List<Book> list2();
List<Book> list3(BookVo bookVo);
List<Map> list4(Map map);
Map list5(Map map);
 Bookmapper.xml
   <select id="list1" resultMap="BaseResultMap">
select * from t_mvc_book
</select>
<select id="list2" resultMap="BaseResultMap">
select * from t_mvc_book
</select>
<select id="list3" resultType="com.Mybatis.model.Book" parameterType="com.Mybatis.model.vo.BookVo">
select * from t_mvc_book where bid in
<foreach collection="bookIds" item="bid" open="(" close=")" separator=",">
#{bid}
</foreach>
</select>
<select id="list4" resultType="java.util.Map" parameterType="java.util.Map">
select * from t_mvc_book where bid in
<foreach collection="bookIds" item="bid" open="(" close=")" separator=",">
#{bid}
</foreach>
</select>
<select id="list5" resultType="java.util.Map" parameterType="java.util.Map">
select * from t_mvc_book where bid = #{bid}
</select>
BookService
  List<Book> list1();
List<Book> list2();
List<Book> list3(BookVo bookVo);
List<Map> list4(Map map);
Map list5(Map map);
BookServiceImpl
 @Override
public List<Book> list2() {
return bookMapper.list2();
} @Override
public List<Book> list3(BookVo bookVo) {
return bookMapper.list3(bookVo);
} @Override
public List<Map> list4(Map map) {
return bookMapper.list4(map);
} @Override
public Map list5(Map map) {
return bookMapper.list5(map);
}
测试:

分页查询

为什么要重写mybatis的分页?

Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量offset和边界limit取结果),在大数据量的情况下这样的分页基本上是没有用的

1、导入pom依赖

 <dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>

Mybatis.cfg.xml配置拦截器

BookMapper
  /**
* 分页
* @param map
* @return
*/
List<Map> listPager(Map map);

Bookmapper.xml
 <select id="listPager" resultType="java.util.Map" parameterType="java.util.Map">
select * from t_mvc_book where bname like #{bname}
</select>
BookService
     /**
* 分页
* @param map
* @return
*/
List<Map> listPager(Map map, PageBean pageBean);
BookServiceImpl
 @Override
public List<Map> listPager(Map map, PageBean pageBean) {
if (pageBean != null && pageBean.isPagination()){
PageHelper.startPage(pageBean.getPage(),pageBean.getRows());
}
List<Map> list = bookMapper.listPager(map);
if (pageBean != null && pageBean.isPagination()){
PageInfo pageInfo = new PageInfo(list);
System.out.println("总记录数:"+pageInfo.getTotal());
System.out.println("当前页:"+pageInfo.getPageNum());
System.out.println("页大小:"+pageInfo.getPageSize());
pageBean.setTotal(pageInfo.getTotal()+"");
System.out.println("总页数:"+pageBean.getMaxPage());
}
return list;
}

测试:

特殊字符处理

>(>)

<(<)

&(&)

空格( )

<![CDATA[ <= ]]>

BookMapper
 /**
* 特殊字符处理
* @param bookVo
* @return
*/
List<Book> list6(BookVo bookVo);
Bookmapper.xml
  <select id="list6" resultType="com.Mybatis.model.Book" parameterType="com.Mybatis.model.vo.BookVo">
select * from t_mvc_book where <![CDATA[ price > #{min} and price < #{max} ]]>
</select>
BookService
 /**
* 特殊字符处理
* @param bookVo
* @return
*/
List<Book> list6(BookVo bookVo);
BookServiceImpl
  @Override
public List<Book> list6(BookVo bookVo) {
return bookMapper.list6(bookVo);
}

测试:

动态sql和分页的更多相关文章

  1. MyBatis框架(三)动态SQL,分页,二进制存入数据库图片

    一.动态sql语句,分页 1, <if>条件 <if test="key!=null"> 拼接sql语句 </if> 2, <choose ...

  2. Mybatis的动态sql以及分页

    mybatis动态sql If.trim.foreach <select id="selectBooksIn" resultType="com.jt.model.B ...

  3. mybatis动态sql和分页

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

  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. SpringBoot使用Mybatis注解开发教程-分页-动态sql

    代码示例可以参考个人GitHub项目kingboy-springboot-data 一.环境配置 1.引入mybatis依赖 compile( //SpringMVC 'org.springframe ...

  7. Mybatis分页查询与动态SQL

    一.Mybatis的分页查询 由于第一二节较为详细讲述了Mybatis的环境搭建,文件配置,SQL编写和Java代码实现,所以接下来的讲述都将只抽取关键代码和mapper文件中的关键sql,详细的流程 ...

  8. 动态sql语句、逆向工程(generator)、分页助手(pagehelper)

    1.动态sql语句 if if where 配合使用 <select id="selectByWhere" resultType="com.alibaba.wlq. ...

  9. 分享公司DAO层动态SQL的一些封装

    主题 公司在DAO层使用的框架是Spring Data JPA,这个框架很好用,基本不需要自己写SQL或者HQL就能完成大部分事情,但是偶尔有一些复杂的查询还是需要自己手写原生的Native SQL或 ...

随机推荐

  1. SpringBoot系列之profles配置多环境(篇一)

    SpringBoot profles配置多环境 23/100 发布文章 u014427391 软件环境简介 这里介绍一下SpringBoot提供的profiles属性加上maven配置一下多环境,在实 ...

  2. nohup 启动后台应用

    nohup java -Xmx1024M -Xms1024M -jar app.jar --logging.level=warn --logging.path=/var/log/app--server ...

  3. 全链路追踪技术选型:pinpoint vs skywalking

    目前分布式链路追踪系统基本都是根据谷歌的<Dapper大规模分布式系统的跟踪系统>这篇论文发展而来,主流的有zipkin,pinpoint,skywalking,cat,jaeger等. ...

  4. 2-Consul简介

    Consul 是什么 Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License ...

  5. ubuntu 18.04安装qq等应用

    deepin-wine 关于deepin-wine的安装参考https://github.com/wszqkzqk/deepin-wine-ubuntu 安装qq后中文乱码的解决方案 1. 安装中文支 ...

  6. javascript getElementsByClassName扩展函数

    代码: function getElementsByClassName(){ if(!arguments[0]){return []};//未指定任何参数,直接返回 var args=argument ...

  7. Vue – 基础学习(4):事件修饰符

    Vue – 基础学习(3):事件修饰符

  8. WEB图片水印实现

    很多大公司内网都有页面不可见水印,一旦图片截图发送给外部后,可以根据图片不可见水印进行溯源,查出发送人的信息. 原图:(就是下面白色的图片) PS 打开这个图片,在这个图片上新建图层,填充黑色,混合模 ...

  9. c# 读数据库二进制流到图片

    public Bitmap PictureShow(string connectionString, string opName, string productType)        {       ...

  10. python列表推导式及其简单应用

    列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表 一个简单平方 普通for循环 for i in range(1,5): print(i*i,end='') 列表推导式 res = [x ...