Mybatis-Plus--条件构造器与代码生成器
1 条件构造器
通过条件构造器可以更加轻松的完成条件查询与更新(底层就是动态SQL)
1.1 > < =
- ge 小于 <
- 例:
lt("age", 18)
—>age < 18
- gt 大于 >
- 例:
gt("age", 18)
—>age > 18
- eq 等于 =
- 例:
eq("name", "老王")
—>name = '老王'
@Test
public void test1(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//查询年龄大于24岁用户,姓名为tom
queryWrapper
.ge("age",24)
.eq("name","tom");
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
1.2 in notin
in
in(R column, Collection<?> value) in(boolean condition, R column, Collection<?> value)
- 字段 IN (value.get(0), value.get(1), …)
- 例:
in("age",{1,2,3})
—>age in (1,2,3)
in(R column, Object... values) in(boolean condition, R column, Object... values)
- 字段 IN (v0, v1, …)
- 例:
in("age", 1, 2, 3)
—>age in (1,2,3)
notIn
otIn(R column, Collection<?> value) notIn(boolean condition, R column, Collection<?> value)
- 字段 NOT IN (value.get(0), value.get(1), …)
- 例:
notIn("age",{1,2,3})
—>age not in (1,2,3)
notIn(R column, Object... values) notIn(boolean condition, R column, Object... values)
- 字段 NOT IN (v0, v1, …)
- 例:
notIn("age", 1, 2, 3)
—>age not in (1,2,3)
@Test
public void test2(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//查询id为1,3,5
queryWrapper.in("id",1,3,5);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
1.3 between…
between
between(R column, Object val1, Object val2) between(boolean condition, R column, Object val1, Object val2)
- BETWEEN 值1 AND 值2
- 例:
between("age", 18, 30)
—>age between 18 and 30
notBetween
notBetween(R column, Object val1, Object val2) notBetween(boolean condition, R column, Object val1, Object val2)
- NOT BETWEEN 值1 AND 值2
- 例:
notBetween("age", 18, 30)
—>age not between 18 and 30
@Test
public void test3(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//查询年龄在20~28之间
queryWrapper.between("age",20,28);
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
1.4 orderBy…
orderByAsc
orderByAsc(R... columns) orderByAsc(boolean condition, R... columns)
- 排序:ORDER BY 字段, … ASC
- 例:
orderByAsc("id", "name")
—>order by id ASC,name ASC
orderByDesc
orderByDesc(R... columns) orderByDesc(boolean condition, R... columns)
- 排序:ORDER BY 字段, … DESC
- 例:
orderByDesc("id", "name")
—>order by id DESC,name DESC
orderBy
orderBy(boolean condition, boolean isAsc, R... columns)
- 排序:ORDER BY 字段, …
- 例:
orderBy(true, true, "id", "name")
—>order by id ASC,name ASC
@Test
public void test4(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//查询按照年龄降序,如果年龄相等按照姓名降序
queryWrapper.orderByDesc("age","name");
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
@Test
public void test5(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//查询姓名中包含%S%
//queryWrapper.like("name","s");
//查询姓名中包含%S
//queryWrapper.likeLeft("name","s");
//查询姓名中包含S%
queryWrapper.likeRight("name","s");
List<User> userList = userMapper.selectList(queryWrapper);
userList.forEach(System.out::println);
}
1.5 like…
like
like(R column, Object val) like(boolean condition, R column, Object val)
- LIKE ‘%值%’
- 例:
like("name", "王")
—>name like '%王%'
notLike
notLike(R column, Object val) notLike(boolean condition, R column, Object val)
- NOT LIKE ‘%值%’
- 例:
notLike("name", "王")
—>name not like '%王%'
likeLeft
likeLeft(R column, Object val) likeLeft(boolean condition, R column, Object val)
- LIKE ‘%值’
- 例:
likeLeft("name", "王")
—>name like '%王'
likeRight
likeRight(R column, Object val) likeRight(boolean condition, R column, Object val)
- LIKE ‘值%’
- 例:
likeRight("name", "王")
—>name like '王%'
notLikeLeft
notLikeLeft(R column, Object val) notLikeLeft(boolean condition, R column, Object val)
- NOT LIKE ‘%值’
- 例:
notLikeLeft("name", "王")
—>name not like '%王'
notLikeRight
notLikeRight(R column, Object val) notLikeRight(boolean condition, R column, Object val)
- NOT LIKE ‘值%’
- 例:
notLikeRight("name", "王")
—>name not like '王%'
isNull
isNull(R column) isNull(boolean condition, R column)
- 字段 IS NULL
- 例:
isNull("name")
—>name is null
isNotNull
isNotNull(R column) isNotNull(boolean condition, R column)
- 字段 IS NOT NULL
- 例:
isNotNull("name")
—>name is not null
@Test
public void test6(){
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
//修改姓名中不包含s的用户
updateWrapper.notLike("name","s");
User user = new User();
user.setName("尼古拉斯");
userMapper.update(user,updateWrapper);
}
2 代码生成器
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
2.1 引入依赖
- 代码生成器依赖
- 模板引擎 依赖
- 日志依赖
<!-- 代码生成器依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<!-- 模板引擎 依赖 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<!-- 日志依赖 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
2.2 生成器代码
- 代码生成器相关诶之
- 数据源配置
- 包配置
- 策略配置
- 其他配置
public class CodeGenerator {
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
//获取当前路径
String projectPath = System.getProperty("user.dir");
//设置生成代码位置
gc.setOutputDir(projectPath + "/src/main/java");
//设置代码文件头作者
gc.setAuthor("ying");
//设置是否在资源管理器打开
gc.setOpen(false);
//设置生成代码是否覆盖
gc.setFileOverride(true);
//设置去除生成代码接口中的I
gc.setServiceName("%sService");
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql:///java11");
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
//设置模块名称
//pc.setModuleName("shopping");
pc.setParent("com.ying");
pc.setEntity("pojo");
pc.setMapper("mapper");
pc.setService("service");
pc.setController("controller");
mpg.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
//表名 下划线转驼峰
strategy.setNaming(NamingStrategy.underline_to_camel);
//字段名 下划线转驼峰
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//实体类是否使用lombok
strategy.setEntityLombokModel(true);
//Controller是否使用RESTful风格(RestController)
strategy.setRestControllerStyle(true);
//设置逻辑删除字段(数据库中需要有deleted字段)
strategy.setLogicDeleteFieldName("deleted");
//设置乐观锁注解(数据库中需要有version字段)
strategy.setVersionFieldName("version");
//设置生成的表名
strategy.setInclude("user");
mpg.setStrategy(strategy);
mpg.execute();
}
}