<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ī)流程

          共 6769字,需瀏覽 14分鐘

           ·

          2021-02-21 07:25


          出處: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)稱(chēng)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)用這些方法就行,就類(lèi)似于JPA。

          發(fā)布過(guò)很多 mybatis 的優(yōu)質(zhì)文章,可以關(guān)注微信公眾號(hào) Java后端,回復(fù) 666 下載這一本 Java技術(shù)棧文檔。

          今天給大家分享在 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、查詢(xún)?select
          ?????*/

          ????@Test
          ????public?void?selectTest()?{
          ????????//?根據(jù)id?查詢(xún)一條記錄
          ????????User?user?=?userMapper.selectById(46);
          ????????System.out.println(user.getUsername());

          ????????ArrayList?idList?=?new?ArrayList<>();
          ????????idList.add(61);
          ????????idList.add(63);
          ????????//?根據(jù)多個(gè)id?批量查詢(xún)
          ????????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ù)多個(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?columnMap?=?new?HashMap<>();
          ????????columnMap.put("username",?"cun");
          ????????List?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?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?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è)查詢(xún),注意如果設(shè)置了?PaginationInterceptor?分頁(yè)插件則會(huì)報(bào)錯(cuò),
          ????????List?users2?=?userMapper.selectPage(new?Page(1,?2),?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?users?=?userMapper.selectList(new?EntityWrapper()
          ????????????????.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 的類(lèi)似。

          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ù)類(lèi)型
          ????????????????.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)?//?指定表名?字段名是否使用下劃線(xiàn)
          ????????????????.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)依賴(lài)

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

          ????????<dependency>
          ????????????<groupId>com.baomidougroupId>
          ????????????<artifactId>mybatis-plus-boot-starterartifactId>
          ????????????<version>2.3version>
          ????????dependency>
          ????????
          ????????<dependency>
          ????????????<groupId>org.apache.velocitygroupId>
          ????????????<artifactId>velocity-engine-coreartifactId>
          ????????????<version>2.0version>
          ????????dependency>

          最后大家注意下:

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

          推薦閱讀:


          垃圾代碼和優(yōu)質(zhì)代碼的區(qū)別?

          入職騰訊第九年,我辭職了

          MyBatis 三種批量插入方式的對(duì)比 !

          參考阿里規(guī)范,優(yōu)秀的 Java 項(xiàng)目代碼該如何分層?

          30 行代碼實(shí)現(xiàn)螞蟻森林自動(dòng)收能量(附送源碼)

          當(dāng)Docker遇到Intellij IDEA,再次解放了生產(chǎn)力~

          我把 Spring Boot 的 banner 換成了美女,老板說(shuō)工作不飽和,建議安排加班

          一名外包程序員入職螞蟻金服,被質(zhì)疑到懷疑人生…

          想接私活時(shí)薪再翻一倍,建議根據(jù)這幾個(gè)開(kāi)源的SpringBoot項(xiàng)目(含小程序)改改~


          瀏覽 57
          點(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>
                  蜜芽欧美成人 | 三级AV在线| 欧美性爱内射在线 | 中国精品久久久久久 | 国产精品色婷婷综合 |