一:MyBatis-Plus的简介
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
二:MyBatis-Plus特性
三:MyBatis-Plus的常用方法以及参数
selectList
insert
updateById
deleteById
QueryWrapper<T> myMenuQueryWrapper = new QueryWrapper<>();
上面加各种参数
MyBatis-Plus条件参数
查询方式 | 说明 |
---|---|
where | WHERE 语句,拼接 + WHERE 条件 |
and | AND 语句,拼接 + AND 字段=值 |
or | OR 语句,拼接 + OR 字段=值 !!!主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接) |
eq | 等于= |
allEq | 基于 map 内容等于= |
ne | 不等于<> |
gt | 大于> |
ge | 大于等于>= |
lt | 小于< |
le | 小于等于<= |
like | 模糊查询 LIKE |
likeLeft | LIKE ‘%值’ |
likeRight | LIKE ‘值%’ |
notLike | 模糊查询 NOT LIKE |
in | IN (v0, v1, …) |
notIn | NOT IN (v0, v1, …) |
inSql | IN ( sql语句 ) |
notInSql | 字段 NOT IN ( sql语句 ) |
isNull | NULL 值查询 |
isNotNull | IS NOT NULL |
groupBy | GROUP BY 字段, … |
having | HAVING ( sql语句 ) |
orderBy | ORDER BY 字段, … |
orderByAsc | ORDER BY 字段, … ASC |
orderByDesc | ORDER BY 字段, … DESC |
exists | EXISTS 条件语句 |
notExists | NOT EXISTS 条件语句 |
between | BETWEEN 条件语句 |
notBetween | NOT 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();
}
}
评论