SpringBoot--条件构造器-wrapper

条件构造器-wrapper

5.1wrapper介绍

image-20201009214327924

Wrapper : 条件构造抽象类,最顶端父类

AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件

QueryWrapper : Entity 对象封装操作类,不是用lambda语法

UpdateWrapper : Update 条件封装,用于Entity对象更新操作

AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。

LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper

LambdaUpdateWrapper : Lambda 更新封装Wrapper

5.2AbstractWrapper

注意:以下条件构造器的方法入参中的 column 均表示数据库字段
1、ge、gt、le、lt、isNull、isNotNull

@Test
public void testDelete() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper
.isNull("name")
.ge("age", 12)
.isNotNull("email");
int result = userMapper.delete(queryWrapper);
System.out.println("delete return count = " + result);
}
# SQL:UPDATE user SET deleted=1 WHERE deleted=0 AND name IS NULL AND age >= ? AND email IS NOT NULL

2、eq、ne
注意:seletOne返回的是一条实体记录,当出现多条时会报错

@Test
public void testSelectOne() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "Tom");
User user = userMapper.selectOne(queryWrapper);
System.out.println(user);
}
# SELECT id,name,age,email,create_time,update_time,deleted,version FROM user WHERE deleted=0 AND name = ? 

3、between、notBetween
包含大小边界

@Test
public void testSelectCount() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between("age", 20, 30);
Integer count = userMapper.selectCount(queryWrapper);
System.out.println(count);
}
# SELECT COUNT(1) FROM user WHERE deleted=0 AND age BETWEEN ? AND ? 

4、allEq

@Test
public void testSelectList() {
	QueryWrapper<User> queryWrapper = new QueryWrapper<>();
	Map<String, Object> map = new HashMap<>();
	map.put("id", 2);
	map.put("name", "Jack");
	map.put("age", 20);
	queryWrapper.allEq(map);
	List<User> users = userMapper.selectList(queryWrapper);
	users.forEach(System.out::println);
}
SELECT id,name,age,email,create_time,update_time,deleted,version 
FROM user WHERE deleted=0 AND name = ? AND id = ? AND age = ?

5、like、notLike、likeLeft、likeRight
selectMaps返回Map集合列表

@Test
public void testSelectMaps() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper
.notLike("name", "e")
.likeRight("email", "t");
	List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);//返回值是Map列表
	maps.forEach(System.out::println);
}
SELECT id,name,age,email,create_time,update_time,deleted,version 
FROM user WHERE deleted=0 AND name NOT LIKE ? AND email LIKE ? 

6、in、notIn、inSql、notinSql、exists、notExists
in、notIn:
notIn(“age”,{1,2,3})—>age not in (1,2,3)
notIn(“age”, 1, 2, 3)—>age not in (1,2,3)
inSql、notinSql:可以实现子查询
例: inSql(“age”, “1,2,3,4,5,6”)—>age in (1,2,3,4,5,6)
例: inSql(“id”, “select id from table where id < 3”)—>id in (select id from table where id < 3)

@Test
public void testSelectObjs() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//queryWrapper.in("id", 1, 2, 3);
queryWrapper.inSql("id", "select id from user where id < 3");
List<Object> objects = userMapper.selectObjs(queryWrapper);//返回值是Object列表
objects.forEach(System.out::println);

}
SELECT id,name,age,email,create_time,update_time,deleted,version 
FROM user WHERE deleted=0 AND id IN (select id from user where id < 3) 

7、or、and
注意:这里使用的是 UpdateWrapper
不调用or则默认为使用 and 连

@Test
public void testUpdate1() {
//修改值
User user = new User();
user.setAge(99);
user.setName("Andy");
//修改条件
UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
userUpdateWrapper
.like("name", "h")
.or()
.between("age", 20, 30);

int result = userMapper.update(user, userUpdateWrapper);

System.out.println(result);
}
UPDATE user SET name=?, age=?, update_time=? WHERE deleted=0 AND name LIKE ? OR age BETWEEN ? AND ?

8、嵌套or、嵌套and
这里使用了lambda表达式,or中的表达式最后翻译成sql时会被加上圆括号

@Test
public void testUpdate2() {

//修改值
User user = new User();
user.setAge(99);
user.setName("Andy");
//修改条件
UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
userUpdateWrapper
.like("name", "h")
.or(i -> i.eq("name", "李白").ne("age", 20));
int result = userMapper.update(user, userUpdateWrapper);
System.out.println(result);

}

UPDATE user SET name=?, age=?, update_time=? 
WHERE deleted=0 AND name LIKE ? 
OR ( name = ? AND age <> ? ) 

9、orderBy、orderByDesc、orderByAsc

@Test
public void testSelectListOrderBy() {
	QueryWrapper<User> queryWrapper = new QueryWrapper<>();
	queryWrapper.orderByDesc("id");
	List<User> users = userMapper.selectList(queryWrapper);
	users.forEach(System.out::println);
}
SELECT id,name,age,email,create_time,update_time,deleted,version 
FROM user WHERE deleted=0 ORDER BY id DESC 
10、last
直接拼接到 sql 的最后
注意:只能调用一次,多次调用以最后一次为准 有sql注入的风险,请谨慎使用

~~~shell
@Test
public void testSelectListLast() {
	QueryWrapper<User> queryWrapper = new QueryWrapper<>();
	queryWrapper.last("limit 1");
	List<User> users = userMapper.selectList(queryWrapper);
	users.forEach(System.out::println);
}

SELECT id,name,age,email,create_time,update_time,deleted,version 
FROM user WHERE deleted=0 limit 1 

11、指定要查询的列

@Test
public void testSelectListColumn() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("id", "name", "age");

List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);

}
SELECT id,name,age FROM user WHERE deleted=0 

12、set、setSql
最终的sql会合并 user.setAge(),以及 userUpdateWrapper.set() 和 setSql() 中 的字段

@Test
public void testUpdateSet() {
//修改值
User user = new User();
user.setAge(99);
//修改条件
UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
userUpdateWrapper
.like("name", "h")
.set("name", "老李头")//除了可以查询还可以使用set设置修改的字段
.setSql(" email = '123@qq.com'");//可以有子查询
int result = userMapper.update(user, userUpdateWrapper);

}
UPDATE user SET age=?, update_time=?, name=?, email = '123@qq.com' WHERE deleted=0 AND name LIKE ? 

//代码生成器  package com.glls.mybatisplus;​import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.generator.config.DataSourceConfig;import com.baomidou.mybatisplus.generator.config.GlobalConfig;import com.baomidou.mybatisplus.generator.config.PackageConfig;import com.baomidou.mybatisplus.generator.config.StrategyConfig;import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;​public class GenerateTest {    public static void main(String[] args) {        //创建generator对象        AutoGenerator autoGenerator = new AutoGenerator();        //数据源        DataSourceConfig dataSourceConfig = new DataSourceConfig();        dataSourceConfig.setDbType(DbType.MYSQL);        dataSourceConfig.setDriverName(“com.mysql.cj.jdbc.Driver”);        dataSourceConfig.setUsername(“root”);        dataSourceConfig.setPassword(“123456”);        dataSourceConfig.setUrl(“jdbc:mysql://localhost:3306/mytest?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true”);        autoGenerator.setDataSource(dataSourceConfig);        //全局配置        GlobalConfig globalConfig = new GlobalConfig();        globalConfig.setOutputDir(System.getProperty(“user.dir”)+“/src/main/java”);        globalConfig.setAuthor(“admin”);        globalConfig.setOpen(false);        globalConfig.setServiceName(“%sService”);        autoGenerator.setGlobalConfig(globalConfig);        //包信息        PackageConfig packageConfig = new PackageConfig();        packageConfig.setParent(“com.glls”);        packageConfig.setEntity(“entity”);        packageConfig.setMapper(“mapper”);        packageConfig.setService(“service”);        packageConfig.setServiceImpl(“service.impl”);        packageConfig.setController(“controller”);        autoGenerator.setPackageInfo(packageConfig);        //策略配置        StrategyConfig strategyConfig = new StrategyConfig();        strategyConfig.setInclude(“fruit”);        strategyConfig.setNaming(NamingStrategy.underline_to_camel);        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);        strategyConfig.setEntityLombokModel(true);        autoGenerator.setStrategy(strategyConfig);        //运行        autoGenerator.execute();   }}



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot中使用MyBatis-Plus进行条件查询非常简单。以下是一些示例代码,演示了如何使用MyBatis-Plus进行条件查询: 1. 首先,确保在pom.xml文件中添加了MyBatis-Plus的依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本</version> </dependency> ``` 2. 创建一个实体类,表示数据库表中的一条记录。使用`@TableName`注解指定数据库表名,使用`@TableField`注解指定字段映射关系。 ```java import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableField; @TableName("user") public class User { private Long id; @TableField("username") private String username; @TableField("age") private Integer age; // 省略getter和setter方法 } ``` 3. 创建一个Mapper接口,继承自`BaseMapper`接口,并且使用`@Mapper`注解标记为MyBatis的Mapper。 ```java import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserMapper extends BaseMapper<User> { } ``` 4. 在Service层中注入UserMapper,并且使用MyBatis-Plus提供的查询构造器进行条件查询。 ```java import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserMapper userMapper; public List<User> findUsersByAgeRange(int minAge, int maxAge) { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.between("age", minAge, maxAge); return userMapper.selectList(queryWrapper); } } ``` 在上述示例中,`QueryWrapper`是MyBatis-Plus提供的查询构造器,可以使用它来构建查询条件。`between`方法用于指定age字段在minAge和maxAge之间的范围。 这只是一个简单的示例,你可以根据自己的需求使用更多的查询条件和操作符。MyBatis-Plus还提供了许多其他功能,如分页查询和动态条件查询等。你可以查阅MyBatis-Plus官方文档来了解更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值