mybatis-plus apply拼接sql
时间: 2023-04-27 15:01:37 浏览: 1183
Mybatis-Plus的apply方法可以用于拼接SQL语句。它可以将一段SQL语句作为参数传入,然后将其拼接到主SQL语句中。使用apply方法可以方便地实现复杂的SQL查询,例如多表关联查询、子查询等。在使用apply方法时,需要注意SQL注入的问题,应该使用参数化查询来避免注入攻击。
相关问题
mybatis-plus 动态拼接sql
### MyBatis-Plus 中动态构建 SQL 查询
在 Spring Boot 项目中整合 MyBatis-Plus 后,可以通过多种方式实现 SQL 语句的动态拼接。MyBatis-Plus 支持通过 `Wrapper` 类及其子类来动态构建查询条件,这些类提供了丰富的 API 方法用于创建灵活多变的 SQL 语句。
#### 使用 QueryWrapper 实现基本的动态查询
对于简单的实体属性匹配场景,可以直接利用 `QueryWrapper` 进行条件组装:
```java
// 创建一个 User 对象作为查询条件载体
User userCond = new User();
userCond.setName("张三");
// 初始化 QueryWrapper 并传入 entity 参数
QueryWrapper<User> queryWrapper = new QueryWrapper<>(userCond);
// 添加额外的查询条件
queryWrapper.eq("age", 20).gt("score", 85);
```
上述代码会生成类似于 `"SELECT * FROM user WHERE name='张三' AND age=20 AND score > 85"` 的 SQL 语句[^4]。
#### 利用 Lambda 表达式简化字段访问
为了防止硬编码列名带来的风险并提升开发体验,推荐采用带有泛型支持的 `LambdaQueryWrapper`:
```java
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.like(User::getName, "李").lt(User::getAge, 30);
```
这段逻辑最终会被转换成类似 `"SELECT * FROM user WHERE name LIKE '%李%' AND age < 30"` 的表达形式。
#### 复杂条件下组合多个 Wrapper 实例
当面对更为复杂的业务需求时,比如需要同时满足若干组独立又相互关联的过滤规则,则可通过嵌套的方式将不同类型的 `Wrapper` 组合起来使用:
```java
List<Integer> ids = Arrays.asList(1, 2, 3);
QueryWrapper<User> wrapper = Wrappers.<User>query()
.inSql("id", String.join(",", ids))
.and(i -> i.ge("create_time", startDate)
.or().le("update_time", endDate));
```
这里展示了如何在一个查询里混合运用时间范围和其他特定 ID 集合来进行筛选。
#### 动态控制 SQL 片段可见性
除了常规的等于、大于小于比较外,有时还需要根据实际情况决定某些部分是否加入到最终执行的 SQL 文本之中。此时可借助于 `apply()` 函数配合 Java 内联函数特性完成此目的:
```java
String customCondition = "status IN ('active', 'pending')";
QueryWrapper<User> dynamicWrapper = new QueryWrapper<>();
dynamicWrapper.apply(StringUtils.isNotBlank(customCondition), customCondition);
```
如果变量 `customCondition` 不为空字符串的话,那么这部分就会被追加至整体查询串内;反之则忽略不计。
mybatis-plus apply集合使用
Mybatis-Plus中的apply方法是用于拼接SQL语句的方法,可以将自定义的SQL语句拼接到Mybatis-Plus生成的SQL语句中,从而实现更加灵活的查询。
apply方法的使用方式如下:
1. 在Mapper接口中定义方法,方法名任意,返回值为QueryWrapper对象。
2. 在方法中调用QueryWrapper对象的apply方法,传入自定义的SQL语句。
3. 在自定义的SQL语句中使用#{参数名}的方式引用方法参数。
例如:
```
@Select("select * from user ${ew.customSqlSegment}")
QueryWrapper<User> selectByCustomSqlSegment(@Param(Constants.WRAPPER) QueryWrapper<User> wrapper, @Param("age") Integer age) {
return wrapper.apply("and age > #{age}");
}
```
在上面的例子中,我们定义了一个selectByCustomSqlSegment方法,使用了@Select注解,指定了自定义的SQL语句。在SQL语句中,我们使用了${ew.customSqlSegment}引用了Mybatis-Plus生成的SQL语句,使用了#{age}引用了方法参数。
在调用该方法时,我们可以传入一个QueryWrapper对象和一个age参数,QueryWrapper对象会自动拼接Mybatis-Plus生成的SQL语句和自定义的SQL语句,从而实现更加灵活的查询。
阅读全文
相关推荐












