MyBatis Plus逻辑删除和分页插件使用详解

 更新时间:2020年12月03日 10:07:47   作者:以梦为马、不负韶华  
这篇文章主要介绍了MyBatis Plus之逻辑删除和分页插件使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

概要:Mybatis plus 官网链接 :https://mp.baomidou.com/guide/

一、依赖配置:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.2.6.RELEASE</version>
  <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <groupId>com.example</groupId>
 <artifactId>demo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <name>demo</name>
 <description>Demo project for Spring Boot</description>

 <properties>
  <java.version>1.8</java.version>
 </properties>

 <dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <scope>runtime</scope>
  </dependency>
  <dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <optional>true</optional>
  </dependency>
  <dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatisplus-spring-boot-starter</artifactId>
   <version>1.0.5</version>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
   <exclusions>
    <exclusion>
     <groupId>org.junit.vintage</groupId>
     <artifactId>junit-vintage-engine</artifactId>
    </exclusion>
   </exclusions>
  </dependency>
  <dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus</artifactId>
   <version>3.3.1</version>
  </dependency>
 </dependencies>

 <build>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
  </plugins>
 </build>

</project>

二、数据源和插件相关配置

- application.yml

server:
 port: 8080
 servlet:
 context-path: /
# Logger Config
logging:
 level:
 com.baomidou.mybatisplus.samples.quickstart: debug

- db.properties

spring.datasource.jdbc-url = jdbc:mysql://localhost:3306/demo?serverTimezone=UTC&characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = 123456
spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver

- MybatisPlusConfig

package com.example.demo.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableTransactionManagement
@Configuration
@MapperScan("com.example.demo.mapper")
public class MybatisPlusConfig {

 @Bean("paginationInterceptor")
 public PaginationInterceptor paginationInterceptor() {
  PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
  paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
  paginationInterceptor.setDbType(DbType.MYSQL);
  return paginationInterceptor;
 }
}

- SqlSessionConfig

package com.example.demo.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;

import org.apache.ibatis.plugin.Interceptor;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;

@Configuration
@PropertySource("classpath:db/db.properties")
public class SqlSessionConfig {

 private Logger logger = LoggerFactory.getLogger(SqlSessionConfig.class);

 @Bean("myDatasource")
 @ConfigurationProperties(prefix="spring.datasource")
 public DataSource masterDataSource() {
  return DataSourceBuilder.create().build();
 }

 @Bean("mySqlSessionFactoryBean")
 public MybatisSqlSessionFactoryBean createSqlSessionFactory(@Qualifier("myDatasource") DataSource dataSource,
                @Qualifier("paginationInterceptor") PaginationInterceptor paginationInterceptor) {
  // MybatisSqlSessionFactory
  MybatisSqlSessionFactoryBean sqlSessionFactoryBean = null;
  try {
   // 实例SessionFactory
   sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
   // 配置数据源
   sqlSessionFactoryBean.setDataSource(dataSource);
   // 设置 MyBatis-Plus 分页插件
   Interceptor [] plugins = {paginationInterceptor};
   sqlSessionFactoryBean.setPlugins(plugins);
   // 加载MyBatis配置文件
   PathMatchingResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
   sqlSessionFactoryBean.setMapperLocations(resourcePatternResolver.getResources("classpath*:mapper/*.xml"));
  } catch (Exception e) {
   logger.error("Init SqlSessionFactory Error:{}", e.getMessage());
  }
  return sqlSessionFactoryBean;
 }

 @Bean
 public MapperScannerConfigurer myGetMapperScannerConfigurer() {
  MapperScannerConfigurer myMapperScannerConfigurer = new MapperScannerConfigurer();
  myMapperScannerConfigurer.setBasePackage("com.example.demo.mapper");
  myMapperScannerConfigurer.setSqlSessionFactoryBeanName("mySqlSessionFactoryBean");
  return myMapperScannerConfigurer;
 }

}

三、测试类

- UserController

package com.example.demo.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.bean.UserDTO;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.util.List;

@RestController
@RequestMapping(value = "/demo")
public class UserController {

 @Autowired
 private UserService userService;

 @RequestMapping(value = "/create", method = RequestMethod.POST)
 public String create(@RequestBody UserDTO userDTO){
  User user = new User();
  user.setName(userDTO.getName());
  user.setPhone(userDTO.getPhone());
  user.setCreateTime(LocalDateTime.now());
  user.setEnable(true);
  user.setVersion(1L);
  userService.insert(user);
  return "ok";
 }

 @RequestMapping(value = "/delete", method = RequestMethod.POST)
 public String create(Long id){
  userService.deleteById(id);
  return "ok";
 }

 @RequestMapping(value = "/update", method = RequestMethod.POST)
 public String update(@RequestBody UserDTO userDTO){
  User user = new User();
  user.setId(userDTO.getId());
  user.setName(userDTO.getName());
  user.setPhone(userDTO.getPhone());
  user.setCreateTime(LocalDateTime.now());
  userService.updateById(user);
  return "ok";
 }

 @RequestMapping(value = "/queryPage", method = RequestMethod.POST)
 public List<User> update(Integer pageNo, Integer pageSize){
  Page<User> page = new Page<>(pageNo, pageSize);
  return userService.queryList(page, 1);
 }
}

- UserService

package com.example.demo.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.mapper.UserMapper;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class UserServiceImpl implements UserService {

 @Autowired
 private UserMapper userMapper;

 @Override
 public int insert(User user) {
  return userMapper.insert(user);
 }

 @Override
 public int deleteById(Long id) {
  return userMapper.deleteById(id);
 }

 @Override
 public int updateById(User user) {
  return userMapper.updateById(user);
 }

 @Override
 public List<User> queryList(Page<User> page, Integer enable) {
  return userMapper.selectPageByEnable(page, enable).getRecords();
 }
}

- UserMapper

package com.example.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {

 IPage<User> selectPageByEnable(Page<?> page, Integer enable);

}

- User

package com.example.demo.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.time.LocalDateTime;

@Data
@TableName("user")
public class User{

 @TableId(value = "id", type = IdType.AUTO)
 private Long id;

 @TableField("name")
 private String name;

 @TableField("phone")
 private String phone;

 @TableField("create_time")
 private LocalDateTime createTime;

 @TableLogic(delval = "0", value = "1")
 @TableField("enable")
 private boolean enable;

 @Version
 @TableField("version")
 private Long version;

}

- SqlMap

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.demo.mapper.UserMapper">

 <!-- 通用查询映射结果 -->
 <resultMap id="BaseResultMap" type="com.example.demo.entity.User">
  <id column="id" property="id" />
  <result column="name" property="name" />
  <result column="phone" property="phone" />
  <result column="create_time" property="createTime" />
  <result column="enable" property="enable" />
  <result column="version" property="version" />
 </resultMap>

 <select id="selectPageByEnable" resultMap="BaseResultMap">
  SELECT * FROM user WHERE enable=#{enable} order by create_time desc
 </select>
</mapper>

- DDL

CREATE TABLE `user` (
 `id` bigint NOT NULL AUTO_INCREMENT,
 `name` varchar(20) NOT NULL,
 `phone` char(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
 `enable` tinyint NOT NULL,
 `create_time` datetime NOT NULL,
 `version` bigint NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

到此这篇关于MyBatis Plus之逻辑删除和分页插件使用的文章就介绍到这了,更多相关MyBatis Plus逻辑删除内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解Java线程-守护线程与用户线程

    详解Java线程-守护线程与用户线程

    这篇文章主要介绍了Java守护线程与用户线程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • MyBatis-Plus非表字段的三种处理方法小结

    MyBatis-Plus非表字段的三种处理方法小结

    这篇文章主要介绍了MyBatis-Plus非表字段的三种处理方法小结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • lambdaQueryWrapper多条件嵌套查询方式

    lambdaQueryWrapper多条件嵌套查询方式

    这篇文章主要介绍了lambdaQueryWrapper多条件嵌套查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
    2022-01-01
  • jmeter设置全局变量与正则表达式提取器过程图解

    jmeter设置全局变量与正则表达式提取器过程图解

    这篇文章主要介绍了jmeter设置全局变量与正则表达式提取器过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • springboot项目部署到宝塔的详细图文教程

    springboot项目部署到宝塔的详细图文教程

    网上关于宝塔运行springBoot的东西说有点迷糊,但是有一句话很重要,Spring boot项目只需要JDK环境即可部署成功,下面这篇文章主要给大家介绍了关于springboot项目部署到宝塔的详细图文教程,需要的朋友可以参考下
    2023-05-05
  • Java参数传递及值传递实现原理详解

    Java参数传递及值传递实现原理详解

    这篇文章主要介绍了Java参数传递及值传递实现原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • SpringBoot部署到外部Tomcat无法注册到Nacos服务端的解决思路

    SpringBoot部署到外部Tomcat无法注册到Nacos服务端的解决思路

    这篇文章主要介绍了SpringBoot部署到外部Tomcat无法注册到Nacos服务端,本文给大家分享完美解决思路,结合实例代码给大家讲解的非常详细,需要的朋友可以参考下
    2023-03-03
  • JAVA过滤标签实现将html内容转换为文本的方法示例

    JAVA过滤标签实现将html内容转换为文本的方法示例

    这篇文章主要介绍了JAVA过滤标签实现将html内容转换为文本的方法,涉及java针对HTML代码的正则替换相关操作技巧,需要的朋友可以参考下
    2017-07-07
  • 详解SpringBoot中关于%2e的Trick

    详解SpringBoot中关于%2e的Trick

    这篇文章主要介绍了SpringBoot中关于%2e的Trick,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 使用JPA中@Query 注解实现update 操作方法(必看)

    使用JPA中@Query 注解实现update 操作方法(必看)

    下面小编就为大家带来一篇使用JPA中@Query 注解实现update 操作方法(必看)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论