MyBatis的动态sql和分页

前言

这篇博客主要为大家分享的是动态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>
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值