当前位置: 首页 > 图灵资讯 > 技术篇> MyBatis-Plus介绍

MyBatis-Plus介绍

来源:图灵教育
时间:2023-06-30 16:28:38

1.MyBatis-Plus简介5

官网:https://baomidou.com/

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

1.2主要特点5

MyBatis-Plus介绍_Test

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

强大的CRUD操作:内置通用Mapper、通用Service,单表大部分CRUD操作只能通过少量配置实现,条件结构更强,满足各种使用需求

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

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

内置代码生成器:Mapper可以通过代码或Maven插件快速生成、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

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

MyBatis-Plus介绍_System_02

2.1准备创建数据库6

创建数据库

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

MyBatis-Plus介绍_spring_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

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

aplication在service-oaresorces目录中.yml

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

aplication在service-oaresorces目录中-dev.yml

server:  port: 8800mybatistis-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

添加SpringBoot启动类`@MapperScan`注:扫描Mapper文件夹:

service-oa模块Serviceauthaplication

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()//表示可以找到maper动态创建的对象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

modelcom代码.atguigu.model.systemSysRole

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;@Datapublic 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在service-oa模块的持久层接口SysroleMaper中添加Mapper类6

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管理   6public interface SysRoleMapper extends BaseMapper<SysRole> {}

2.6测试6在service-oa模块中testestmpdemo1

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;//测试mybatistis-plus   6@SpringBootTestpublic class Testmpdemo {    //注入    @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介绍_Test_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介绍_System_07

MyBatis-Plus介绍_System_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介绍_mybatis-puls_09

MyBatis-Plus介绍_System_10

删除操作7

Testmpdemo1删除操作7

MyBatis-Plus介绍_Test_11

单个删除

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

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

MyBatis-Plus介绍_System_12

批量删除

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

MyBatis-介绍Plus_System_13

3.MyBatis-Plus条件构造器8

MyBatis-Plus介绍_System_14

Wrapper:条件结构抽象,顶级父类

AbstractWrapper:用于查询条件封装,生成sqlwhere条件

QueryWrapper:Entity对象的封装操作不是lambda语法

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

AbstractLambdaWrapper:Lambda语法采用Wraper统一处理分析Lambda获取column。

LambdaQueryWrapper:查看名称也可以理解为查询Wraperr,用于Lambda语法

LambdaUpdateWrapper:Wrapper更新Lambda封装

注:参考下列条件结构器的方法`column`均表示数据库字段

service-oa模块的test

TestMpDemo1QueryWrapper

//条件查询  8    @Test    public void testQuery1(){        //创建QueryWraper对象,调用封装条件的方法        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介绍_spring_17

4.1添加service接口9.1

service-oa模块

SysRoleService业务层接口

package com.atguigu.auth.service;import com.atguigu.model.system.SysRole;import com.baomidou.mybatisplus.extension.service.IService;///业务层接口   9public interface SysRoleService extends IService<SysRole> {}

SysroleserviceImple实现业务层接口

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管理   9public 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;@SpringBootTestpublic class Testmpdemo2 {    //注入    @Autowired    private SysRoleService service;    ///查询所有记录  9    @Test    public void getAll() {        List<SysRole> list = service.list();        System.out.println(list);    }}

MyBatis-Plus介绍_System_18