前言
这篇博客主要为大家分享的是动态sql和分页的相关知识,基于我的上一篇博客MyBatis搭建好的基础上!
动态sql
使用的动态sql | 作用 |
---|---|
if | 判断 |
trim | 去除字符串左右两端空格 |
foreach | 遍历集合,批量查询、通常用于in关键字 |
其他 | choose、set、where |
这里博主着重讲一下foreach标签的使用!
foreach标签的使用
foreach的原始sql
select * from 表名 where id in 集合名
而foreach的动态sql对比原始的sql不同的是
in关键字后面接的集合名变成了一个动态的数组!
BookMapper中写一个遍历所有数据的方法
这里一定要记得加上参数的这个注解!
同步,BookService也需要加上同样的方法
BookServiceImpl中实现已创建好的接口
在对应的BookMapper.xml中配置
测试成功后的结果
模糊查询
StringUtils
用来模糊查询的工具类
package com.wangqiuping.util;
/**
* @author sunnyWang
* @site 公司的网址
* @company xxx公司
* @create 2020-10-21 13:02
*/
public class StringUtils {
public static String toLikeStr(String str){
return "%"+str+"%";
}
}
首先在BookMapper接口中加入模糊查询的三种方法
这里一定要记得加上注解
同步在BookService中也加入同样的方法
其次,在BookServiceImpl中加入实现的接口方法
第一种:参数中直接加入%%
在BookMapper.xml中配置需要注入的sql
第二种:使用${…}
注意这里不建议使用该方式,有SQL注入风险
第三种:SQL字符串拼接concat
最终模糊查询的结果
查询返回结果集
BookVo
用来展示页面数据和传参
package com.wangqiuping.model;
import java.util.List;
/**
* @author sunnyWang
* @site 公司的网址
* @company xxx公司
* @create 2020-10-21 14:25
* vo介绍
* mybatis、hibernate都是orm框架、
* 表所存在的列段在实体类model都有映射
* 实际开发中,会因为某一些需求改变model
* 破坏model封装性
* 此时为了保证model的封装性 就可以使用vo类来完成指定的需求
*
* */
public class BookVo extends Book{
private Float min;
private Float max;
private List<Integer> bookIds;
public Float getMin() {
return min;
}
public void setMin(Float min) {
this.min = min;
}
public Float getMax() {
return max;
}
public void setMax(Float max) {
this.max = max;
}
public List<Integer> getBookIds() {
return bookIds;
}
public void setBookIds(List<Integer> bookIds) {
this.bookIds = bookIds;
}
}
适合使用返回值是自定义实体类的情况
resultMap
resultType:适合使用返回值的数据类型是非自定义的,即jdk的提供的类型
动态分页
Mybatis的分页功能很弱,它是基于内存的分页(查出所有记录再按偏移量offset和边界limit取结果),在大数据量的情况下这样的分页基本上是没有用的
以下就是使用MyBatis的插件步骤
1、导入pom依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
2、MyBatis.cfg.xml中配置拦截器
配置分页插件PageHelper,4.0.0以后的版本支持自动识别使用的数据库
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
</plugin>
</plugins>
插件该段代码块的位置
3、在BookMapper中配置分页插件
<select id="listPager" resultType="java.util.Map" parameterType="java.util.Map">
select * from t_mvc_book where bname like #{bname}
</select>
4、BookMapper接口中加入分页的方法
List<Map> listPager(Map map);
5、BookService中加入分页的方法
List<Map> listPager(Map map,PageBean pageBean);
6、BookServiceImpl实现分页的方法
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;
}
4、测试类中处理分页结果
@Test
public void listPager(){
Map map=new HashMap();
map.put("bname","%圣墟%");
PageBean pageBean=new PageBean();
List<Map> list = this.bookService.listPager(map, pageBean);
for (Map map1 :list){
System.out.println(map1);
}
}
分页结果
分页相关信息
输出的分页条数
整体代码
pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wangqiuping</groupId>
<artifactId>MyBatis</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- ********************** junit单元测试依赖 ********************** -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- ********************** Java Servlet API ********************** -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
<!-- ********************** Mybatis依赖 ********************** -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!-- ********************** Mysql JDBC驱动 ********************** -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<!-- ********************** 日志配置 ********************** -->
<!--记得修改mybatis.cfg.xml添加如下内容-->
<!--<setting name="logImpl" value="LOG4J2"/>-->
<!--核心log4j2jar包-->