动态sql和分页
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和分页的更多相关文章
- MyBatis框架(三)动态SQL,分页,二进制存入数据库图片
一.动态sql语句,分页 1, <if>条件 <if test="key!=null"> 拼接sql语句 </if> 2, <choose ...
- Mybatis的动态sql以及分页
mybatis动态sql If.trim.foreach <select id="selectBooksIn" resultType="com.jt.model.B ...
- mybatis动态sql和分页
mybatis动态sql foreach BookMapper.xml <select id="selectBooksIn" resultType="com.lin ...
- Mybatis动态sql及分页、特殊符号
目的: mybatis动态sql(案例:万能查询) 查询返回结果集的处理 mybatis的分页运用 mybatis的特殊符号 mybatis动态sql(案例:万能查询) 根据id查询 模糊查询 (参数 ...
- mybatis动态sql以及分页
1.mybatis动态sql 2.模糊查询 3.查询返回结果集的处理 4.分页查询 5.特殊字符处理 1.mybatis动态sql If.trim.foreach If 标签判断某一字段是否为空 &l ...
- SpringBoot使用Mybatis注解开发教程-分页-动态sql
代码示例可以参考个人GitHub项目kingboy-springboot-data 一.环境配置 1.引入mybatis依赖 compile( //SpringMVC 'org.springframe ...
- Mybatis分页查询与动态SQL
一.Mybatis的分页查询 由于第一二节较为详细讲述了Mybatis的环境搭建,文件配置,SQL编写和Java代码实现,所以接下来的讲述都将只抽取关键代码和mapper文件中的关键sql,详细的流程 ...
- 动态sql语句、逆向工程(generator)、分页助手(pagehelper)
1.动态sql语句 if if where 配合使用 <select id="selectByWhere" resultType="com.alibaba.wlq. ...
- 分享公司DAO层动态SQL的一些封装
主题 公司在DAO层使用的框架是Spring Data JPA,这个框架很好用,基本不需要自己写SQL或者HQL就能完成大部分事情,但是偶尔有一些复杂的查询还是需要自己手写原生的Native SQL或 ...
随机推荐
- LInux 学习笔记系列
1.Linux 就该这么学的笔记系列
- Android系统HAL开发实例
1.前言 Android系统使用HAL这种设计模式,使得上层服务与底层硬件之间的耦合度降低,在文件: AOSP/hardware/libhardware/include/hardware/hardwa ...
- Laravel源码解析之model(代码)
本篇文章给大家带来的内容是关于Laravel源码解析之model(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 前言 提前预祝猿人们国庆快乐,吃好.喝好.玩好,我会在电视上看 ...
- 多年老项目添加cocoapod管理之后的各种问题解决方案
整个组件化过程中遇到的问题及解决方案原文出处 hehuoya.com pod install 报警告(debug.release..) 解决方案:other link flags : $(inheri ...
- 解决百度UEditor列出图片列出文件时返回的文件路径为磁盘绝对路径的问题
替换绝对路径为空 String str = new ActionEnter(request, buffer.toString(), "config.json").exec(); S ...
- linux centos7下源码 tar安装mysql5.7.22或mysql5.7.20 图文详解
之前用的rpm安装的每次安装都是最新的,,,导致每次版本不统一... 现在用tar包安装5.7.22和5.7.20一样的 5.7.20之后的和之前的版本还是有点不一样的 官网地址 https:// ...
- eclipse使用maven,启动工程tomcat报错:java.lang.ClassNotFoundException: org.springframework.web.context.Contex
maven是个不错的管理jar包工具,但是我们在eclipse使用maven时,总是遇上这样那样的问题,比如今天,我编译工程,启动过后,tomcat报错:java.lang.ClassNotFound ...
- Kafka学习笔记之Kafka背景及架构介绍
0x00 概述 本文介绍了Kafka的创建背景,设计目标,使用消息系统的优势以及目前流行的消息系统对比.并介绍了Kafka的架构,Producer消息路由,Consumer Group以及由其实现的不 ...
- 我得新博客上线了采用Vue+Layui的结合开发,后台采用asp.net mvc
地址:www.zswblog.xyz 写完这个博客项目我真的很开心! 希望博客园的大佬们能去看看,如果可以希望帮我在Layui的年度案例点一个赞,谢谢! 地址:https://fly.layui.co ...
- 在ASP.NET MVC中创建自定义模块
创建模块 module是实现了System.Web.IHttpModule接口的类.该接口定义了两个方法: Init:当模块初始化时被调用,传入的参数为HttpApplication对象,用于注册请求 ...



