SpringBoot整合MyBatisPlus

Hello,大家好,我是一个在互联网收废铁的程序员,已经很久没有更新过文章了,今天呢,就来学习一下新的知识点吧。今天呢?我们来讲讲什么好呢?

好吧,今天我们就简单的来学习一下MyBatisPlus吧

废话我们就不用多说了吧,我们直接进入我们的正题

别慌,我们还是要来看看MyBatisPlus是什么啊

简介

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

特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

我的天,这不就是官网的吗?这偷工减料的

不说了,不说了,接下来才是我们的正题

创建项目

这个就不用多说了吧,现在开发JAVA基本上都是IDEA,直接使用快捷创建(Spring Initializr)快速创建这个SpringBoot项目

编写POM文件

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

<!-- mybatisPlus 核心库 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<!-- 引入阿里数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>

编写application.yml文件

#端口
server:
port: 8001
#数据源
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource

#mybatis-plus配置
mybatis-plus:
mapper-locations: classpath:mapper/*.xml

这里面的基本配置都应该知道的吧

#mybatis-plus配置
mybatis-plus:
mapper-locations: classpath:mapper/*.xml

这个和还是和我们以前的MyBatis配置一样

创建数据库test,创建表user

CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`password` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8

到这里我们的前期工作就做完了,基本的配置信息都大概了解了吧

没看懂没关系,我们再看一遍,一遍还没懂,也没关系,我们再看一遍

一遍又一遍,你就嗝屁在这里吧。我要继续往下讲咯

配置类

我们新建一个配置类

package com.codeworld.fc.config;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
* ClassName MyBatisPlusConfig
* Description TODO
* Author Lenovo
* Date 2020/10/29
* Version 1.0
**/
@Configuration
public class MyBatisPlusConfig {
// SQL执行效率插件
@Bean
public PerformanceInterceptor performanceInterceptor(){
return new PerformanceInterceptor();
}
// 分页插件
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
}

主要功能在这个注释里面了,我就不用一一解释了吧

用户类User

新建一个User类

package com.codeworld.fc.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

/**
* ClassName User
* Description TODO
* Author Lenovo
* Date 2020/10/29
* Version 1.0
**/
@Data
@TableName("user")
public class User {

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

private String name;

private String password;
}
注解
  • @Data

    这个不用多说了吧,这是我们经常看见的,主要使用的是一个Lombok插件,这个注解的作用呢,为我们大大简化来的开发效率,我们可以不用再写Getter和Setter方法

  • @TableName

    我们直接从字面意思就可以读出来吧,表名

  • @TableId

    表的Id,也就是主键Id

创建Mapper

新建一个Mapper来操作我们的数据库,和我们的MyBatis一样的,只不过我们这次需要在启动类上面加上一个主键来扫描我们的mapper类

package com.codeworld.fc;

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

@SpringBootApplication
@MapperScan(basePackages = {"com.codeworld.fc.mapper"})
public class DemoSpringBootMybatisplusApplication {

public static void main(String[] args) {
SpringApplication.run(DemoSpringBootMybatisplusApplication.class, args);
}
}
package com.codeworld.fc.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.codeworld.fc.entity.User;

public interface UserMapper extends BaseMapper<User> {
}

这样就简单的继承我们MyBatis-plus中的BaseMapper,泛型呢就是我们和数据库中配置的基本类了

创建UserService

package com.codeworld.fc.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.codeworld.fc.entity.User;

public interface UserService extends IService<User> {
}

这个也差不多,也是继承我们MyBatis-plus中的IService,泛型也是我们的基本类

创建UserServiceImpl

package com.codeworld.fc.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.codeworld.fc.entity.User;
import com.codeworld.fc.mapper.UserMapper;
import com.codeworld.fc.service.UserService;
import org.springframework.stereotype.Service;

/**
* ClassName UserServiceImpl
* Description TODO
* Author Lenovo
* Date 2020/10/29
* Version 1.0
**/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService
{

}

继承了我们MyBatis-plus中的ServiceImpl类,实现我们自定义的UserService

可能会有点懵,我们只管继承什么什么,根本没有实现什么什么

那就请继续往下看

创建UserController

package com.codeworld.fc.controller;

import com.codeworld.fc.entity.User;
import com.codeworld.fc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* ClassName UserController
* Description TODO
* Author Lenovo
* Date 2020/10/29
* Version 1.0
**/
@RestController
@RequestMapping("test-user")
public class UserController {

@Autowired(required = false)
private UserService userService;
}

这种常规操作应该懂吧

总的呢从mappercontroller我们就创建完了

接下来就是我们测试的时候呢

创建一个查询接口

改造我们的UserController,在UserController中添加一个方法

@RestController
@RequestMapping("test-user")
public class UserController {

@Autowired(required = false)
private UserService userService;

// 根据Id获取用户信息
@GetMapping("get-user-id/{id}")
public User getUserById(@PathVariable("id") Integer id){
return this.userService.getUserById(id);
}

}

相继呢我们在UserService中也会新增一个方法

public interface UserService extends IService<User> {
/**
* 根据用户id获取用户
* @param id
* @return
*/
User getUserById(Integer id);
}
package com.codeworld.fc.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.codeworld.fc.entity.User;
import com.codeworld.fc.mapper.UserMapper;
import com.codeworld.fc.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
* ClassName UserServiceImpl
* Description TODO
* Author Lenovo
* Date 2020/10/29
* Version 1.0
**/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

@Autowired(required = false)
private UserMapper userMapper;

/**
* 根据用户id获取用户
*
* @param id
* @return
*/
@Override
public User getUserById(Integer id) {
return this.userMapper.selectById(id);
}
}

this.userMapper.selectById(id)直接调用我们MyBatis-plus封装好的方法,就不用我们再去写Mapper文件了,不过呢,既然说是不做任何修改,那么还是可以通过mapper文件来实现的

测试

我们使用Postman来测试

这样我们的就实现成功了

是不是感觉很简单呢

其中帮我们定义好的方法呢有很多

int insert(T entity);

int deleteById(Serializable id);

int deleteByMap(@Param("cm") Map<String, Object> columnMap);

int delete(@Param("ew") Wrapper<T> wrapper);

int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);

int updateById(@Param("et") T entity);

int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);

T selectById(Serializable id);

List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);

List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);

T selectOne(@Param("ew") Wrapper<T> queryWrapper);

Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);

List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);

List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);

List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);

IPage<T> selectPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);

IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper);

结束

今天呢我们的MyBatis-plus就只讲了入门的效果,就实现来一个查询功能,没有做到全面CRUD

这就需要我们自己下来自己完成其他的功能,能转换成自己的才是真的学到了知识点。

CRUD代码去:SpringBoot-demo

好了,今天的分享就到这里了,,,完了,老板来了。。。我先溜了

OK,在这里我们的分享就到这里了,不知道你有没有帮助到你呢?

看到这里的人都是技术人才,你的浏览就是我前进的动力

欢迎加入QQ群: