0
点赞
收藏
分享

微信扫一扫

MyBatis-Plus介绍

1. MyBatis-Plus简介   5

官网:https://baomidou.com/

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

1.2 主要特点    5

MyBatis-Plus介绍_mybatis-puls

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑

强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求

支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错

支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题

内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用

内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询

分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库

1.3 依赖   5

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.1</version>
</dependency>

2. MyBatis-Plus入门    6

前面介绍了MyBatis-Plus,当前就以角色管理为例讲解MyBatis-Plus的使用

MyBatis-Plus介绍_System_02

2.1 准备创建数据库   6

创建数据库

CREATE DATABASE `guigu-oa`  /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
use `guigu-oa`;

MyBatis-Plus介绍_System_03

创建表

CREATE TABLE `sys_role` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '角色id',
  `role_name` varchar(20) NOT NULL DEFAULT '' COMMENT '角色名称',
  `role_code` varchar(20) DEFAULT NULL COMMENT '角色编码',
  `description` varchar(255) DEFAULT NULL COMMENT '描述',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `is_deleted` tinyint(3) NOT NULL DEFAULT '0' COMMENT '删除标记(0:不可用 1:可用)',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='角色';

MyBatis-Plus介绍_spring_04

2.2 配置文件   6

配置 MySQL 数据库的相关配置及Mybatis-Plus日志

在service-oa resources目录下

application.yml

spring:
  application:
    name: service-oa
  profiles:
    active: dev

在service-oa resources目录下

application-dev.yml

server:
  port: 8800
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 查看日志
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/guigu-oa?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
    username: root
    password: lzl

2.3 启动类    6

在 Spring Boot 启动类中添加 `@MapperScan` 注解,扫描 Mapper 文件夹:

在service-oa模块

ServiceAuthApplication

package com.atguigu.auth;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

//启动类  6
@SpringBootApplication
@MapperScan("com.atguigu.auth.mapper")//表示能找到mapper动态创建的对象
public class ServiceAuthApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceAuthApplication.class, args);
    }
}

2.4 实体类   6

已引入,实体类说明:

实体类注解详细文档:https://baomidou.com/pages/223848/

@TableName:表名注解,标识实体类对应的表

@TableId:主键注解,type = IdType.AUTO(数据库 ID 自增)

@TableField:字段注解(非主键)

@TableLogic:逻辑删除        7

代码在model  com.atguigu.model.system

SysRole

package com.atguigu.model.system;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.atguigu.model.base.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;


@Data //生成get set方法    6
@ApiModel(description = "角色")
@TableName("sys_role")//指定对应哪张表
public class SysRole extends BaseEntity {
	
	private static final long serialVersionUID = 1L;

	//@NotBlank(message = "角色名称不能为空")
	@ApiModelProperty(value = "角色名称")
	@TableField("role_name") //表示根表中的哪个字段对应
	private String roleName;

	@ApiModelProperty(value = "角色编码")
	@TableField("role_code")
	private String roleCode;

	@ApiModelProperty(value = "描述")
	@TableField("description")
	private String description;

}

BaseEntity

package com.atguigu.model.base;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Data
public class BaseEntity implements Serializable {

    @TableId(type = IdType.AUTO) //IdType.AUTO主键自动增长    6
    private Long id;

    @TableField("create_time")
    private Date createTime;

    @TableField("update_time")
    private Date updateTime;

    @TableLogic
    @TableField("is_deleted")
    private Integer isDeleted;

    @TableField(exist = false) //表示表里可以没有与之对应的字段   6
    private Map<String,Object> param = new HashMap<>();
}

2.5 添加Mapper类   6

在service-oa模块

持久层接口SysRoleMapper

package com.atguigu.auth.mapper;

import com.atguigu.model.system.SysRole;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;

//持久层接口  6
@Repository //交给spring去管理   6
public interface SysRoleMapper extends BaseMapper<SysRole> {

}

2.6 测试   6

在service-oa模块中test

TestMpDemo1

package com.atguigu.auth;

import com.atguigu.auth.mapper.SysRoleMapper;
import com.atguigu.model.system.SysRole;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

//测试mybatis-plus   6
@SpringBootTest
public class TestMpDemo1 {

    //注入
    @Autowired
    private SysRoleMapper mapper;

   
}

手动往数据库中加入数据,方便测试

MyBatis-Plus介绍_spring_05

查询所有记录    6

TestMpDemo1 查询所有记录 

//查询所有记录   6
    @Test
    public void getAll() {
        List<SysRole> list = mapper.selectList(null);
        System.out.println(list);
    }

成功没问题

MyBatis-Plus介绍_spring_06

添加操作    7

TestMpDemo1添加操作   7

//添加操作   7
    @Test
    public void add() {
        SysRole sysRole = new SysRole();
        sysRole.setRoleName("角色管理员1");
        sysRole.setRoleCode("role1");
        sysRole.setDescription("角色管理员1");

        int rows = mapper.insert(sysRole);
        System.out.println(rows);
        System.out.println(sysRole.getId());
    }

MyBatis-Plus介绍_mybatis-puls_07

MyBatis-Plus介绍_mybatis-puls_08

修改操作    7

TestMpDemo1  修改操作   7

//修改操作   7
    @Test
    public void update() {
        //根据id查询
        SysRole role = mapper.selectById(11);
        //设置修改值
        role.setRoleName("atguigu角色管理员");
        //调用方法实现最终修改
        int rows = mapper.updateById(role);
        System.out.println(rows);
    }

MyBatis-Plus介绍_Test_09

MyBatis-Plus介绍_spring_10

删除操作    7

TestMpDemo1  删除操作   7

MyBatis-Plus介绍_System_11

单个删除

//删除操作   7
    @Test
    public void deleteId() {
        int rows = mapper.deleteById(11);
    }

我们执行逻辑删除,成功删除标志位果然变成了1

MyBatis-Plus介绍_spring_12

批量删除

//批量删除   7
    @Test
    public void testDeleteBatchIds() {
        //删除id是1 和 2
        int result = mapper.deleteBatchIds(Arrays.asList(1, 2));
        System.out.println(result);
    }

MyBatis-Plus介绍_Test_13

3. MyBatis-Plus条件构造器   8

MyBatis-Plus介绍_Test_14

Wrapper : 条件构造抽象类,最顶端父类

AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件

QueryWrapper : Entity 对象封装操作类,不是用lambda语法

UpdateWrapper : Update 条件封装,用于Entity对象更新操作

AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。

LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper

LambdaUpdateWrapper : Lambda 更新封装Wrapper

注意:以下条件构造器的方法入参中的 `column `均表示数据库字段

service-oa 模块的test

TestMpDemo1

QueryWrapper

//条件查询  8
    @Test
    public void testQuery1(){
        //创建QueryWrapper对象,调用方法封装条件
        QueryWrapper<SysRole> wrapper = new QueryWrapper<>();
        wrapper.eq("role_name", "总经理");
        //调用mp方法实现查询操作
        List<SysRole> list = mapper.selectList(wrapper);
        System.out.println(list);
    }

MyBatis-Plus介绍_Test_15

LambdaQueryWrapper

//条件查询   8
    @Test
    public void testQuery2() {
        //LambdaQueryWrapper,调用方法封装条件
        LambdaQueryWrapper<SysRole> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(SysRole::getRoleName,"总经理");
        //调用mp方法实现查询操作
        List<SysRole> list = mapper.selectList(wrapper);
        System.out.println(list);
    }

MyBatis-Plus介绍_Test_16

4. MyBatis-Plus封装service层   9

MyBatis-Plus介绍_System_17

4.1 添加service接口   9

service-oa模块

业务层接口SysRoleService

package com.atguigu.auth.service;


import com.atguigu.model.system.SysRole;
import com.baomidou.mybatisplus.extension.service.IService;

//业务层接口   9
public interface SysRoleService extends IService<SysRole> {
}

业务层接口实现类SysRoleServiceImpl

package com.atguigu.auth.service.impl;

import com.atguigu.auth.mapper.SysRoleMapper;
import com.atguigu.auth.service.SysRoleService;
import com.atguigu.model.system.SysRole;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

//业务层接口实现类   9
@Service //交给spring管理   9
public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements SysRoleService {
}

4.2 测试    9

service-oa模块 test目录

TestMpDemo2

package com.atguigu.auth;

import com.atguigu.auth.service.SysRoleService;
import com.atguigu.model.system.SysRole;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class TestMpDemo2 {

    //注入
    @Autowired
    private SysRoleService service;

    //查询所有记录  9
    @Test
    public void getAll() {
        List<SysRole> list = service.list();
        System.out.println(list);
    }
}

MyBatis-Plus介绍_spring_18

举报

相关推荐

0 条评论