(一)前言

最早写JDBC的时候,要手动配连接信息,要一条条手写sql语句。后来Mybatis出现了,不需要再手动配置连接信息,sql语句也和代码隔离开来,但是还免不了写Sql。接着出现了MybatisPlus,这下连Sql都不用写了。

(二)什么是MybatisPlus

首先还是把官网地址拿出来:

https://mp.baomidou.com/guide/

简单来讲,MybatisPlus是Mybatis的增强工具,简化开发,提高开发效率。在官网中,他用这样一幅图表示MybatisPlus和Mybatis之间的关系。


在图片中,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 {@Overridepublic void insertFill(MetaObject metaObject) {setFieldValByName("gmtCreate", LocalDateTime.now(),metaObject);setFieldValByName("gmtModified", LocalDateTime.now(),metaObject);}@Overridepublic 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的开源组织苞米豆是国内的组织,因此这份文档对国内开发人员来说特别友好,可放心使用。我是鱼仔,我们下期再见!

用了MybatisPlus后,我很久没有手写sql了相关推荐

  1. 很久之前自己写的太空游戏flash

    很久之前自己写的太空游戏flash,游戏效果还不错 哈哈,爽!,写得不好,呵呵: [img]http://dl.iteye.com/upload/attachment/352039/c9361a47- ...

  2. 字体大宝库:25款很好看的手写字体下载

    每个人都有自己独特的书写风格,手写字体常用于印刷.网页设计及其它创意设计任务中,能够强调设计的自然性.非正式性,让设计作品看起来更有个性.更可爱.今天这篇文章分享的好看的英文手写字体可以免费下载使用, ...

  3. Sublime text3开启后卡很久解决办法

    这是因为sublime默认会索引文件和文件中的关键字,所以会比较卡,只需要稍微修改一下就行了. 1. 2.Settings 3.加上 "index_files":false,这句

  4. 很久没上来写点东西了,今天把N年前的代码看了一遍。随手写了点寄托哀思--多播委托...

    using  System; // 委托类似于C++中的函数指针,不同的是委托可以包含一个顺序的委托集合. // 在C#类型封装中,对于不同类型的单个函数的暴露建议使用委托而不要使用接口. // 委托 ...

  5. PHP的postman的bulk edit小功能:可以直接复制浏览器query string parameters的数据至postman的body的form-data 很方便 不用手写了

  6. 为什么服务网页打开需要很久,点击之后计算机在处理什么,为什么我打开电脑桌面全部显示出来后要等很久才能打开连接.doc...

    为什么我打开电脑桌面全部显示出来后要等很久才能打开连接 重启路由器的方法:在网址栏输入默认网关(如192.168.1.1),进入页面用户名及密码均为admin,然后点路由器输入宽带的用户名和密码.一. ...

  7. 解决开机后要等待很久才能连接宽带的方法,让宽带自动连接设置方法(转)...

    有的朋友遇到了这样的问题,他用的是联通ADSL的宽带, 开机后要很久才能连接宽带,要在桌面双击"宽带连接"才能连接上,不知道有没有什么方法 让宽带自动连接?我的"本地连接 ...

  8. 很懒了不爱写,一个狮心王的修改器...就写了2个功能,今天有朋友要至少把MP锁了,就再加一项吧..今天修改器写完了,可以下了

    将442E66 连续2字节修改为 90 90就可以锁定技能点,怎么加也够了....培养个全能吧 将5FFF5C 连续2字节修改为 01 ED就可以随意买东西..根本不花钱,不过物品栏金钱显示也变0了. ...

  9. geth安装失败,双击后不显示或等待很久后报错

    这个问题真的折磨了很久很久. 先是傻逼一样的geth官网一直转圈圈,你不翻墙根本别想着进去. 再是下载来的安装软件要么不显示要么无法访问真的很搞人心态. 解决方法: https://ethfans.o ...

最新文章

  1. Python(四)字符串
  2. 图形基础 GPU架构(5)GPU vs CPU
  3. LeetCode 43字符串相乘44通配符匹配
  4. 华硕t100ta做linux,华硕T100TA个人补充评测
  5. JS 搜索 --下拉列表
  6. Educational Codeforces Round 37 (Rated for Div. 2) E. Connected Components? 暴力 + 补图的遍历
  7. python 降维 聚类_比PCA降维更高级——(R/Python)t-SNE聚类算法实践指南
  8. java 事务管理 子父线程_Java中的父线程与子线程
  9. excel字符串截取处理方法
  10. 1、黑塞矩阵Hessian matrix
  11. yarn打包报错:error during build: Error: Assigning to rvalue (Note that you need plugins to import files
  12. linux系统中ssh命令,Linux系统中SSH 命令的用法有哪些?
  13. Android制作.9图
  14. ** ERROR (nifti_image_write_hdr_img2): cannot open output file
  15. Gee引擎常用功能简介
  16. 关于LaTeX中的正文的字体大小
  17. 小米手机解锁BL以及获取Root权限(开发版)
  18. PHP下载m3u8视频及解析下载ts资源文件
  19. 调试器工作原理系列三篇
  20. 3D彩票系统,面向对象编程版

热门文章

  1. 六个参数帮你全面了解固态硬盘
  2. 关于Android 4.4(华为)调用系统相机问题
  3. 修改XAMPP启动mysql报错Port 3306 in use by D:\xampp\mysql\bin\mysqld!
  4. 30多种免费的高级WordPress主题,适用于令人惊叹的照片,教育和房地产网站
  5. 交互式机器学习/ 强化学习在图像领域中的应用
  6. (连载)Android 8.0 : 系统启动流程之Linux内核
  7. 静态图片怎么做成gif图?如何将静态图做成动态图
  8. 人工智能学术论坛参会总结【附PPT】
  9. iOS(iPhone,iPad))开发(Obje…
  10. 如何使用python的openpyxl进行强大的图表处理