原創聲明
本文首發於頭條號【Happyjava】。Happy的掘金地址:https://juejin.im/user/5cc2895df265da03a630ddca,Happy的個人博客:http://blog.happyjava.cn。歡迎轉載,但須保留此段聲明。
mybatis plus簡介
來自官方對於mybatis plus的介紹:MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。其支持以下特性:
- 無侵入:只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑
- 損耗小:啟動即會自動注入基本 CURD,性能基本無損耗,直接面向對象操作
- 強大的 CRUD 操作:內置通用 Mapper、通用 Service,僅僅通過少量配置即可實現單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求
- 支持 Lambda 形式調用:通過 Lambda 表達式,方便的編寫各類查詢條件,無需再擔心字段寫錯
- 支持主鍵自動生成:支持多達 4 種主鍵策略(內含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解決主鍵問題
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式調用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
- 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 內置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼,支持模板引擎,更有超多自定義配置等您來使用
- 內置分頁插件:基於 MyBatis 物理分頁,開發者無需關心具體操作,配置好插件之后,寫分頁等同於普通 List 查詢
- 分頁插件支持多種數據庫:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多種數據庫
- 內置性能分析插件:可輸出 Sql 語句以及其執行時間,建議開發測試時啟用該功能,能快速揪出慢查詢
- 內置全局攔截插件:提供全表 delete 、 update 操作智能分析阻斷,也可自定義攔截規則,預防誤操作
mybatis plus,對於mybatis的增強不是一點半點的,這兩者結合使用,真的可以大幅的提升開發效率。目前,也有眾多互聯網公司正在使用mybatis plus。下面,就讓我們快速上手mybatis plus吧。
快速開始
數據庫表(來自官方文檔):
id | name | age | |
---|---|---|---|
1 | Jone | 18 | test1@baomidou.com |
2 | Jack | 20 | test2@baomidou.com |
3 | Tom | 28 | test3@baomidou.com |
4 | Sandy | 21 | test4@baomidou.com |
5 | Billie | 24 | test5@baomidou.com |
建表語句:
DROP TABLE IF EXISTS user;
CREATE TABLE user
(
id BIGINT(20) NOT NULL COMMENT '主鍵ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年齡',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '郵箱',
PRIMARY KEY (id)
);
數據:
DELETE FROM user;
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
引入依賴
<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.1.1</version>
</dependency>
一個是mysql的依賴,一個是mybatis-plus的依賴
編寫User.java實體類
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
UserMapper接口
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
快速使用
上面的步驟做完,就可以開始使用mybatis plus了。
@RunWith(SpringRunner.class)
@SpringBootTest
public class MybatisPlusApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void test1() {
List<User> users = userMapper.selectList(null);
users.forEach(e -> {
System.out.println(e.toString());
});
}
}
輸出結果:
通過注解寫sql
通過Select Insert Update Delete 注解,可以寫增刪查改語句,如下:
@Mapper
public interface UserMapper extends BaseMapper<User> {
@Select("select * from user where id = #{id}")
User findUserById(int id);
}
通過xml配置寫sql
通過xml的方式寫sql的話,需要先配置xml的位置:
mybatis-plus.mapper-locations=classpath:mappers/*.xml
示例xml配置如下: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="happy.mybatisplus.mapper.UserMapper">
<select id="findUserByName" parameterType="string"
resultType="happy.mybatisplus.entity.User">
SELECT * FROM user WHERE name = #{name}
</select>
</mapper>
這些都屬於mybatis的范疇了,這里就不做過多介紹。
mybatis-plus常用
下面列出一些mybatis-plus中常用的東西:
1、指定實體類對應的數據庫表名
@TableName(value = "user")
在實體類與數據庫表明不是對應的情況下使用,如:
@Data
@TableName(value = "user")
public class UserEntity {
private Long id;
private String name;
private Integer age;
private String email;
}
2、指定字段對應的數據庫字段名
@TableField(value = "age")
如:
@Data
@TableName(value = "user")
public class UserEntity {
private Long id;
private String name;
@TableField(value = "age")
private Integer userAge;
private String email;
}
3、插入數據,得到主鍵
調用mybatis plus 提供的insert方法,執行后,會把主鍵設置到入參的id屬性中,如下:
4、分頁
配置分頁插件:
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
分頁示例:
總結
這里演示了springboot快速使用mybatis-plus,mybatis-plus有非常豐富的用法,這里沒法一一列舉。有興趣的朋友,可以直接到官方文檔里查看。