快速CRUD的秘诀之SpringBoot整合MyBatis-Plus

若批评不自由,则赞美无意义

前言

关于如何搭建SpringBoot工程以及开启Web功能,
可以查看我的这篇博客:用Spring Initializr快速构建SpringBoot及整合MVC

Mybatis-Plus

在我的上篇博客中 -> 史上踩坑最多的SpringBoot整合MyBatis 中介绍了SpringBoot整合MyBatis,那这个MyBatis-Plus又是什么来头?升级版吗?我们先来看一下Mybatis的图标:
在这里插入图片描述
再来看一下,MyBatis-Plus的图标:
在这里插入图片描述
其实MyBatis-Plus是MyBatis的增强工具,就如MyBatis-Plus官网:https://mp.baomidou.com/ 上说的一样,为简化开发而生,主要特点有:

  • 润物无声,在MyBatis的基础上只做增强而不做改变,引入没有其他影响。
  • 效率至上,快速进行CRUD操作,从而节省大量时间。
  • 丰富功能,热加载、代码生成、分页、性能分析等功能一应俱全。
    在这里插入图片描述 在这里插入图片描述

数据库部分

本文使用的是MySQL数据库,需要读者自行下载

在数据库"mydb"中创建一张表"users",建表语句如下:

create table users # 创建表users
(					# 整型 不为空 自动增长
	id 				int not null auto_increment, 
	username		varchar(50), # 可变字符串,最长为50
	password		varchar(50), # 可变字符串,最长为50
	primary key (id) # 设置id为主键
)

往"users"表中插入两条数据,sql语句如下:

insert into users(username, password) values('古阙月', '123456');
insert into users(username, password) values('月阙古', '654321');

最后,"users"表中数据为:
在这里插入图片描述

开整

1.分别在依赖管理文件中导入Web的起步依赖spring-boot-starter-web,MySQL数据库的连接器依赖mysql-connector-java以及MyBatis-Plus的起步依赖mybatis-plus-boot-starter,代码如下:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope> <!-- 作用域:表示运行时才生效-->
</dependency>
<dependency>
	<groupId>com.baomidou</groupId>
	<artifactId>mybatis-plus-boot-starter</artifactId>
	<version>3.2.0</version>
</dependency>

2.在配置文件application.yml中配置数据源以及SQL日志便于查看,如:

# 配置数据源
spring:
  datasource:
    # 数据库路径jdbc:mysql://localhost:3306/mydb 的缩写,并配置时区
    url: jdbc:mysql:///mydb?serverTimezone=GMT%2B8
    username: root          # 用户名
    password: 123456        # 密码
    driver-class-name: com.mysql.cj.jdbc.Driver # 数据库驱动

# 打印MyBatis SQL 日志
logging:
  level:
    com.guqueyue.dao: debug # 写接口的包名

3.创建实体类,如:

package com.guqueyue.entity;

/**
 * @author guqueyue
 * @Date 2020/4/12
 **/
//lombok插件的注解
@Data // 若未使用lombok插件,请自行生成getter、setter以及toString方法
@AllArgsConstructor // 若未使用lombok插件,请自行生成有参构造方法
@NoArgsConstructor // 若未使用lombok插件,请自行生成无参构造方法
@Accessors(chain = true) // 开启链式编程
@TableName("users") // 因为实体类和表名不一致, 需要进行配置
public class User implements Serializable {

	// 主键自动递增
	@TableId(type = IdType.AUTO) 
    private Integer id;
    
    private String username;
    private String password;
}

其中实体类的类名与实例变量名 和 和 数据库中的表名与列名需一一对应,否则我们就需要另行配置,其中@TableName注解为表名注解,@TableId注解为主键注解以及@TableField注解为字段注解…关于注解的详细信息以及MyBatis-Plus的其他注解官方文档上都有,我就不一一赘述 -> 点击即可查看

但是如果主键为自动递增,一定要添加@TableId(type = IdType.AUTO) 注解,否则你插入数据将会报错并失败;除非你每一次插入数据都去看一下数据库然后手动设置主键的值,但我想应该没人会这么干吧。。。。。。

4.创建DAO层的映射接口,并继承MyBatis-Plus的公共接口,代码如下:

package com.guqueyue.dao;

/**
 * @author guqueyue
 * @Date 2020/4/12
 * 映射接口UserMapper
 **/
public interface UserMapper extends BaseMapper<User> {

}

5.在启动类上使用@MapperScan,扫描映射接口,如:

package com.guqueyue.hello_guqueyue;

@SpringBootApplication(scanBasePackages = "com.guqueyue")
@MapperScan("com.guqueyue.dao")
public class HelloGuqueyueApplication {

    public static void main(String[] args) {
        SpringApplication.run(HelloGuqueyueApplication.class, args);
    }
}

6.创建Service层的接口,并继承MyBatis-Plus的公共接口,如:

package com.guqueyue.service;

/**
 * @author guqueyue
 * @Date 2020/4/12
 **/
public interface IUserService extends IService<User> {
    
}

7.创建Service层的实现类,添加@Service注解,并继承MyBatis-Plus的公共接口以及实现Service层的接口,代码如下:

package com.guqueyue.service.impl;

/**
 * @author guqueyue
 * @Date 2020/4/12
 **/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {

}

8.创建Controller层,使用@Autowired注解注入Service层的接口,代码如下:

package com.guqueyue.controller;

/**
 * @author guqueyue
 * @Date 2020/4/12
 **/
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private IUserService userService;

    /**
     * 查询用户列表
     * @return
     */
    @RequestMapping("/list")
    public List<User> userList() {

        return userService.list();
    }
}

9.最后一步,启动应用程序,打开浏览器输入"http://localhost:8080/user/list",浏览器显示:
在这里插入图片描述
则说明整合成功!!!我们再来查看一下控制台打印的SQL:
在这里插入图片描述

扩展

一般来说,MyBatis-Plus自带的足以应付单表的CRUD,而不需要配置一些杂七杂八的配置文件,更别提写什么sql语句。但是如果一旦涉及到多表的增删改查,我们可能就要进行一些额外的配置了。当然,配置的话,MyBatis-Plus和MyBatis差不多,也不会很麻烦,下面开始吧!

1.首先,在src/main/resources目录下新建一个目录mapper,也就是在src/main/resources/mapper目录下配置映射文件UserMapper.xml,如:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.guqueyue.dao.UserMapper">


</mapper>

2.最后,在配置文件application.yml中,配置映射文件的扫描,如:

mybatis-plus:
  # 配置映射文件的扫描
  mapper-locations: classpath:/mapper/*Mapper.xml
  # 配置别名的扫描
  type-aliases-package: com.guqueyue.entity

然后跟MyBatis差不多,可以实现自己自定义的SQL语句了!

又或者说,我们觉得映射接口和映射文件是一对夫妻得在一起,那请往下看!

1.首先,在src/main/java/com/guqueyue/dao目录下也就是dao层配置映射文件UserMapper.xml,如:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.guqueyue.dao.UserMapper">


</mapper>

2.其次,在配置文件application.yml中,配置映射文件的扫描,如:

mybatis-plus:
  # 配置映射文件的扫描
  mapper-locations: classpath:com/guqueyue/dao/*.xml
  # 配置别名的扫描
  type-aliases-package: com.guqueyue.entity

3.然后,因为SpringBoot的约定是在src/mian/resources目录下存放文件,所以我们进行额外的配置以便映射文件起作用。去依赖管理文件pom.xml中的<build>在这里面</build>标签中进行配置,以便SpringBoot能够扫到映射文件UserMapper.xml

<resources>
	<!-- 使SpringBoot扫到映射文件 -->
	<resource>
		<directory>src/main/java</directory>
	<includes>
		<include>com/guqueyue/dao/*.xml</include>
	</includes>
	</resource>

<!-- 防止配置之后出现不扫resources的bug -->
	<resource>
		<directory>src/main/resources</directory>
	</resource>
</resources>

大功告成!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值