Spring Boot 2.X(十九):集成 mybatis-plus 高效開(kāi)發(fā)

前言

之前介紹了 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):

  1. mybatis-plus 條件構(gòu)造器
  2. lamda 表達(dá)式
  3. 常用注解
  4. ...

學(xué)習(xí)地址:https://mp.baomidou.com/guide/

示例代碼

github

碼云

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末芍碧,一起剝皮案震驚了整個(gè)濱河市栅表,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌师枣,老刑警劉巖怪瓶,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異践美,居然都是意外死亡洗贰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門陨倡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)敛滋,“玉大人,你說(shuō)我怎么就攤上這事兴革∫锘危” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵杂曲,是天一觀的道長(zhǎng)庶艾。 經(jīng)常有香客問(wèn)我,道長(zhǎng)擎勘,這世上最難降的妖魔是什么咱揍? 我笑而不...
    開(kāi)封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮棚饵,結(jié)果婚禮上煤裙,老公的妹妹穿的比我還像新娘。我一直安慰自己噪漾,他們只是感情好硼砰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著欣硼,像睡著了一般题翰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天遍愿,我揣著相機(jī)與錄音,去河邊找鬼耘斩。 笑死沼填,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的括授。 我是一名探鬼主播坞笙,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼荚虚!你這毒婦竟也來(lái)了薛夜?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤版述,失蹤者是張志新(化名)和其女友劉穎梯澜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體渴析,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晚伙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俭茧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咆疗。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖母债,靈堂內(nèi)的尸體忽然破棺而出午磁,到底是詐尸還是另有隱情,我是刑警寧澤毡们,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布迅皇,位于F島的核電站,受9級(jí)特大地震影響衙熔,放射性物質(zhì)發(fā)生泄漏喧半。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一青责、第九天 我趴在偏房一處隱蔽的房頂上張望挺据。 院中可真熱鬧,春花似錦脖隶、人聲如沸扁耐。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)婉称。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間王暗,已是汗流浹背悔据。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留俗壹,地道東北人科汗。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像绷雏,于是被迫代替她去往敵國(guó)和親头滔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容