Mybatis-Plus的使用

Mybatis-Plus的使用

  • 一、核心特性
  • 二、基础配置
    • [2.1 依赖配置](#2.1 依赖配置)
    • [2.2 yml文件配置](#2.2 yml文件配置)
  • 三、实际使用
    • [3.1 添加配置类](#3.1 添加配置类)
    • [3.2 创建实体类](#3.2 创建实体类)
    • [3.3 创建Mapper接口](#3.3 创建Mapper接口)
    • [3.4 创建Service层](#3.4 创建Service层)
    • [3.5 创建Service实现层](#3.5 创建Service实现层)
    • [3.6 创建Controller](#3.6 创建Controller)
    • [3.7 用配置类里面的操作,完善Service实现层(使用Lambda方法)](#3.7 用配置类里面的操作,完善Service实现层(使用Lambda方法))

一、核心特性

  1. 无侵入:只做增强不做改变,引入它不会对现有工程产生影响
  2. 损耗小:启动即会自动注入基本CURD,性能基本无损耗
  3. 强大的CRUD操作:内置通用Mapper、通用Service
  4. 支持Lambda形式调用:通过Lambda表达式,方便地编写各类查询条件
  5. 支持主键自动生成:支持多达4种主键策略
  6. 支持ActiveRecord模式:支持ActiveRecord形式调用
  7. 支持自定义全局通用操作:支持全局通用方法注入
  8. 内置代码生成器:采用代码或者Maven插件可快速生成Mapper、Model、Service、Controller层代码
  9. 内置分页插件:基于MyBatis物理分页,开发者无需关心具体操作
  10. 内置性能分析插件:可输出SQL语句以及其执行时间

二、基础配置

2.1 依赖配置

java 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webmvc</artifactId>
</dependency>
        
<!-- MyBatis Plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.5</version>
</dependency>

<!-- MySQL驱动 -->
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>
       
<!-- Lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

2.2 yml文件配置

java 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/demo1?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

# MyBatis Plus配置
mybatis-plus:
  configuration:
    # 日志输出
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    # 驼峰命名转换
    map-underscore-to-camel-case: true
  global-config:
    db-config:
      # 主键类型
      id-type: auto
      # 逻辑删除字段
      logic-delete-field: deleted
      logic-delete-value: 1
      logic-not-delete-value: 0
  # Mapper XML文件位置
  mapper-locations: classpath*:/mapper/**/*.xml

三、实际使用

3.1 添加配置类

java 复制代码
package cn.itwy.studydemo1;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.apache.ibatis.reflection.MetaObject;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan("cn.itwy.studydemo1")
public class MyBatisPlusConfig {

    // 分页插件
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

    // 自动填充处理器
    public MetaObjectHandler mataObjectHandler() {
        return new MetaObjectHandler(){

            @Override
            public void insertFill(MetaObject metaObject) {
                this.strictInsertFill(metaObject, "createTime", java.util.Date.class, new java.util.Date());
                this.strictInsertFill(metaObject, "updateTime", java.util.Date.class, new java.util.Date());
            }

            @Override
            public void updateFill(MetaObject metaObject) {
                this.strictUpdateFill(metaObject, "updateTime", java.util.Date.class, new java.util.Date());
            }
        };
    }
}

3.2 创建实体类

java 复制代码
package cn.itwy.studydemo1;

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

import java.time.LocalDateTime;

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

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

    private String username;

    private String email;

    private Integer age;

    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    @TableLogic
    private Integer deleted;
}

3.3 创建Mapper接口

java 复制代码
package cn.itwy.studydemo1;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface UserMapper extends BaseMapper<User> {
    /**
     * 根据用户名查询用户
     */
    @Select("SELECT * FROM user WHERE username = #{username}")
    User selectByUsername(@Param("username") String username);
}  

3.4 创建Service层

java 复制代码
package cn.itwy.studydemo1;

import com.baomidou.mybatisplus.extension.service.IService;

public interface UserService extends IService<User> {
    User selectByUsername(String username);
}

3.5 创建Service实现层

java 复制代码
package cn.itwy.studydemo1;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    @Override
    public User selectByUsername(String username) {
        return baseMapper.selectByUsername(username);
    }
}

3.6 创建Controller

java 复制代码
package cn.itwy.studydemo1;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/all")
    public List<User> listAllUsers() {
        return userService.list();
    }

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getById(id);
    }

    @PostMapping("/creatUser")
    public boolean createUser(@RequestBody User user) {
        return userService.save(user);
    }

    @PostMapping("/changeUser/{id}")
    public boolean changeUser(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        return userService.updateById(user);
    }

    @DeleteMapping("/delete/{id}")
    public boolean deleteUser(@PathVariable Long id) {
        return userService.removeById(id);
    }

    @GetMapping("/page")
    public IPage<User> page(@RequestParam(defaultValue = "1") Integer current, @RequestParam(defaultValue = "10") Integer size) {
        return userService.page(new Page<>(current, size));
    }
}

3.7 用配置类里面的操作,完善Service实现层(使用Lambda方法)

java 复制代码
package cn.itwy.studydemo1;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    @Override
    public User selectByUsername(String username) {
        return baseMapper.selectByUsername(username);
    }

    public List<User> searchUsers(String username, Integer minAge, Integer maxAge) {
        return lambdaQuery()
                .like(StringUtils.isNotBlank(username), User::getUsername, username)
                .ge(minAge != null, User::getAge, minAge)
                .le(maxAge != null, User::getAge, maxAge)
                .orderByDesc(User::getCreateTime)
                .list();
    }

    // 分页查询
    public IPage<User> pageUsers(Integer current, Integer size, String keyword) {
        return lambdaQuery()
                .like(StringUtils.isNotBlank(keyword), User::getUsername, keyword)
                .or()
                .like(StringUtils.isNotBlank(keyword), User::getEmail, keyword)
                .orderByDesc(User::getCreateTime)
                .page(new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(current, size));
    }


    // 更新操作
    public boolean updateUser(Long id, Integer age) {
        return lambdaUpdate()
                .eq(User::getId, id)
                .set(User::getAge, age)
                .update();
    }
}
相关推荐
Meepo_haha5 小时前
配置MyBatis-Plus打印执行的 SQL 语句到控制台或日志文件中
数据库·sql·mybatis
极创信息5 小时前
企业信创产品认证全流程:从信创适配到信创认证的实操指南(2026版)
java·数据库·spring boot·mysql·matlab·mybatis·软件工程
神舟之光8 小时前
Springboot+MyBatis-Plus连接MySQL初体验
spring boot·mysql·mybatis
Echo27178 小时前
mybatis的知识点总结
mybatis
小江的记录本1 天前
【注解】常见 Java 注解系统性知识体系总结(附《全方位对比表》+ 思维导图)
java·前端·spring boot·后端·spring·mybatis·web
小飞Coding1 天前
MyBatis Mapper 实现原理彻底解密——从动态代理到 JDBC 执行全链路剖析
后端·mybatis
华科易迅1 天前
MybatisPlus乐观锁
java·开发语言·mybatis
野犬寒鸦1 天前
Redis复习记录Day03
服务器·redis·后端·面试·bootstrap·mybatis
爱丽_1 天前
MyBatis 性能优化:批处理、分页、缓存与慢 SQL 定位
缓存·性能优化·mybatis