逻辑删除与分页插件怎么在MyBatis Plus中使用
创始人
2024-11-21 10:01:34
0次

一、依赖配置:

<?xml version="1.0" encoding="UTF-8"?>

 4.0.0
 
  org.springframework.boot
  spring-boot-starter-parent
  2.2.6.RELEASE
   
 
 com.example
 demo
 0.0.1-SNAPSHOT
 demo
 Demo project for Spring Boot

 
  1.8
 

 
  
   org.springframework.boot
   spring-boot-starter-web
  

  
   mysql
   mysql-connector-java
   runtime
  
  
   org.projectlombok
   lombok
   true
  
  
   com.baomidou
   mybatisplus-spring-boot-starter
   1.0.5
  
  
   org.springframework.boot
   spring-boot-starter-test
   test
   
    
     org.junit.vintage
     junit-vintage-engine
    
   
  
  
   com.baomidou
   mybatis-plus
   3.3.1
  
 

 
  
   
    org.springframework.boot
    spring-boot-maven-plugin
   
  
 

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

- 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 update(Integer pageNo, Integer pageSize){
  Page 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 queryList(Page 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 {

 IPage 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"?>




 
 
  
  
  
  
  
  
 

 

- 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;

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...