(一)前言
最早寫JDBC的時候,要手動配連接信息,要一條條手寫sql語句。后來MyBatis出現了,不需要再手動配置連接信息,sql語句也和代碼隔離開來,但是還免不了寫Sql。接著出現了MybatisPlus,這下連Sql都不用寫了。
(二)什么是MybatisPlus
首先還是把官網地址拿出來:
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 {
@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的開源組織苞米豆是國內的組織,因此這份文檔對國內開發人員來說特別友好,可放心使用。我是魚仔,我們下期再見!