基礎開發之Mybatis Plus基礎使用

Mybatis-Plus 是一款 Mybatis 動態 SQL 自動注入 Mybatis 增刪改查 CRUD 操做中間件, 減小你的開發週期優化動態維護 XML 實體字段,無入侵全方位 ORM 輔助層讓您擁有更多時間陪家人。java

如下內容 以Mybatis-Plus 3.0.1版本 爲藍本;mysql

詳情見官方文檔:spring

https://mp.baomidou.com/guide/#%E7%89%B9%E6%80%A7 sql

 

 

springboot2.0 集成 mybatis-plus

  1. pom引入所需jar包
    1. <!-- mybatisPlus 核心庫 -->
              <dependency>
                  <groupId>com.baomidou</groupId>
                  <artifactId>mybatis-plus-boot-starter</artifactId>
                  <version>3.1.0</version>
              </dependency>
              <dependency>
                  <groupId>com.baomidou</groupId>
                  <artifactId>mybatis-plus-extension</artifactId>
                  <version>3.1.0</version>
              </dependency>
              <!-- mybatis 代碼自動生成器 -->
              <dependency>
                  <groupId>com.baomidou</groupId>
                  <artifactId>mybatis-plus-generator</artifactId>
                  <version>3.1.0</version>
              </dependency>
              <!--mybatis-plus完成項目構建所需模板,真實項目不須要使用-->
              <dependency>
                  <groupId>org.freemarker</groupId>
                  <artifactId>freemarker</artifactId>
              </dependency>

       

  2. 配置自動生成工具類
    1. package org.xx.xx.db.util;
      
      import com.baomidou.mybatisplus.core.toolkit.StringPool;
      import com.baomidou.mybatisplus.generator.AutoGenerator;
      import com.baomidou.mybatisplus.generator.InjectionConfig;
      import com.baomidou.mybatisplus.generator.config.*;
      import com.baomidou.mybatisplus.generator.config.po.TableInfo;
      import com.baomidou.mybatisplus.generator.config.rules.DateType;
      import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
      import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
      
      import java.util.ArrayList;
      import java.util.List;
      
      /**
       * @Description:
       * @Auther: wuxw
       * @Date: 2019/9/30 14:27
       */
      public class CodeGeneratorUtil {
      
          public static void main(String[] args) {
              //代碼生成器
              AutoGenerator mpg = new AutoGenerator();
      
              //全局配置
              GlobalConfig gc = new GlobalConfig();
              String projectPath = System.getProperty("user.dir") + "/litemall-db/";
              gc.setOutputDir(projectPath + "/src/main/java");
              gc.setAuthor("wuxw");
              gc.setServiceName("%sService");//自定義Service接口生成的文件名
              gc.setOpen(false);
              gc.setBaseResultMap(true);
              gc.setDateType(DateType.ONLY_DATE);
              mpg.setGlobalConfig(gc);
      
              //數據源配置
              DataSourceConfig dsc = new DataSourceConfig();
              dsc.setUrl("jdbc:mysql://127.0.0.1:3306/litemall?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8");
              dsc.setDriverName("com.mysql.cj.jdbc.Driver");
              dsc.setUsername("root");
              dsc.setPassword("123456");
              mpg.setDataSource(dsc);
      
              //包配置
              PackageConfig pc = new PackageConfig();
              pc.setParent("org.xxx.xxx.db")
                      .setMapper("dao");
              mpg.setPackageInfo(pc);
      
              //自定義配置
              InjectionConfig cfg = new InjectionConfig() {
                  @Override
                  public void initMap() {
                      //to do nothing
                  }
              };
      
              //自定義輸出配置
              List<FileOutConfig> focList = new ArrayList<>();
              //自定義配置會優先輸出
              focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
                  @Override
                  public String outputFile(TableInfo tableInfo) {
                      // 自定義輸出文件名 , 若是你 Entity 設置了先後綴、此處注意 xml 的名稱會跟着發生變化!!
                      return projectPath + "/src/main/resources/mappers/"
                              + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
                  }
              });
              cfg.setFileOutConfigList(focList);
              mpg.setCfg(cfg);
      
      
              // 配置模板
              TemplateConfig templateConfig = new TemplateConfig();
      
              // 配置自定義輸出模板
              //指定自定義模板路徑,注意不要帶上.ftl/.vm, 會根據使用的模板引擎自動識別
              // templateConfig.setEntity("templates/entity2.java");
              // templateConfig.setService();
              // templateConfig.setController();
              templateConfig.setXml(null);
              mpg.setTemplate(templateConfig);
      
      
              //配置策略
              StrategyConfig strategy = new StrategyConfig();
              strategy.setNaming(NamingStrategy.underline_to_camel);
              strategy.setColumnNaming(NamingStrategy.underline_to_camel);
              //strategy.setSuperControllerClass("com.example.demo.model.BaseEntity");
              strategy.setEntityLombokModel(false);//默認是false
              //strategy.setRestControllerStyle(true);
              //公共父類
              //strategy.setSuperControllerClass("com.example.demo.controller.BaseController");
              // 寫於父類中的公共字段
              //strategy.setSuperEntityColumns("id");
              strategy.setInclude("tb_forum_replay"); // 僅生成單個表
              strategy.setControllerMappingHyphenStyle(true);
              strategy.setTablePrefix("tb_");
              mpg.setStrategy(strategy);
              mpg.setTemplateEngine(new FreemarkerTemplateEngine());
              mpg.execute();
              System.out.println(" --------------------------自動生成完畢------------------------");
          }
      }

       

  3. 實際開發
    1. @Api(tags = "論壇主頁")
      @RestController
      @RequestMapping("/admin/forum/")
      @Validated
      public class AdminForumController {
      
      }
      
      
      @Service
      public class ForumServiceImpl extends ServiceImpl<ForumMapper, Forum> implements ForumService {
      
      
      }
      
      
      @Mapper
      public interface ForumMapper extends BaseMapper<Forum> {
      
      
      }
      
      @Data
      @TableName("tb_forum")
      public class Forum implements Serializable {
      
      
      }

       

 

實際開發使用

 

Select

第一種 selectCount

QueryWrapper qw = new QueryWrapper();
qw.eq("user_id",userId);
qw.eq("readed",0);
baseMapper.selectCount(qw);

等同於springboot

select count(*) from tb where use_id = #{userId} and readed =0 mybatis

第二種selectOne

QueryWrapper qw = new QueryWrapper();
qw.eq("user_id",userId);
qw.eq("readed",0);
qw.last("limit 1");
baseMapper.selectOne(qw);

等同於app

select count(*) from tb where use_id = #{userId} and readed =0 limit 1ide

update

第一種  set

UpdateWrapper uw = new UpdateWrapper();
uw.eq("user_id",userId);
uw.eq("id",id);
Forum f = new Forum();
f.setDeleted(1);
return forumMapper.update(f,uw) > 0;

等同於工具

update forum set delete =1 where user_id = #{userId} and id = #{id}優化

第二種  insql

UpdateWrapper uw = new UpdateWrapper();
String[] idsStr =new String["1","2","3"];
String id =  StringUtils.strip(idsStr.toString(),"[]");
uw.inSql("id",id);
Forum f = new Forum();
f.setDeleted(1);
return forumMapper.update(f,uw) > 0;

等同於

update forum set deleted = 1 where id in ( 1 , 2 ,3)

 

太太太哪裏, 具體仍是看官方文檔吧

條件構造器

各類sql語義,讓你用mybatisPlus 溜的飛起 

allEq

eq

ne

...

最最最主要的仍是

MybatisX 快速開發插件

  • Java 與 XML 調回跳轉
  • Mapper 方法自動生成 XML

relationship

相關文章
相關標籤/搜索