mybatis-plus 使用心得
mybatis-plus
plus提供了許多對資料庫的操作api,本文以mysql為例簡單說明 對資料庫操作的框架有 spring提供的jpa,tk-mapper,mybatis-plus最為歡迎,其中我是用最多的用的最順手的為plus, 主要說一些使用心得和簡單的操作語法
不開喜歡上來知直接貼上一大堆程式碼,沒什麼用,直接說核心 ,後面在開法中使用心得會慢慢補上來,因為crud過於簡單就沒有寫什麼程式碼,後面如果遇到複雜的需求 會慢慢補上來
先囉嗦幾句
在java8中有很多新特性,其中能提高開發效能的就是lambda表示式和stream流,一般lambda表示式在開發中可能不經常看到,如果有興趣看原始碼的話,不難發現很多原始碼是有lambda的身影的,其中Stream中很多方法的形參就是lambda介面,兩者結合能對資料結構做出非常靈活的操作,Stream本身就是流式程式設計的思想, 在開發中如果對於集合操作,使用Stream+lambda能寫出絕對簡潔 可讀性非常高 效能不錯的程式碼,而在plus中我們對條件的構造,一般都會使用條件構造,而在plus中也有支援lambda的條件構造器,這是我最喜歡的,因為可讀性非常強,程式碼閱讀性好,簡單的展示段程式碼體驗一下
// 我想得到沒有刪除的賬號,開通時間在一定範圍內,並且賬號含有 admin 字元的賬號集合
LambdaQueryWrapper<User> lambdaQuery = Wrappers.lambdaQuery();
lambdaQuery.like(User::getAccount,"admin")
.eq(User::getDeleteFlag,0)
.between(User::getCreatetime,"2020-01-01","2020-02-02");
List<User> users = userMapper.selectList(lambdaQuery);
//得到使用者集合後我通過使用者狀態分組,然後的到使用者名稱字的集合
Map<Integer, List<String>> collect = users.stream()
.collect(Collectors.groupingBy(
User::getState,
Collectors.mapping(User::getName, Collectors.toList()
))
);
很簡單需求,如果手寫sql不寫程式碼也能實現,結合plus的條件構造,java8的新特性寫出來的程式碼同上,簡潔性 可讀性非常高,這就是我對plus吸引我的地方,完成了簡單的條件構造 也支援鏈式程式設計
在搭建工程
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
yaml
server:
port: 9004 # 服務訪問埠號
spring:
application:
name: tensquare-article #服務名稱
datasource: # 資料庫連線四大屬性
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.200.128:3306/tensquare_article?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: root
logging:
level:
root: debug
mybatis-plus:
mapper-locations: classpath:/mapper/*Mapper.xml
啟動類
@SpringBootApplication
@MapperScan("你mapper存放的包名全路徑")
public class ArticleApplication {
public static void main(String[] args) {
SpringApplication.run(ArticleApplication.class, args);
}
/**
* 分散式自增id -plus提供
* @return
*/
@Bean
public Sequence sequence(){
return new Sequence();
}
// plus 分頁外掛
@Configuration
public class MyBatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor(){
return new PaginationInterceptor();
}
}
}
@Data
@TableName("sys_user") //資料庫表名
public class User implements Serializable {
//資料庫id是自增的 所以這裡自增,insert資料不需要執行id 當然你也可以配置其他屬性
@TableId(type = IdType.AUTO)
private Integer id;
private String username;
private String password;
@TableField("status") //執行資料庫中欄位名 一致的話可以不加此註解
private Integer status;
@TableField(exist = false)//不是資料庫表中欄位 就要打上 falsh標記
private List<Role> roles;
}
plus中id配置列舉類
public enum IdType {
/**
* 資料庫ID自增
*/
AUTO(0),
/**
* 該型別為未設定主鍵型別(註解裡等於跟隨全域性,全域性裡約等於 INPUT)
*/
NONE(1),
/**
* 使用者輸入ID
* <p>該型別可以通過自己註冊自動填充外掛進行填充</p>
*/
INPUT(2),
/* 以下3種型別、只有當插入物件ID 為空,才自動填充。 */
/**
* 分配ID (主鍵型別為number或string),
* 預設實現類 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(雪花演算法)
*
* @since 3.3.0
*/
ASSIGN_ID(3),
/**
* 分配UUID (主鍵型別為 string)
* 預設實現類 {@link com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator}(UUID.replace("-",""))
*/
ASSIGN_UUID(4),
/**
* @deprecated 3.3.0 please use {@link #ASSIGN_ID}
*/
@Deprecated
ID_WORKER(3),
/**
* @deprecated 3.3.0 please use {@link #ASSIGN_ID}
*/
@Deprecated
ID_WORKER_STR(3),
/**
* @deprecated 3.3.0 please use {@link #ASSIGN_UUID}
*/
@Deprecated
UUID(4);
private final int key;
IdType(int key) {
this.key = key;
}
}
//mapper
public interface UserMapper extends BaseMapper<User> {
}
public interface UserService extends IService<User> {
}
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {}
這樣的話我們就可以再實現類中用到框架給我們提供的方法,很多方法原始碼會有中文註釋,這樣的話 入門就輕鬆很多,只要你繼承了他的類,就可以使用所有方法,日常的資料庫操作 直接秒殺
先看框架為我們提供的方法
頂級 Service
public interface IService {}
mapper介面方法
public interface BaseMapper extends Mapper {}
可以看到mapper中和service中有很多相似的方法,但是也有不同的.他們沒什麼區別,至少從使用中感覺不到區別,注意看每個方法, 很多方法的引數都是 Wrapper 實際是就是條件構造器. 掌握了這個玩意,plus基本就能得心應手
條件構造器結構類圖
LambdaQueryWrapper
QueryWrapper
在開發中我使用最多的就是這個兩個構造器, 一個是LambdaUpdateWrapper 另一個 QueryWrapper
有了這兩個物件,就可以構造條件 開發中不推薦直接 new 而是使用plus提供的工具類去得到他們,使用起來真的很簡單,能滿足多數需求
使用起來真的很簡單,很靈活,能滿足多數需求,在使用過成中過於簡單,我主要記錄一些平時我工作中常用的,有些不常用的我也不懂,請大家多多指教,官網裡對於構造器的用法也有很多說明,這裡不做贅述,如有時間後期會更新一些追原始碼的過程來分享,首次寫部落格,寫的不好萬望海涵!!!
相關文章
- mybatis-plus 使用In查詢MyBatis
- PyCharm使用心得PyCharm
- NSURLSession 使用心得Session
- Jquery使用心得jQuery
- SQLite使用心得SQLite
- CSS使用心得CSS
- nessus使用教程心得
- 關於 mybatis-plus 與JPA 混合使用MyBatis
- Django使用心得(二)Django
- Entity Framework使用心得Framework
- Git 命令使用心得Git
- Drupal 模組使用心得
- MyBatis-PlusMyBatis
- eclipse的使用心得Eclipse
- svg圖示使用心得SVG
- php curl的使用心得PHP
- idea使用技巧、心得1Idea
- react 與 vue 使用心得ReactVue
- Lottie-iOS使用心得iOS
- Git 使用經驗及心得Git
- [心得]git使用技巧歸納Git
- Spring boot方式使用MyBatis-Plus分頁操作Spring BootMyBatis
- MyBatis-Plus 3.0.7.1MyBatis
- MyBatis-Plus 整理MyBatis
- Mybatis-Plus - 條件構造器 QueryWrapper 的使用MyBatisAPP
- 多資料來源結合mybatis-plus的使用MyBatis
- GitHub使用心得——倉庫建立Github
- canvas 2 image的使用小心得Canvas
- D3.js 使用心得JS
- [心得] Linux使用技巧珠璣Linux
- muduo網路庫使用心得
- 說說Golang的使用心得Golang
- Oracle Job 使用心得體會Oracle
- Hadoop - Zeppelin 使用心得Hadoop
- M$的DHTML Editor 使用心得HTML
- TextIn.com API使用心得API
- mybatis-plus思維導圖,讓mybatis-plus不再難懂MyBatis
- Django使用心得(二) 使用TestCase測試介面Django