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

          Spring Boot 中引入 MyBatisPlus 的常規(guī)流程

          共 14720字,需瀏覽 30分鐘

           ·

          2021-04-01 11:21


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

          作者:IT小村

          一 前言:

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

          mybatis-plus簡(jiǎn)介。

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

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

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

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

          圖片

          二、通用 CRUD

          • 通過(guò)本項(xiàng)目(表少,數(shù)據(jù)量大,非常適合)
          • 發(fā)現(xiàn) MyBatisPlus 在單表 CRUD方面
          • 比原來(lái)的的 MyBatis 的有著絕對(duì)優(yōu)勢(shì):
          圖片

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

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

          圖片
          @RunWith(SpringRunner.class)
          @SpringBootTest
          public class PlusApplicationTests 
          {

              @Autowired
              private UserMapper userMapper;

              /**
               * 1、增加 insert
               */

              @Test
              public void insertTest() {
                  User user = new User();
                  user.setUsername("綠茶");
                  user.setPassword("lvcha");
                  // 返回對(duì)數(shù)據(jù)庫(kù)影響操作數(shù):1
                  Integer insert1 = userMapper.insert(user); // 非空屬性才會(huì)出現(xiàn)在 sql 中
                  // 可以立刻獲取插入新記錄的 id
                  System.out.println(user.getId());
                  // 同上
                  Integer insert2 = userMapper.insertAllColumn(user); // 所有屬性都會(huì)出現(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");
                  // 返回對(duì)數(shù)據(jù)庫(kù)影響操作數(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<Integer> idList = new ArrayList<>();
                  idList.add(61);
                  idList.add(63);
                  // 根據(jù)多個(gè)id 批量查詢
                  List<User> 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ù)多個(gè)條件返回一個(gè)對(duì)象,若有多個(gè)符合條件的記錄則將報(bào)錯(cuò)
                  User user2 = userMapper.selectOne(user1);
                  System.out.println(user2.getPassword());

                  // 根據(jù)多個(gè)條件返回對(duì)象組,注意Map 中的key 必須和數(shù)據(jù)庫(kù)表字段一直
                  HashMap<String, Object> columnMap = new HashMap<>();
                  columnMap.put("username""cun");
                  List<User> users1 = userMapper.selectByMap(columnMap);
                  System.out.println(users1.size());


              }

              /**
               * 4、刪除 delete
               */

              @Test
              public void deleteTest() {
                  // 根據(jù)一個(gè)id 刪除,返回對(duì)數(shù)據(jù)庫(kù)影響操作數(shù):1
                  Integer integer1 = userMapper.deleteById(65);// 根據(jù)id刪除一條記錄
                  System.out.println(integer1);

                  ArrayList<Integer> idList = new ArrayList<>(); // 根據(jù)id集合批量刪除
                  idList.add(64);
                  idList.add(66);
                  // 根據(jù)多個(gè)id 批量刪除,返回對(duì)數(shù)據(jù)庫(kù)影響操作數(shù):2
                  Integer integer2 = userMapper.deleteBatchIds(idList);
                  System.out.println(integer2);

                  HashMap<String, Object> columnMap = new HashMap<>();
                  columnMap.put("username""cun");
                  // 根據(jù)多個(gè)條件刪除,返回對(duì)數(shù)據(jù)庫(kù)影響操作數(shù)
                  Integer integer3 = userMapper.deleteByMap(columnMap);
                  System.out.println(integer3);
              }

              /**
               * 5、偽分頁(yè)(獲取全部數(shù)據(jù)再分頁(yè))
               */

              @Test
              public void pageTest() {
                  // 分頁(yè)查詢,注意如果設(shè)置了 PaginationInterceptor 分頁(yè)插件則會(huì)報(bào)錯(cuò),
                  List<User> users2 = userMapper.selectPage(new Page<User>(12), null); //當(dāng)前頁(yè)、每頁(yè)大小
                  System.out.println(users2.get(0).getUsername() + users2.get(1).getUsername());
                  System.out.println(users2.size());
              }


              /**
               * 6、條件構(gòu)造器
               */

              @Test
              public void wrapperTest(){
                  List<User> users = userMapper.selectList(new EntityWrapper<User>()
                          .eq("username""linhongcun")
                  );
                  System.out.println(users.size());
              }

          }

          三、代碼生成器

          上述的代碼通過(guò) MyBatisPlsus 自動(dòng)寫(xiě)好的通用 Mapper 層,在 Service 層里邊寫(xiě)相關(guān)的業(yè)務(wù)邏輯,其實(shí),使用了 MyBatisPlus 代碼生成器,自動(dòng)生成 Entity、Dao、Service、Controller 層!

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

          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ù)庫(kù)類型
                          .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//全局大寫(xiě)命名
                          .setDbColumnUnderline(true// 指定表名 字段名是否使用下劃線
                          .setNaming(NamingStrategy.underline_to_camel) // 數(shù)據(jù)庫(kù)表映射到實(shí)體的命名策略
                          .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 引擎,默認(rèn) Veloctiy
          // mpg.setTemplateEngine(new FreemarkerTemplateEngine());
          <!-- mybatis-plus-->
                  <dependency>
                      <groupId>com.baomidou</groupId>
                      <artifactId>mybatis-plus-boot-starter</artifactId>
                      <version>2.3</version>
                  </dependency>
                  <!-- 代碼生成器默認(rèn)使用如下模版引擎 -->
                  <dependency>
                      <groupId>org.apache.velocity</groupId>
                      <artifactId>velocity-engine-core</artifactId>
                      <version>2.0</version>
                  </dependency>

          最后大家注意下:

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


          我已經(jīng)更新了《10萬(wàn)字Springboot經(jīng)典學(xué)習(xí)筆記》,點(diǎn)擊下面小卡片,進(jìn)Java開(kāi)發(fā)寶典】,回復(fù):筆記,即可免費(fèi)獲取。

          點(diǎn)贊是最大的支持 

          瀏覽 43
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  亚洲成人中文字幕 | 久久激情视频 | 非洲一级婬片A片免费 | 久久大香蕉精品 | 爱逼综合网 |