前言
之前介紹了 SpringBoot 整合 Mybatis 實(shí)現(xiàn)數(shù)據(jù)庫(kù)的增刪改查操作页徐,分別給出了 xml 和注解兩種實(shí)現(xiàn) mapper 接口的方式;雖然注解方式干掉了 xml 文件齿梁,但是使用起來(lái)并不優(yōu)雅,本文將介紹 mybats-plus 的常用實(shí)例肮蛹,簡(jiǎn)化常規(guī)的 CRUD 操作勺择。
mybatis-plus
MyBatis-Plus(簡(jiǎn)稱 MP)是一個(gè) MyBatis 的增強(qiáng)工具,在 MyBatis 的基礎(chǔ)上只做增強(qiáng)不做改變伦忠,為簡(jiǎn)化開(kāi)發(fā)省核、提高效率而生。
學(xué)習(xí) mybatis-plus:https://mp.baomidou.com/guide
常用實(shí)例
1. 項(xiàng)目搭建
1.1 pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 熱部署模塊 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 這個(gè)需要為 true 熱部署才有效 -->
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.0</version>
</dependency>
</dependencies>
1.2 application.yaml
# spring setting
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/db_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: zwqh@0258
1.3 實(shí)體類 UserEntity
@TableName(value="t_user")
public class UserEntity {
@TableId(value="id",type=IdType.AUTO)
private Long id;
private String userName;
private String userSex;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
}
@TableName 指定數(shù)據(jù)庫(kù)表名昆码,否則默認(rèn)查詢表會(huì)指向 user_entity 气忠;@TableId(value="id",type=IdType.AUTO) 指定數(shù)據(jù)庫(kù)主鍵,否則會(huì)報(bào)錯(cuò)赋咽。
1.4 Dao層 UserDao
繼承 BaseMapper<T>,T表示對(duì)應(yīng)實(shí)體類
public interface UserDao extends BaseMapper<UserEntity>{
}
1.5 啟動(dòng)類
在啟動(dòng)類添加 @MapperScan 就不用再 UserDao 上用 @Mapper 注解旧噪。
@SpringBootApplication
@MapperScan("cn.zwqh.springboot.dao")
public class SpringBootMybatisPlusApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootMybatisPlusApplication.class, args);
}
}
1.6 分頁(yè)插件配置
@Configuration
public class MybatisPlusConfig {
/**
* mybatis-plus分頁(yè)插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor page = new PaginationInterceptor();
page.setDialectType("mysql");
return page;
}
}
2.示例
2.1 新增
新增用戶
UserEntity user=new UserEntity();
user.setUserName("朝霧輕寒");
user.setUserSex("男");
userDao.insert(user);
2.2 修改
根據(jù)id修改用戶
UserEntity user=new UserEntity();
user.setUserName("朝霧輕曉");
user.setUserSex("男");
user.setId(25L);
userDao.updateById(user);
根據(jù)entity條件修改用戶
UserEntity user=new UserEntity();
user.setUserSex("女");
userDao.update(user,new QueryWrapper<UserEntity>().eq("user_name", "朝霧輕寒"));
2.3 查詢
根據(jù)id查詢用戶
UserEntity user = userDao.selectById(id);
根據(jù)entity條件查詢總記錄數(shù)
int count = userDao.selectCount(new QueryWrapper<UserEntity>().eq("user_sex", "男"));
根據(jù) entity 條件,查詢一條記錄脓匿,返回的是實(shí)體
QueryWrapper<UserEntity> queryWrapper=new QueryWrapper<UserEntity>();
UserEntity user=new UserEntity();
user.setUserName("朝霧輕寒");
user.setUserSex("男");
queryWrapper.setEntity(user);
user = userDao.selectOne(queryWrapper);
如果表內(nèi)有兩條或以上的相同數(shù)據(jù)則會(huì)報(bào)錯(cuò)淘钟,可以用來(lái)判斷某類數(shù)據(jù)是否已存在
根據(jù)entity條件查詢返回第一個(gè)字段的值(返回id列表)
QueryWrapper<UserEntity> queryWrapper=new QueryWrapper<UserEntity>();
UserEntity user=new UserEntity();
user.setUserSex("男");
queryWrapper.setEntity(user);
List<Object> objs= userDao.selectObjs(queryWrapper);
根據(jù)map條件查詢返回多條數(shù)據(jù)
Map<String, Object> map=new HashMap<String, Object>();
map.put("user_name", username);
map.put("user_sex",sex);
List<UserEntity> list = userDao.selectByMap(map);
根據(jù)entity條件查詢返回多條數(shù)據(jù)(List<UserEntity>)
Map<String, Object> map=new HashMap<String, Object>();
map.put("user_sex","男");
List<UserEntity> list = userDao.selectList(new QueryWrapper<UserEntity>().allEq(map));
根據(jù)entity條件查詢返回多條數(shù)據(jù)(List<Map<String, Object>> )
Map<String, Object> map=new HashMap<String, Object>();
map.put("user_sex","男");
List<Map<String, Object>> list = userDao.selectMaps(new QueryWrapper<UserEntity>().allEq(map));
根據(jù)ID批量查詢
List<Long> ids=new ArrayList<Long>();
ids.add(1L);
ids.add(2L);
ids.add(3L);
List<UserEntity> list = userDao.selectBatchIds(ids);
主鍵ID列表(不能為 null 以及 empty)
分頁(yè)查詢
Page<UserEntity> page=userDao.selectPage(new Page<>(1,5), new QueryWrapper<UserEntity>().eq("user_sex", "男"));
Page<Map<String, Object>> page=userDao.selectMapsPage(new Page<>(1,5), new QueryWrapper<UserEntity>().eq("user_sex", "男"));
需先配置分頁(yè)插件bean,否則分頁(yè)無(wú)效陪毡。如有pagehelper需先去除米母,以免沖突勾扭。
new Page<>(1,5),1表示當(dāng)前頁(yè)铁瞒,5表示頁(yè)面大小妙色。
2.4 刪除
根據(jù)id刪除用戶
userDao.deleteById(1);
根據(jù)entity條件刪除用戶
userDao.delete(new QueryWrapper<UserEntity>().eq("id", 1));
根據(jù)map條件刪除用戶
Map<String, Object> map=new HashMap<String, Object>();
map.put("user_name", "zwqh");
map.put("user_sex","男");
userDao.deleteByMap(map);
根據(jù)ID批量刪除
List<Long> ids=new ArrayList<Long>();
ids.add(1L);
ids.add(2L);
ids.add(3L);
userDao.deleteBatchIds(ids);
主鍵ID列表(不能為 null 以及 empty)
小結(jié)
本文介紹了 mybatis-plus 相關(guān)的 Mapper層 CRUD 接口實(shí)現(xiàn),其還提供了 Service層 CRUD 的相關(guān)接口慧耍,有興趣的小伙伴可以去使用下身辨。 mybatis-plus 真正地提升了擼碼效率。
其他學(xué)習(xí)要點(diǎn):
- mybatis-plus 條件構(gòu)造器
- lamda 表達(dá)式
- 常用注解
- ...
學(xué)習(xí)地址:https://mp.baomidou.com/guide/