MyBatis-plus使用

1 基础介绍

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

它已经封装好了一些crud方法,我们不需要再写xml了,直接调用这些方法就行,就类似于JPA(java持久层API,可以理解为一种规范,Hibernate就是其具体一个实现)。

Mybatis优势:

  • 通用CRUD操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求;
  • 多种主键策略:支持多达4种主键策略(内含分布式唯一ID生成器),可自由配置,完美解决主键问题;
  • 内置分页插件:基于Mybatis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于写基本List查询;
  • 内置性能分析插件:可输出Sql语句以及其执行时间,建议开发测试时启用该功能,能有效解决慢查询;
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,预防误操作;
  • 。。。。。。

SpringBoot引入:

XML 复制代码
        <!-- MySql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!-- 连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.11</version>
        </dependency>
        <!-- mybatis工具 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>

application.yml配置:

bash 复制代码
# mybatis-plus相关配置
mybatis-plus:
  # xml扫描,多个目录用逗号或者分号分隔(告诉 Mapper 所对应的 XML 文件位置)
  mapper-locations: classpath:mapper/*.xml
  # 以下配置均有默认值,可以不设置
  global-config:
    db-config:
      #主键类型 AUTO:"数据库ID自增" INPUT:"用户输入ID",ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
      id-type: auto
      #字段策略 IGNORED:"忽略判断"  NOT_NULL:"非 NULL 判断")  NOT_EMPTY:"非空判断"
      field-strategy: NOT_EMPTY
      #数据库类型
      db-type: MYSQL
  configuration:
    # 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射
    map-underscore-to-camel-case: true
    # 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
    call-setters-on-nulls: true
    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2 快速使用

配置信息如下:

数据库信息如下:

设置实体类:

java 复制代码
@Data
@TableName("user")  // 表名
public class UserEntity {
    
    @TableId(type = IdType.AUTO)
    private Integer id;
    private String name;
    private String password;
    private Integer rank;
    private Integer status;
}

注解详细解释可以参考:注解 | MyBatis-Plus

创建Mapper接口:

java 复制代码
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lmlsj.springbootdemo.entity.UserEntity;
import org.springframework.stereotype.Repository;

@Repository
public interface UserMapper extends BaseMapper<UserEntity> {
}

创建service:

创建control层:

java 复制代码
package com.lmlsj.springbootdemo.control;

import com.lmlsj.springbootdemo.Util.ResultVo.NotControllerResponseAdvice;
import com.lmlsj.springbootdemo.entity.UserEntity;
import com.lmlsj.springbootdemo.service.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserControl {

    @Autowired
    private UserServiceImpl userService;

    @GetMapping("/findbyid")
    @NotControllerResponseAdvice
    public UserEntity FindUserByID(@RequestParam("id") int id){
        return userService.GetUserInfoById(id);
    }

    @GetMapping("/list")
    public List<UserEntity> ListUser(){
        List<UserEntity> userList = userService.list();
        return userList;
    }

}

实现效果:

list接口实现效果:

可以看到一些基本的增删改查操作都已经进行了封装,无需再单独写SQL语句。

3 查询详解

前面案例介绍了两个接口,分别是Service CRUD 接口和Mapper CRUD 接口。

Service CRUD 接口支持的查询方式有:

save、saveOrUpdate、remove、update、get、list、page、count、chain

Mapper CRUD 接口支持的查询方式有:

insert、delete、update、select

具体介绍可以参考:CRUD 接口 | MyBatis-Plus

其次可以使用条件构造器进行查询:

AbstractWrapper是QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类用于生成 sql 的 where 条件。

java 复制代码
    @GetMapping("/query1")
    public ResultVo Query1(){
        QueryWrapper<UserEntity> query = new QueryWrapper<>();
        query.select("id","name","rank");
        List<UserEntity> userlist = userService.list(query);
        userlist.forEach(user -> {
            System.out.println(user.getName() + user.getRank());
        });


        //Lamda查询方式
        QueryWrapper<UserEntity> query2 = new QueryWrapper<>();
        query2.lambda().eq(UserEntity::getName,"lmslj");
        List<UserEntity> userlist2 = userService.list(query2);
        userlist2.forEach(user -> {
            System.out.println(user.getName() + user.getPassword());
        });

        return new ResultVo("前往console查看");
    }

查看结果:

可以根据需要构造其他查询条件:

query2.like("name","l");

query2.between("rank",0,2);

条件构造器参考:条件构造器 | MyBatis-Plus

四 插件

目前已经支持较丰富的插件,使用可以参考:插件主体 | MyBatis-Plus

相关推荐
好开心337 分钟前
axios的使用
开发语言·前端·javascript·前端框架·html
又蓝30 分钟前
使用 Python 操作 Excel 表格
开发语言·python·excel
小灰灰要减肥30 分钟前
装饰者模式
java
张铁铁是个小胖子42 分钟前
MyBatis学习
java·学习·mybatis
余~~1853816280043 分钟前
稳定的碰一碰发视频、碰一碰矩阵源码技术开发,支持OEM
开发语言·人工智能·python·音视频
Am心若依旧4091 小时前
[c++11(二)]Lambda表达式和Function包装器及bind函数
开发语言·c++
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 20课题、单元测试
开发语言·青少年编程·单元测试·编程与数学·goweb
Yan.love1 小时前
开发场景中Java 集合的最佳选择
java·数据结构·链表
椰椰椰耶1 小时前
【文档搜索引擎】搜索模块的完整实现
java·搜索引擎
大G哥1 小时前
java提高正则处理效率
java·开发语言