用了MybatisPlus后,我很久没有手写sql了

(一)前言最早写JDBC的时候,要手动配连接信息,要一条条手写sql语句 。后来Mybatis出现了,不需要再手动配置连接信息,sql语句也和代码隔离开来,但是还免不了写Sql 。接着出现了MybatisPlus,这下连Sql都不用写了 。
(二)什么是MybatisPlus首先还是把官网地址拿出来:
mp.baomidou.com/guide/
简单来讲,MybatisPlus是Mybatis的增强工具,简化开发,提高开发效率 。在官网中,他用这样一幅图表示MybatisPlus和Mybatis之间的关系 。

用了MybatisPlus后,我很久没有手写sql了

文章插图
 
在图片中,MybatisPlus表示它和Mybatis之间的关系就像魂斗罗中的两兄弟一样,互相不会影响,但是能帮你在打怪路上更加轻松 。
(三)前置准备在讲解MybatisPlus之前,我们先准备一批数据
CREATE DATABASE user;USE user;SET NAMES utf8mb4;DROP TABLE IF EXISTS `user`;CREATE TABLE `user`(`id` int(11) NOT NULL AUTO_INCREMENT,`user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户Id',`username` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名',`password` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',`gmt_create` datetime(3) NOT NULL COMMENT '创建时间',`gmt_modified` datetime(3) NOT NULLCOMMENT '修改时间',PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;INSERT INTO `user` VALUES(1,'a001','name1','123456',now(),now()),(2,'a002','name2','123456',now(),now()),(3,'a003','name3','123456',now(),now()),(4,'a004','name4','123456',now(),now()),(5,'a005','name5','123456',now(),now()),(6,'a006','name6','123456',now(),now()),(7,'a007','name7','123456',now(),now()),(8,'a008','name8','123456',now(),now()),(9,'a009','name9','123456',now(),now()),(10,'a010','name10','123456',now(),now())(四)Mybatis快速入门1、引入最新的依赖<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>Latest Version</version></dependency>2、在配置中心配置数据库连接信息spring.datasource.url=jdbc:MySQL://192.168.61.102:3306/user?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=falsespring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver3、在Spring启动类中添加MApperScan注解@SpringBootApplication@MapperScan("com.example.mybatisplus.mapper")public class MybatisPlusApplication {public static void main(String[] args) {SpringApplication.run(MybatisPlusApplication.class, args);}}4、创建mapper,DOMybatisPlus可以自动生成Mapper、DO、Service、Controller,这里作为教程,手动建立 。MybatisPlus和Mybatis的第一个不同点,这里使用@TableName注解标明当前的实体类对应哪个表
@Data@TableName("user")public class UserDO {private Long id;private String userId;private String username;private String password;private LocalDateTime gmtCreate;private LocalDateTime gmtModified;}创建Mapper类时,继承BaseMapper类,这是MybatisPlus提供的一个基类,封装了常用的查询操作
public interface UserMapper extends BaseMapper<UserDO> {}5、查询数据在使用Mybatis时,数据的CRUD都需要编写sql才能实现,MybatisPlus提供的BaseMapper既提供了Mapper层面的封装接口,又提供了Service层面的封装接口 。基于以往的写法,平常开发中会更加倾向于使用Mapper层面的接口 介绍Mapper层面的几个接口:
比如我想查询user表的数据量,我就可以直接调用:
Integer integer = userMapper.selectCount(null);MybatisPlus提供了一个条件构造器Wrappers,可以通过Wrappers构造一系列条件,比如查询username为name1的数据
List<UserDO> userDOList = userMapper.selectList(Wrappers.<UserDO>lambdaQuery().eq(UserDO::getUsername, "name1"));又比如我想查询id大于5的数据
List<UserDO> userDOList1 = userMapper.selectList(Wrappers.<UserDO>lambdaQuery().gt(UserDO::getId, 5));6、数据插入数据的查询使用上面的方式没有任何问题,插入数据时有几个可以优化的地方,我们可以通过一个注解@TableId设置主键自增方式,可以通过@TableField注解设置数据的自动填充 。因此修改一下UserDO这个类:
@Data@TableName("user")public class UserDO {@TableId(type = IdType.AUTO)private Long id;private String userId;private String username;private String password;@TableField(fill = FieldFill.INSERT)private LocalDateTime gmtCreate;@TableField(fill = FieldFill.INSERT_UPDATE)private LocalDateTime gmtModified;}


推荐阅读