您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

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

时间:2021-09-17 16:37:44  来源:  作者:Java架构学习指南

(一)前言

最早写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 NULL  COMMENT '修改时间',
  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=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

3、在Spring启动类中添加MApperScan注解

@SpringBootApplication
@MapperScan("com.example.mybatisplus.mapper")
public class MybatisPlusApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisPlusApplication.class, args);
    }
}

4、创建mapper,DO

MybatisPlus可以自动生成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;
}

在实体类中,设置id自增,设置gmtCreate在插入时自动填充,设置gmtModified在创建和修改时自动填充,接着配置自动填充规则:

@Configuration
public class MybatisObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        setFieldValByName("gmtCreate", LocalDateTime.now(),metaObject);
        setFieldValByName("gmtModified", LocalDateTime.now(),metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        setFieldValByName("gmtModified",LocalDateTime.now(),metaObject);
    }
}

最后直接调用API插入数据

@Test
public void test3(){
    UserDO userDO=new UserDO();
    userDO.setUserId("a011");
    userDO.setUsername("name11");
    userDO.setPassword("123456");
    userMapper.insert(userDO);
}

更多的查询方法可以参考官网,十分详细。但是如果你的sql涉及到多表的连表操作,还是可以自己和MyBatis一样手写sql。

(五)总结

至此,你应该对MybatisPlus有了大致的了解,另外值得一提的是MybatisPlus的开源组织苞米豆是国内的组织,因此这份文档对国内开发人员来说特别友好,可放心使用。我是鱼仔,我们下期再见!



Tags:MybatisPlus   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
今天介绍一个 MyBatis - Plus 官方发布的神器:mybatis-mate 为 mp 企业级模块,支持分库分表,数据审计、数据敏感词过滤(AC算法),字段加密,字典回写(数据绑定),数据权限,表结构自动生成...【详细内容】
2022-06-17  Tags: MybatisPlus  点击:(43)  评论:(0)  加入收藏
1. Mybatis 存在的痛点我们知道 MyBatis 是一个基于 java 的持久层框架,它内部封装了 jdbc,极大提高了我们的开发效率。但是使用 Mybatis 开发也有很多痛点: 每个 Dao 接口都需...【详细内容】
2022-06-14  Tags: MybatisPlus  点击:(37)  评论:(0)  加入收藏
MybatisPlus是国产的第三方插件, 它封装了许多常用的CURDapi,免去了我们写mapper.xml的重复劳动,这里介绍了基本的整合SpringBoot和基础用法。2|0引入依赖在项目中pom文件引入m...【详细内容】
2022-05-05  Tags: MybatisPlus  点击:(52)  评论:(0)  加入收藏
SpringBoot 集成 MybatisPlus 系列SpringBoot 版本:2.6.4 MybatisPlus 版本:3.5.1 SpringBoot整合MybatisPlus SpringBoot整合MybatisPlus数据自动填充 SpringBoot整合Mybatis...【详细内容】
2022-03-18  Tags: MybatisPlus  点击:(158)  评论:(0)  加入收藏
一、前言1.1、关于枚举类① 枚举是JDK1.5中的新功能,我们可以使用枚举很好的去描述一些业务场景:一年有四季、人类有男女...② 同样我们在业务层面会有很多,比如状态属性、分...【详细内容】
2022-01-20  Tags: MybatisPlus  点击:(220)  评论:(0)  加入收藏
(一)前言最早写JDBC的时候,要手动配连接信息,要一条条手写sql语句。后来Mybatis出现了,不需要再手动配置连接信息,sql语句也和代码隔离开来,但是还免不了写Sql。接着出现了MybatisP...【详细内容】
2021-09-17  Tags: MybatisPlus  点击:(173)  评论:(0)  加入收藏
▌简易百科推荐
在本文中,我们将学习如何使用 Next.js、 Prisma、 Postgres 和 Fastify 构建一个 Full-stack 应用程序。在本文中,我们将学习如何使用 Next.js、 Prisma、 Postgres 和 Fastif...【详细内容】
2022-07-12  qaseven    Tags:全栈   点击:(9)  评论:(0)  加入收藏
好的软件开发网站有哪些?做软件开发哪些网站能提供帮助呢?这些很多做软件开发的小伙伴都会问到的问题。007出海全球社交流量导航网站,整合了多方出海跨境网站资源,为你介绍出海...【详细内容】
2022-07-08  Chuhai007    Tags:软件开发   点击:(10)  评论:(0)  加入收藏
我们用monkey做压力测试后,会保存一个monkey日志,那如果想快速的分析日志中有哪些异常,我们可以用批处理工具进行快速的筛查,我们一起来看看吧。先编写个小脚本,然后修改为bat后...【详细内容】
2022-07-08  溪流涌动    Tags:monkey   点击:(13)  评论:(0)  加入收藏
白盒测试落地实践分为两个大方向,一个是静态分析,一个是动态分析,当然啦,也可以叫做静态测试和动态测试。那我们如何高质量保效率的做好白盒测试呢?Parasoft已经为您准备好了成熟...【详细内容】
2022-07-08  Parasoft中国    Tags:白盒测试   点击:(11)  评论:(0)  加入收藏
Altium Designer 自带脚本功能的开发项目,可以调用官方AD API接口对原理图或者PCB进行自动操作,本文主要分享开发的流程,和一些基本的概念信息,本文介绍的脚本工具例子可以用在P...【详细内容】
2022-07-07  电子工程师伟哥    Tags:Altium Designer   点击:(21)  评论:(0)  加入收藏
一、目录介绍 前置知识点 NIO Netty 的核心组件 Channel Callback Future 和 Promise 事件和 ChannelHandler Hello World二、前置知识点1、NIO首先我们需要回顾一...【详细内容】
2022-07-06  架构师jickly    Tags:聊天系统   点击:(16)  评论:(0)  加入收藏
1.事件流事件流是对事件执行过程的描述,了解事件的执行过程有助于加深对事件的理解,提升开发实践中对事件运用的灵活度。2.捕获和冒泡捕获阶段是【从父到子】的传导过程,冒泡阶...【详细内容】
2022-07-06  金乾坤    Tags:API   点击:(13)  评论:(0)  加入收藏
刷盘策略CommitLog的asyncPutMessage方法中可以看到在写入消息之后,调用了submitFlushRequest方法执行刷盘策略:public class CommitLog { public CompletableFuture<PutMe...【详细内容】
2022-07-06  Java码农之路    Tags:RocketMQ   点击:(16)  评论:(0)  加入收藏
最近读了本好书-《深度学习推荐系统》,读完不觉全身通畅,于是就有了写这篇文章的想法,把自己的理解和总结分享给大家。 本文将按照从算法到工程的顺序,先介绍一下推荐系统整体...【详细内容】
2022-07-05  InfoQ    Tags:推荐系统   点击:(22)  评论:(0)  加入收藏
在后端并不是写完一个接口的业务逻辑就能投入使用的,接口的优化更是一个难点与麻烦之处(下面的内容我们不考虑前端的处理,因为不能完全靠前端,前后端都需要做自己的处理工作)1.幂...【详细内容】
2022-07-05  老诚不bug  掘金  Tags:幂等   点击:(20)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条