基础开发之Mybatis Plus基础使用

懵懂的女人 提交于 2020-03-25 12:25:23

3 月,跳不动了?>>>

Mybatis-Plus 是一款 Mybatis 动态 SQL 自动注入 Mybatis 增删改查 CRUD 操作中间件, 减少你的开发周期优化动态维护 XML 实体字段,无入侵全方位 ORM 辅助层让您拥有更多时间陪家人。

以下内容 以Mybatis-Plus 3.0.1版本 为蓝本;

详情见官方文档:

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

 

 

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

等同于

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

第二种selectOne

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

等同于

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

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

 

 

 

 

 

 

 

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!