欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis-Plus里面的增刪改查詳解(化繁為簡(jiǎn))

 更新時(shí)間:2023年07月11日 12:00:11   作者:天怎么不會(huì)塌  
這篇文章主要給大家介紹了關(guān)于MyBatis-Plus里面的增刪改查的相關(guān)資料,Mybatis-Plus是一個(gè)基于Mybatis的增強(qiáng)工具,可以簡(jiǎn)化Mybatis的開(kāi)發(fā),提高開(kāi)發(fā)效率,需要的朋友可以參考下

一. MP 里面的增刪改查

在當(dāng)前盛行的 SpringBoot 項(xiàng)目中,整合持久層這一塊,目前主流的有兩種:JPA 和 MyBatis-Plus。至于哪個(gè)用的更多一些,這個(gè)主要還是看每個(gè)公司的技術(shù)架構(gòu),但硬是要說(shuō)一個(gè)最為常用的,我認(rèn)為是 MyBatis-Plus,而在這里也是對(duì) MyBatis-Plus 的一個(gè)使用進(jìn)行演示

好了,廢話不多說(shuō),直接開(kāi)始吧。為了減少冗余,下面所有 MyBatis-Plus 都使用 MP 來(lái)代替

1.1 項(xiàng)目搭建

項(xiàng)目的創(chuàng)建就直接跳過(guò)了,直接從依賴(lài)開(kāi)始吧。開(kāi)始之前得先弄個(gè)表,表怎么弄都行,下面這個(gè)是我測(cè)試建的,可以參考一下

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(0) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用戶(hù)名',
  `age` int(0) NOT NULL COMMENT '年齡',
  `mobile` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '手機(jī)號(hào)',
  `email` varchar(55) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '郵箱',
  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',
  `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '創(chuàng)建人',
  `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更改時(shí)間',
  `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '更改人',
  `is_delete` int(0) NULL DEFAULT NULL COMMENT '是否刪除 0-未刪除 1-已刪除',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3554031 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '用戶(hù)表' ROW_FORMAT = Dynamic;

依賴(lài)

(1) 目前 MP 的最新版本

        <!-- Mybatis-plus 依賴(lài) -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>

(2) 當(dāng)然,如果你想使用 MP 中的快速生成實(shí)體類(lèi),需要添加 MP 中的一個(gè)工具依賴(lài)且需導(dǎo)入一個(gè)模板引擎的依賴(lài) (模板可以自定義,具體看 MP 官網(wǎng)的例子,這里直接使用 Freemark)

        <!-- Mybatis-plus 逆向自動(dòng)生成實(shí)體類(lèi)所需依賴(lài) -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>

(3) 以上的都是 MP 中所需的依賴(lài),除此之外,當(dāng)然還少不了 SpringWeb 的依賴(lài)了;我們還需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,MySQL 的依賴(lài)也必不可缺

        <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>

逆向工程創(chuàng)建實(shí)體類(lèi)

(1) 其實(shí)這個(gè)有好幾種方法,自己手動(dòng)創(chuàng)建也行;使用 IDEA 中的一些插件也行;或者使用 MP 官網(wǎng)提供的代碼生成模板也行。不管用哪種方法,最終要做的都是一樣的,就是把項(xiàng)目搭起來(lái),實(shí)體類(lèi)弄起來(lái)。

(2) 在這里,就直接使用 MP 官網(wǎng)提供的代碼模板吧。直接在 MP官網(wǎng) —— 指南 —— 代碼生成器 (新) 就能找到

(3) copy 這段代碼到 maven 工程自帶的單元測(cè)試中,然后根據(jù)注釋去修改一下,直接運(yùn)行即可。

(4) 稍微解釋一下怎么使用這個(gè),其實(shí)很簡(jiǎn)單:

  • url 、username 、password :即你數(shù)據(jù)庫(kù)連接的地址、用戶(hù)名、密碼
  • outputDir :這個(gè)就是注釋的意思,輸出目錄嘛~但注意一下,這個(gè)寫(xiě)到 java 目錄即可。(可參考:“D:\code\test\test-demo\ts-mybatis\src\main\java”)
  • parent :父包名 (一般是 com.xxx)
  • moduleName :父包名下的模塊名 (即 com.xxx.yyy 這個(gè) yyy 即是這個(gè)模塊名了)
  • pathInfo :后面的那個(gè)地址即是 mapperxml 的路徑了 (可參考:“D:\code\test\test-demo\ts-mybatis\src\main\resources\mapper”)
  • addInclude :這個(gè)就更簡(jiǎn)單了,你要它幫你生成什么實(shí)體類(lèi),你就把表名往這這里填,注意的是,名字可別寫(xiě)錯(cuò),不然識(shí)別不出來(lái)
  • addTablePrefix :這個(gè)就是一些表的前綴在生成到 Java 代碼中的類(lèi)名時(shí),給你去掉前綴,沒(méi)有可以不管他
       /**
        * mp 逆向工程生成實(shí)體類(lèi)
        */
       @Test
       void contextLoads() {
           FastAutoGenerator.create("jdbc:mysql://localhost:3306/ts_mybatis_db?useUnicode=true&characterEncoding=utf8&useSSL=false&nullCatalogMeansCurrent=true&serverTimezone=Asia/Shanghai", "root", "root")
                   .globalConfig(builder -> {
                       builder.author("Peng") // 設(shè)置作者
                               .enableSwagger() // 開(kāi)啟 swagger 模式
                               .fileOverride() // 覆蓋已生成文件
                               .outputDir("D:\\code\\test\\test-demo\\ts-mybatis\\src\\main\\java"); // 指定輸出目錄
                   })
                   .packageConfig(builder -> {
                       builder.parent("com.peng") // 設(shè)置父包名
                               .moduleName("tsmybatis") // 設(shè)置父包模塊名
                               .pathInfo(Collections.singletonMap(OutputFile.xml, "D:\\code\\test\\test-demo\\ts-mybatis\\src\\main\\resources\\mapper")); // 設(shè)置mapperXml生成路徑
                   })
                   .strategyConfig(builder -> {
                       builder.addInclude("user") // 設(shè)置需要生成的表名
                               .addTablePrefix("t_", "c_"); // 設(shè)置過(guò)濾表前綴
                   })
                   .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默認(rèn)的是Velocity引擎模板
                   .execute();
       }

(5) 注意,這個(gè)如果沒(méi)有加 模板引擎 運(yùn)行的時(shí)候會(huì)報(bào)錯(cuò),加上 Freemarker 依賴(lài)即可

大功告成之后,在你的項(xiàng)目中 MP 就會(huì)把整個(gè)項(xiàng)目基礎(chǔ)模塊都給搭好了,如下圖:

注意,mapper 里面的掃描在 MP 中并不會(huì)幫你生成,所以這個(gè) MapperScan 還需要自己去加上,在啟動(dòng)類(lèi)上面加上一個(gè) @MapperScan 這個(gè)注解,去掃描你的 mapper 文件

@MapperScan(value = {<!--{C}%3C!%2D%2D%20%2D%2D%3E-->"com.peng.tsmybatis.mapper"})

1.2 極其便利的單表操作

以下的測(cè)試都是,都是使用 Postman 進(jìn)行測(cè)試的,在這里為了方便測(cè)試,全都是使用 GetMapping 去調(diào)用

1.2.1 增

    @Resource
    IUserService userService;

    @GetMapping("/add")
    public boolean add() {
        User user = new User();
        user.setName("李四");
        user.setAge(18);
        return userService.save(user);
    }

(1) 很簡(jiǎn)單,其實(shí)就是 new 了一個(gè)對(duì)象扔到 MP 的方法里面而已,通過(guò)觀察 IUserService 這個(gè)接口可以發(fā)現(xiàn),它繼承了 IService<User> 且泛型里面放的就是你對(duì)應(yīng)的實(shí)體類(lèi) User,因此在此 service 下的一切 MP 相關(guān)的方法都是針對(duì) User 這個(gè)實(shí)體類(lèi)的操作

(2) 因?yàn)?User 這個(gè)實(shí)體類(lèi)是對(duì)應(yīng)數(shù)據(jù)庫(kù)中的 User 表的,所以需要注意的是當(dāng)前的這個(gè)表設(shè)計(jì)中是否有哪些必填的字段,如果遺漏了(即沒(méi)有 set 那個(gè)值到這個(gè) User 對(duì)象中),那么就會(huì)報(bào)錯(cuò)

(3) 其他就沒(méi)什么需要注意的,你想添加什么內(nèi)容,就往這個(gè) User 對(duì)象中 set 什么進(jìn)去就可以了。成功即返回 true 了,反之則 false 了。另外如果你想查看 MP 幫你執(zhí)行的 SQL 可以在 yaml 或者 properties 中加上以下這段。我這里使用的是 yaml 文件配置

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印 mybatis-plus 的執(zhí)行日志

添加之后訪問(wèn)接口時(shí)便會(huì)有以下日志打印:

(4) 我這里使用的是 Postman 來(lái)測(cè)試這個(gè)接口,返回 true 則表示成功了,此時(shí)去數(shù)據(jù)庫(kù)查看便可發(fā)現(xiàn),多了一條 name = 李四;age = 18 的記錄

1.2.2 批增

(1) 當(dāng)我們有當(dāng)量添加的需求時(shí),不停的去 new 對(duì)象太麻煩了,因此 MP 為我們提供了批量添加的方法。

(2) 還是很簡(jiǎn)單,只是由原來(lái)的一個(gè)對(duì)象變成了集合而已。我們只需要把需要添加的信息,收集成一個(gè)集合即可,然后把這個(gè)集合丟給 MP ,剩下的事情 MP 就會(huì)幫我們?nèi)プ隽?,像這樣:

    @GetMapping("/addBatch")
    public boolean addBatch() {
        List<User> entityList = new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
            User user = new User();
            user.setName("張三" + i);
            user.setAge(20 + i);
            entityList.add(user);
        }
        return userService.saveBatch(entityList);
    }

(3) 通過(guò) Postman 訪問(wèn) http://localhost:8082/addBatch 這個(gè)接口后返回 true,表示成功了,此時(shí)查看數(shù)據(jù)庫(kù)就多了10條數(shù)據(jù):

(4) 玩法很簡(jiǎn)單,只是從一個(gè)對(duì)象,變成了一個(gè)集合而已。所以 MP 還是很方便的,它在原來(lái)的 MyBatis 上增加了很多對(duì)數(shù)據(jù)庫(kù)的操作方法,這些都只是它最基礎(chǔ)的一些操作。

1.2.3 改、批改

(1) 這個(gè)與增其實(shí)是一樣的,唯一的區(qū)別是需要傳一個(gè) ID,不然 MP 不知道你需要對(duì)哪條記錄進(jìn)行修改。所以只需要在上面的基礎(chǔ)上多去 set 一個(gè) id 就可以了,像這樣:

    @GetMapping("/update")
    public boolean update() {
        User entity = new User();
        entity.setId(1);
        entity.setName("靈兒");
        entity.setAge(16);
        return userService.updateById(entity);
    }
    @GetMapping("/updateBatch")
    public boolean updateBatch() {
        List<User> entityList = new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
            User user = new User();
            user.setId(i + 1);
            user.setName("拜月" + i);
            user.setAge(30 + i);
            entityList.add(user);
        }
        return userService.updateBatchById(entityList);
    }

(2) 增和改其實(shí)本質(zhì)上是差不多的,運(yùn)行成功之后,查看數(shù)據(jù)庫(kù)的結(jié)果就變成了這樣:

1.2.4 查

(1) 在 MP 中,查就更簡(jiǎn)單了,因?yàn)樵谖覀儗?shí)際項(xiàng)目中用的最多的就是查詢(xún)了。當(dāng)然往往我們的查詢(xún)會(huì)伴隨著很多條件,在 MP 中給我們提供了條件構(gòu)造器,也是能夠滿(mǎn)足到我們不寫(xiě) SQL 的場(chǎng)景的,這個(gè)后續(xù)再細(xì)聊。

(2) 對(duì)于單表的操作,在 MP 中就一個(gè) list() 的方法就完成了

    @GetMapping("/list")
    public List<User> list() {
        return userService.list();
    }

(3) 通過(guò) Postman 訪問(wèn)接口后,在 IDEA 中可以看到 MP 中打印出來(lái)的日志

(4) 可能你會(huì)說(shuō),后面那些字段都沒(méi)有數(shù)據(jù),你不想去查出來(lái),浪費(fèi)資源,那應(yīng)該怎么辦呢?這時(shí)就需要我們使用條件構(gòu)造器了,通過(guò)條件構(gòu)造器去進(jìn)行操作

    @GetMapping("/list")
    public List<User> list() {
        QueryWrapper<User> qw = new QueryWrapper<>();
        qw.select("id","name","age");
//        qw.lambda().select(User::getId, User::getName, User::getAge);  JDK8的方法
        return userService.list(qw);
    }

(5) 注意,括號(hào)里面的字符串需要與你數(shù)據(jù)庫(kù)上能夠?qū)?yīng)上,否者查不出來(lái)的,很好理解,就和自己寫(xiě) SQL 一樣,如果查詢(xún)的字段表中沒(méi)有,顯然也是查不出來(lái)的,MP 只是幫我們把 SQL 給寫(xiě)了而已

12.5 刪、批刪

(1) 這個(gè)其實(shí)和修改類(lèi)似的,也是需要傳一個(gè) ID ,不然 MP 不知道你要?jiǎng)h除的是哪一條數(shù)據(jù)。

(2) 還是一樣,刪除單條記錄,只需要 new 一個(gè)對(duì)象然后傳一個(gè)你要?jiǎng)h除的 ID 進(jìn)去,MP 就會(huì)幫你處理了;而批刪的話則是一個(gè)集合了,也是需要傳 ID 的

    @GetMapping("/delete")
    public Boolean delete() {
        User entity = new User();
        entity.setId(1);
        return userService.removeById(entity);
    }
    @GetMapping("/deleteBatch")
    public boolean deleteBatch() {
        List<User> entityList = new ArrayList<>();
        for (int i = 1; i <= 10; i++) {
            User user = new User();
            user.setId(i + 1);
            entityList.add(user);
        }
        return userService.removeBatchByIds(entityList);
    }

(3) 與修改稍微有點(diǎn)不一樣的是,你不需要傳修改的值過(guò)去了,只需要傳你要?jiǎng)h除的 ID 即可。

(4) 需要注意的是,MP 的這個(gè)方法是物理刪除的。而在我們實(shí)際開(kāi)發(fā)中,有些業(yè)務(wù)場(chǎng)景是邏輯刪除的,也就是說(shuō)我們的表中有一個(gè)類(lèi)似 is_delete 的字段,刪除時(shí)只需要修改這個(gè)字段由 0 變 1或是由 1 變 0 即可,具體看實(shí)際需求。

(5) 在 MP 中同樣也封裝了邏輯刪除的一些配置,當(dāng)你業(yè)務(wù)是邏輯刪除時(shí),可以在 IDEA 中這樣去配置,告訴 MP 我這里使用的是邏輯刪除,別真把我的記錄給刪除掉了~很簡(jiǎn)單,只需要在邏輯刪除的字段上加一個(gè)注解就可以搞定

    @TableLogic(value = "0",delval = "1")
    private Integer isDelete;

(6) @TableLogic() 就是這個(gè)注解,可以去下載 MP 源碼查看:第一個(gè)參數(shù)是未刪除的值,第二個(gè)參數(shù)是已刪除的值,這里就不放圖片了,感興趣的朋友可以點(diǎn)進(jìn)去瞅瞅。

(7) 除了這種配置方式外,還可以在 application.yaml 或者 application.properties 那些配置文件中進(jìn)行配置,就是說(shuō),當(dāng)你有好多個(gè)實(shí)體類(lèi),而好多個(gè)實(shí)體類(lèi)都是邏輯刪除,那么也就意味著每一個(gè)注解里面的參數(shù)都要寫(xiě)上 value = “0”,delval = “1” 這樣一段,顯然過(guò)于冗余。所以我們可以在配置文件中進(jìn)行一個(gè)全局配置,像這樣:

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: 1 #刪除
      logic-not-delete-value: 0 #未刪除

(8) 加了這個(gè)之后,MP 就會(huì)對(duì)你當(dāng)前的實(shí)體類(lèi)所對(duì)應(yīng)的表的 CRUD 操作都是帶上邏輯刪除的一個(gè)邏輯,也就是 is_delete=0 ,就是當(dāng)前記錄是未刪除的。

(9) 如果在前面開(kāi)啟了 MP 的執(zhí)行日志就會(huì)發(fā)現(xiàn),MP 在執(zhí)行 CRUD 的時(shí)候,最后都加上了一個(gè) WHERE is_delete=0 的一個(gè)判斷

1.3 一些小擴(kuò)展

(1) 一般而言,我們?cè)O(shè)計(jì)表的時(shí)候,有一些字段是往往都是亙古不變的,像類(lèi)似 create_time、update_time 那些,像我們當(dāng)前的這個(gè)表:

(2) 像剛剛提到的兩個(gè)字段,在我們每一次添加或者修改的時(shí)候都需要去更新一下時(shí)間,一個(gè)兩個(gè)還好,如果多起來(lái)的話就會(huì)發(fā)現(xiàn)好多代碼都是重復(fù)的,特別冗余。對(duì)此 MP 給我提供了解決方案,可以在進(jìn)行插入、修改的時(shí)候就自動(dòng)幫我們進(jìn)行一個(gè)處理了

(3) 也和上面處理邏輯刪除一樣,一個(gè)注解就完事了,但這個(gè)需要去配置一下,創(chuàng)建一個(gè)配置類(lèi),實(shí)現(xiàn) MetaObjectHandler 這個(gè)接口,重寫(xiě)他的兩個(gè)方法就可以了,如下

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        /*
        參數(shù)一: 屬性的名稱(chēng)
        參數(shù)二: 你想給這個(gè)屬性設(shè)置的值
        參數(shù)三: 元對(duì)象,所有入?yún)⒌?MetaObject 必定是 entity 或其子類(lèi)的 MetaObject
         */
        this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
        this.setFieldValByName("isDelete", 0, metaObject);
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
    }
}

(4) 寫(xiě)好配置類(lèi)之后,在實(shí)體類(lèi)上使用 @TableField() 這個(gè)注解和這個(gè)配置類(lèi)呼應(yīng)上就可以了,像這樣

	@TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    @TableField(fill = FieldFill.INSERT)
    private Integer isDelete;

(5) 這里的意思就是說(shuō):當(dāng)進(jìn)行 INSERT 操作的時(shí)候,自動(dòng)幫我 createTime、updateTime 字段都設(shè)置成當(dāng)前時(shí)間,而 isDelete 則默認(rèn)設(shè)置成 0;當(dāng) UPDATE 的時(shí)候,只更改 updateTime 的時(shí)候改成當(dāng)前更改的時(shí)間

(6) 實(shí)踐才是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),咱們來(lái)試一下。我這里為了省事,就不用 Postman 去發(fā)請(qǐng)求訪問(wèn)接口了,直接在單元測(cè)試中進(jìn)行

    @Resource
    private UserMapper userMapper;
    @Test
    public void test08() {
        User user = new User();
        user.setName("伏羲");
        user.setAge(131);
        int result = userMapper.insert(user);
        System.out.println(result == 1 ? "添加成功" : "添加失敗");
    }

從控制臺(tái)打印的日志可以看到,create_time, update_time, is_delete 這三個(gè)值 MP 默認(rèn)幫我去添加了數(shù)據(jù),而添加的數(shù)據(jù)正是我們?cè)谂渲梦募显O(shè)置的

(7) UPDATE 也是一樣的,這里就不演示了

1.4 小結(jié)

在 MP 中對(duì)單表的操作是非常方便的,如果對(duì)于需要連表的一對(duì)多或多對(duì)多,需要在對(duì)應(yīng)的實(shí)體類(lèi)上加一些注解啥的,具體還沒(méi)去研究過(guò);因?yàn)閭€(gè)人覺(jué)得,在一些較為復(fù)雜的表結(jié)構(gòu)中,還不如自己寫(xiě) SQL 來(lái)的快。但是如果是對(duì)單表操作,強(qiáng)烈建議用 MP 自帶的方法,誰(shuí)還寫(xiě) SQL 呢~

當(dāng)然目前為止演示的都是很簡(jiǎn)單的 CRUD,實(shí)際操作上肯定是不一樣的。因?yàn)樵谖覀儗?shí)際操作中,可能會(huì)頻繁的使用 MP 中的條件構(gòu)造器去根據(jù)業(yè)務(wù)不同來(lái)返回?cái)?shù)據(jù)。這個(gè)會(huì)在后面繼續(xù)深入去演示一些 MP 中常用到的方法

另外需要說(shuō)明一下的是,上述演示的代碼中,都是在 Controller層中進(jìn)行的。我這里是為了方便,MP 中的 IService 中已經(jīng)有 CRUD 的方法了,就沒(méi)去到 service 層去操作。按照代碼的規(guī)范,還是更建議去到 service 層中處理業(yè)務(wù)邏輯的。

可能第三點(diǎn)會(huì)有些繞口,基礎(chǔ)好的可能明白我說(shuō)的意思了,而至于基礎(chǔ)稍微沒(méi)那么好的,既然都看到這里了,我還是在簡(jiǎn)單的演示一下標(biāo)準(zhǔn)版吧…比如要返回一個(gè)“用戶(hù)菜單”

(1) Controller

    @Resource
    private IUserService userService;
    @GetMapping("/userMenus")
    public List<User> userMenus() {
        List<User> result = userService.userMenus();
        //如果結(jié)果不為空,返回結(jié)果;否之返回 null
        return ObjectUtils.isNotEmpty(result) ? result : null;
    }

(2) Service,注入一個(gè) Mapper,其中也有 MP 自帶的方法。正常來(lái)說(shuō),上面演示的都應(yīng)該在這里,也就是 Service 層進(jìn)行處理,再返回到 Controller 中

    @Autowired
    private UserMapper userMapper;
    @Override
    public List<User> userMenus() {
        QueryWrapper<User> qw = new QueryWrapper<>();
        qw.lambda().select(User::getId, User::getName, User::getAge);
        return userMapper.selectList(qw);
    }

(3) 如果需要寫(xiě) SQL ,那么也是一樣的,只是跳到 Mapper 這個(gè)接口,然后再跳到 MapperXML 中去寫(xiě)而已,當(dāng)然你也可以在 Mapper 時(shí)使用一些 MyBatis 的注解(@Select、@Update…之類(lèi)的),我這里直接放個(gè)圖片了,就不一步步演示了

或者類(lèi)似這樣

總結(jié)

到此這篇關(guān)于MyBatis-Plus增刪改查的文章就介紹到這了,更多相關(guān)MyBatis-Plus增刪改查內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis-Plus處理Mysql?Json類(lèi)型字段的詳細(xì)教程

    Mybatis-Plus處理Mysql?Json類(lèi)型字段的詳細(xì)教程

    這篇文章主要給大家介紹了關(guān)于Mybatis-Plus處理Mysql?Json類(lèi)型字段的詳細(xì)教程,Mybatis-Plus可以很方便地處理JSON字段,在實(shí)體類(lèi)中可以使用@JSONField注解來(lái)標(biāo)記JSON字段,同時(shí)在mapper.xml中使用json函數(shù)來(lái)操作JSON字段,需要的朋友可以參考下
    2024-01-01
  • 最新評(píng)論