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. Docker安装和上传容器

    安装Docker Requirements for Mac(硬件要求): Mac的硬件必须是2010或者更新的,需要支持memory management unit(MMU) virtualizait ...

  2. tomcat闪退的解决思路

    用Tomcat总会遇到启动Tomcat闪退的问题. 什么叫闪退啊,就是闪一下,就退出了控制台. 都闪退了,为啥闪退也不知道呀,又没有错误信息,所以就要先阻止闪退,先看到错误信息,知道启动不起来的原因. ...

  3. 百度前端技术学院task1 总结

    1.居中:当使用text-align或者vatical-align无法达到居中的时候,如果知道元素的大小,可以采用先设为left或right为50%,再设置margin-left或者margin-ri ...

  4. AppBarLayout折叠时候的阴影

    最近在项目中遇到一个需求,AppBarLayout在完全展开时没有阴影,在完全收缩时展示阴影,这个功能可以通过设置StateListAnimator的轻松的实现. 首先,在res/animator目录 ...

  5. Mysql系列(十二)—— 索引下推优化

    索引条件下推(ICP)是对MySQL使用索引从表中检索行的情况的优化.如果没有ICP,存储引擎会遍历索引以查找基表中的行,并将它们返回给MySQL服务器,该服务器会评估WHERE行的条件.启用ICP后 ...

  6. 《STL源码剖析》——Vector

    vector vector的源码分为多个文件:vector.<<stl_vector.h>> vector的底层实现是在<<stl_vector.h>> ...

  7. html页面的渲染And<script>位置的影响

    周末加班敲代码的时用到了<script>标签,突然想到了一个问题:别的自测项目里面<script>我把他放在了不同位置,这里应该会对代码的执行与渲染后影响吧?于是今天专门进行了 ...

  8. webapi 集成NLog

    参考项目代码:SwaggerDemoApi 安装 打开nuget管理器--->搜索nlog,安装箭头所指的两个文件到你的项目中,config安装到你的API项目即可,nlog文件安装到你用得到n ...

  9. 安全漏洞系列(二)---站点信息侦测(C# MVC)

    参考地址:https://jingyan.baidu.com/article/77b8dc7fa657c26174eab631.html 概述:站点信息侦测漏洞会检测到用的版本信息等,然后借此进行一些 ...

  10. SpringApplication到底run了什么(上)

    在上篇文章:SpringBoot源码解析:创建SpringApplication对象实例中,我们详细描述了SpringApplication对象实例的创建过程,本篇文章继续看run方法的执行逻辑吧 p ...