<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          史上最全的SpringBoot 中引入 MyBatisPlus 的常規(guī)流程! | 干貨

          共 7634字,需瀏覽 16分鐘

           ·

          2021-01-23 20:40


          出處:https://blog.csdn.net/larger5/article/details/81273287

          作者:IT小村

          一、前言:

          mybatis在持久層框架中還是比較火的,一般項目都是基于ssm。雖然mybatis可以直接在xml中通過SQL語句操作數(shù)據(jù)庫,很是靈活。但正其操作都要通過SQL語句進行,就必須寫大量的xml文件,很是麻煩。mybatis-plus就很好的解決了這個問題。

          mybatis-plus簡介


          Mybatis-Plus(簡稱MP)是一個 Mybatis 的增強工具,在 Mybatis 的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生。這是官方給的定義,關(guān)于mybatis-plus的更多介紹及特性,可以參考mybatis-plus官網(wǎng)。那么它是怎么增強的呢?其實就是它已經(jīng)封裝好了一些crud方法,我們不需要再寫xml了,直接調(diào)用這些方法就行,就類似于JPA。


          今天給大家分享在 DAO 層使用 MyBatisPlus的教程講解。


          官方API地址:https://mp.baomidou.com/#/?id=%E7%AE%80%E4%BB%8B


          Mybatis-PLus 是 Mybatis 的增強工具包,只做增強不做改變,為簡化開發(fā)工作、提高生產(chǎn)率而生。

          二、通用 CRUD


          • 通過本項目(表少,數(shù)據(jù)量大,非常適合)

          • 發(fā)現(xiàn) MyBatisPlus 在單表?CRUD方面

          • 比原來的的 MyBatis 的有著絕對優(yōu)勢:


          VSPSMyBatisMyBatisPlus
          代碼生成器數(shù)據(jù)庫有些表的字段發(fā)聲改變① 再次運行逆向工程的代碼 ②生成一堆代碼,還最好不要動它①只需要修改 Bean 即可(反射實現(xiàn)的)② 生成少量的代碼,可以人為新增內(nèi)容
          CRUD無規(guī)律特殊時手動寫 Mapper 層 sql通過條件構(gòu)造器,實現(xiàn)零 sql !


          下面列出本文相關(guān)代碼,其他代碼如 Druid數(shù)據(jù)源配置、MyBatisPlus分頁配置、sql輸出配置,可以到 github 上查看:

          https://github.com/larger5/SpringBoot_MybatisPlus.git


          package com.cun.plus;import com.baomidou.mybatisplus.mapper.Wrapper;import com.baomidou.mybatisplus.plugins.Page;import com.cun.plus.entity.User;import com.cun.plus.mapper.UserMapper;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import java.util.ArrayList;import java.util.HashMap;import java.util.List;@RunWith(SpringRunner.class)@SpringBootTestpublic class PlusApplicationTests {
          @Autowired private UserMapper userMapper; /** * 1、增加 insert */ @Test public void insertTest() { User user = new User(); user.setUsername("綠茶"); user.setPassword("lvcha"); // 返回對數(shù)據(jù)庫影響操作數(shù):1 Integer insert1 = userMapper.insert(user); // 非空屬性才會出現(xiàn)在 sql 中 // 可以立刻獲取插入新記錄的 id System.out.println(user.getId()); // 同上 Integer insert2 = userMapper.insertAllColumn(user); // 所有屬性都會出現(xiàn)在 sql 中 // 同上 System.out.println(user.getId()); } /** * 2、修改 update */ @Test public void updateTest() { User user = new User(); user.setId(45); user.setUsername("cun"); //user.setPassword("666"); // 返回對數(shù)據(jù)庫影響操作數(shù):1 Integer integer1 = userMapper.updateById(user); // 屬性空則不修改 System.out.println(integer1); // 同上 Integer integer2 = userMapper.updateAllColumnById(user); // 屬性空則字段空 System.out.println(integer2); } /** * 3、查詢 select */ @Test public void selectTest() { // 根據(jù)id 查詢一條記錄 User user = userMapper.selectById(46); System.out.println(user.getUsername());
          ArrayList idList = new ArrayList<>(); idList.add(61); idList.add(63); // 根據(jù)多個id 批量查詢 List users = userMapper.selectBatchIds(idList); System.out.println(users.get(0).getUsername() + users.get(1).getUsername());
          User user1 = new User(); user1.setId(61); user1.setUsername("cun"); // 根據(jù)多個條件返回一個對象,若有多個符合條件的記錄則將報錯 User user2 = userMapper.selectOne(user1); System.out.println(user2.getPassword()); // 根據(jù)多個條件返回對象組,注意Map 中的key 必須和數(shù)據(jù)庫表字段一直 HashMap columnMap = new HashMap<>(); columnMap.put("username", "cun"); List users1 = userMapper.selectByMap(columnMap); System.out.println(users1.size());

          } /** * 4、刪除 delete */ @Test public void deleteTest() { // 根據(jù)一個id 刪除,返回對數(shù)據(jù)庫影響操作數(shù):1 Integer integer1 = userMapper.deleteById(65);// 根據(jù)id刪除一條記錄 System.out.println(integer1);
          ArrayList idList = new ArrayList<>(); // 根據(jù)id集合批量刪除 idList.add(64); idList.add(66); // 根據(jù)多個id 批量刪除,返回對數(shù)據(jù)庫影響操作數(shù):2 Integer integer2 = userMapper.deleteBatchIds(idList); System.out.println(integer2);
          HashMap columnMap = new HashMap<>(); columnMap.put("username", "cun"); // 根據(jù)多個條件刪除,返回對數(shù)據(jù)庫影響操作數(shù) Integer integer3 = userMapper.deleteByMap(columnMap); System.out.println(integer3); } /** * 5、偽分頁(獲取全部數(shù)據(jù)再分頁) */ @Test public void pageTest() { // 分頁查詢,注意如果設(shè)置了 PaginationInterceptor 分頁插件則會報錯, List users2 = userMapper.selectPage(new Page(1, 2), null); //當前頁、每頁大小 System.out.println(users2.get(0).getUsername() + users2.get(1).getUsername()); System.out.println(users2.size()); } /** * 6、條件構(gòu)造器 */ @Test public void wrapperTest(){ List users = userMapper.selectList(new EntityWrapper() .eq("username", "linhongcun") ); System.out.println(users.size()); }
          }

          三、代碼生成器


          上述的代碼通過 MyBatisPlsus 自動寫好的通用 Mapper 層,在 Service 層里邊寫相關(guān)的業(yè)務(wù)邏輯

          其實,使用了 MyBatisPlus 代碼生成器,自動生成 Entity、Dao、Service、Controller 層!

          我們通常是在 Controller 層里邊寫相關(guān)的業(yè)務(wù)邏輯,使用的方法和 Mapper 的類似。

          package com.cun.plus;import com.baomidou.mybatisplus.enums.IdType;import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.generator.config.DataSourceConfig;import com.baomidou.mybatisplus.generator.config.GlobalConfig;import com.baomidou.mybatisplus.generator.config.PackageConfig;import com.baomidou.mybatisplus.generator.config.StrategyConfig;import com.baomidou.mybatisplus.generator.config.rules.DbType;import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;public class MpG {    public static void main(String[] args) {        //1. 全局配置        GlobalConfig config = new GlobalConfig();        config.setActiveRecord(false) // 是否支持AR模式                .setAuthor("linhongcun") // 作者                .setOutputDir("C:\\data\\mp") // 生成路徑                .setFileOverride(true)  // 文件覆蓋                .setIdType(IdType.AUTO) // 主鍵策略                .setServiceName("%sService")  // 設(shè)置生成的service接口的名字的首字母是否為I                // IUserService                .setBaseResultMap(true)                .setBaseColumnList(true);        //2. 數(shù)據(jù)源配置        DataSourceConfig dsConfig = new DataSourceConfig();        dsConfig.setDbType(DbType.MYSQL)  // 設(shè)置數(shù)據(jù)庫類型                .setDriverName("com.mysql.jdbc.Driver")                .setUrl("jdbc:mysql://120.79.197.130:3307/testspring?useSSL=true&verifyServerCertificate=false&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8")                .setUsername("root")                .setPassword("123");        //3. 策略配置        StrategyConfig stConfig = new StrategyConfig();        stConfig.setCapitalMode(true) //全局大寫命名                .setDbColumnUnderline(true)  // 指定表名 字段名是否使用下劃線                .setNaming(NamingStrategy.underline_to_camel) // 數(shù)據(jù)庫表映射到實體的命名策略                .setTablePrefix("tb_")                .setInclude("tb_user");  // 生成的表
          //4. 包名策略配置 PackageConfig pkConfig = new PackageConfig(); pkConfig.setParent("com.cun.plus") .setMapper("mapper") .setService("service") .setController("controller") .setEntity("entity") .setXml("mapper"); //5. 整合配置 AutoGenerator ag = new AutoGenerator(); ag.setGlobalConfig(config) .setDataSource(dsConfig) .setStrategy(stConfig) .setPackageInfo(pkConfig); //6. 執(zhí)行 ag.execute(); }}

          四、相關(guān)依賴


          // 選擇 freemarker 引擎,默認 Veloctiy    // mpg.setTemplateEngine(new FreemarkerTemplateEngine());


                              com.baomidou            mybatis-plus-boot-starter            2.3                                    org.apache.velocity            velocity-engine-core            2.0        

          最后大家注意下:


          使用 MyBatis 的一個弊端,就是得依靠使用代碼生成器,使得邏輯基本寫在 controller 層,而不是 service 層,不合時宜。


          推薦閱讀

          瀏覽 16
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲日频看视频网站 | 黄色电影在线免费观看网站 | 狼人伊人久久 | 久久婷婷综合网 | 香蕉视频日韩成人网 |