MyBatis-Plus的学习笔记

一:MyBatis-Plus的简介

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

二:MyBatis-Plus特性

Mybatis-Plus的特性

三:MyBatis-Plus的常用方法以及参数

selectList
insert
updateById
deleteById
 QueryWrapper<T> myMenuQueryWrapper = new QueryWrapper<>();
上面加各种参数 

MyBatis-Plus条件参数

查询方式说明
whereWHERE 语句,拼接 + WHERE 条件
andAND 语句,拼接 + AND 字段=值
orOR 语句,拼接 + OR 字段=值 !!!主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接)
eq等于=
allEq基于 map 内容等于=
ne不等于<>
gt大于>
ge大于等于>=
lt小于<
le小于等于<=
like模糊查询 LIKE
likeLeftLIKE ‘%值’
likeRightLIKE ‘值%’
notLike模糊查询 NOT LIKE
inIN (v0, v1, …)
notInNOT IN (v0, v1, …)
inSqlIN ( sql语句 )
notInSql字段 NOT IN ( sql语句 )
isNullNULL 值查询
isNotNullIS NOT NULL
groupByGROUP BY 字段, …
havingHAVING ( sql语句 )
orderByORDER BY 字段, …
orderByAscORDER BY 字段, … ASC
orderByDescORDER BY 字段, … DESC
existsEXISTS 条件语句
notExistsNOT EXISTS 条件语句
betweenBETWEEN 条件语句
notBetweenNOT BETWEEN 条件语句
addFilter自由拼接 SQL
last无视优化规则直接拼接到 sql 的最后 !!!只能调用一次,多次调用以最后一次为准 有sql注入的风险,请谨慎使用
apply拼接SQL

四:Mybatisplus的简单使用

  • 引入Maven
  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>

        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- Mybatis-Plus启动器 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>


        <!--添加 代码生成器 依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.1.1</version>
        </dependency>
        <!--模板引擎 freemarker-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>
    </dependencies>
  • Mapper层继承 extends BaseMapper
  • 实体类 加上相对应的注解

@TableName 表名注解

@TableId 主键注解

@TableFiled 字段注解 (当实体类属性和数据库字段不一致的时候使用该注解)

官方文档全部注解

package com.sx;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.sx.mybatisplus.entity.MyMenu;
import com.sx.mybatisplus.entity.Student;
import com.sx.mybatisplus.mapper.IMenuMapper;
import com.sx.mybatisplus.mapper.IStudentMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class MybatisplusApplicationTests {
@Autowired
private IMenuMapper iMenuMapper;
    @Autowired
    private IStudentMapper iStudentMapper;
    /****
     * 查询所有
     */
    @Test
   public void GetAllMenu() {
        List<MyMenu> menuList=iMenuMapper.selectList(null);
        System.out.println(menuList);
    }

    /****
     * 添加数据
     */
    @Test
    public void InsertStudent() {
        Student s=new Student();
        s.setSage("0");
      //  s.setSid(2);
        s.setSname("33");
        iStudentMapper.insert(s);
    }

    /***
     * 修改学生的数据
     */
    @Test
    public void UpdateStudent() {
        Student s=new Student();
        s.setSage("0");
        s.setSid(2);
        s.setSname("33");
        iStudentMapper.updateById(s);
    }

    /****
     * 删除学生数据
     */
    @Test
    public void DeleteStudent() {
        iStudentMapper.deleteById(1);
    }

    /****
     * 条件查询
     */
    @Test
    public void selectByIndex() {
        QueryWrapper<MyMenu> myMenuQueryWrapper = new QueryWrapper<>();
        //创建条件
         myMenuQueryWrapper.eq("menu_name","工作空间");
        List<MyMenu> menuList = iMenuMapper.selectList(myMenuQueryWrapper);
        System.out.println(menuList);
    }



    /****
     * 条件查询+ -------
     */
    @Test
    public void selectByEg() {
        QueryWrapper<MyMenu> myMenuQueryWrapper = new QueryWrapper<>();
        //创建条件
       myMenuQueryWrapper.eq("sort",3);  //等于
       myMenuQueryWrapper.orderByDesc("menu_id"); //排序根据字段
       myMenuQueryWrapper.likeLeft("menu_name","理");   //%值
     //  myMenuQueryWrapper.likeRight("menu_name","管");   //值%

       List<MyMenu> menuList = iMenuMapper.selectList(myMenuQueryWrapper);
        System.out.println(menuList);
    }
}


五:MybatisPlus的逆向工程

package com.sx;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
* @author ShanXiao
* @version 1.0
* @date 2021/4/21 18:24
*/
public class CodeGenerator {

   /**
    * 读取控制台内容
    */
   public static String scanner(String tip) {
       Scanner scanner = new Scanner(System.in);
       StringBuilder help = new StringBuilder();
       help.append("请输入" + tip + ":");
       System.out.println(help.toString());
       if (scanner.hasNext()) {
           String ipt = scanner.next();
           if (StringUtils.isNotEmpty(ipt)) {
               return ipt;
           }
       }
       throw new MybatisPlusException("请输入正确的" + tip + "!");
   }

   public static void main(String[] args) {
       /**
        * 代码生成器
        */
       AutoGenerator mpg = new AutoGenerator();

       /**
        * 全局配置
        */
       GlobalConfig globalConfig = new GlobalConfig();
       //生成文件的输出目录
       String projectPath = System.getProperty("user.dir");
       globalConfig.setOutputDir(projectPath + "/src/main/java");
       //Author设置作者
       globalConfig.setAuthor("ShanXiao");
       //是否覆盖文件
       globalConfig.setFileOverride(true);
       //生成后打开文件
       globalConfig.setOpen(false);
       mpg.setGlobalConfig(globalConfig);

       /**
        * 数据源配置
        */
       DataSourceConfig dataSourceConfig = new DataSourceConfig();
       // 数据库类型,默认MYSQL
       dataSourceConfig.setDbType(DbType.MYSQL);
       //自定义数据类型转换
       dataSourceConfig.setTypeConvert(new MySqlTypeConvert());
       dataSourceConfig.setUrl("自己的mysql地址");
       dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
       dataSourceConfig.setUsername("账号");
       dataSourceConfig.setPassword("密码");
       mpg.setDataSource(dataSourceConfig);

       /**
        * 包配置
        */
       PackageConfig pc = new PackageConfig();
       pc.setModuleName(scanner("模块名"));
       //父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名
       pc.setParent("com.sx.mybatisplus");
       mpg.setPackageInfo(pc);


       /**
        * 自定义配置
        */
       InjectionConfig cfg = new InjectionConfig() {
           @Override
           public void initMap() {
               // to do nothing
           }
       };

       /**
        * 模板
        */
       //如果模板引擎是 freemarker
       String templatePath = "/templates/mapper.xml.ftl";
       // 如果模板引擎是 velocity
       // String templatePath = "/templates/mapper.xml.vm";


       /**
        * 自定义输出配置
        */
       List<FileOutConfig> focList = new ArrayList<>();
       // 自定义配置会被优先输出
       focList.add(new FileOutConfig(templatePath) {
           @Override
           public String outputFile(TableInfo tableInfo) {
               // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
               return projectPath + "/src/main/resources/mapper/"+ pc.getModuleName()
                       + "/" + 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.setInclude(scanner("表名,多个英文逗号分割").split(","));
       //实体是否为lombok模型(默认 false)
       strategy.setEntityLombokModel(true);
       //生成 @RestController 控制器
       strategy.setRestControllerStyle(true);
       //设置自定义继承的Entity类全称,带包名
       //strategy.setSuperEntityClass("com.jiangfeixiang.mpdemo.BaseEntity");
       //设置自定义继承的Controller类全称,带包名
       //strategy.setSuperControllerClass("com.jiangfeixiang.mpdemo.BaseController");
       //设置自定义基础的Entity类,公共字段
       strategy.setSuperEntityColumns("id");
       //驼峰转连字符
       strategy.setControllerMappingHyphenStyle(true);
       //表名前缀
       strategy.setTablePrefix(pc.getModuleName() + "_");
       mpg.setStrategy(strategy);
       mpg.setTemplateEngine(new FreemarkerTemplateEngine());
       mpg.execute();
   }
}


end

评论