mybatis-Plus 之 apply 怎么拼接in 函数
时间: 2024-04-19 15:26:33 浏览: 184
在 MyBatis-Plus 中,可以使用 `apply` 方法来拼接 `in` 函数。
假设你有一个实体类 `User`,其中有一个属性 `ids`,你想要将一组 ID 拼接到 `in` 函数中,可以按照以下步骤进行操作:
1. 导入相关的类和方法:
```java
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
```
2. 在对应的 Mapper 接口中添加一个方法,使用 `@Select` 注解执行 SQL 查询:
```java
@Select("SELECT * FROM user WHERE id IN ${ids}")
List<User> selectUsersByIds(@Param("ids") String ids);
```
3. 在需要使用 `apply` 方法的地方,调用上述方法,并传入拼接好的 ID 字符串:
```java
String ids = "1,2,3,4,5";
List<User> users = userMapper.selectUsersByIds("(${ids})");
```
这里需要注意的是,在 SQL 语句中,我们使用 `${ids}` 来引用传入的 ID 字符串,同时外部拼接的字符串需要用括号包裹 `(1,2,3,4,5)`。
这样就可以使用 `apply` 方法拼接 `in` 函数了。希望能帮到你!如有疑问,请随时追问。
相关问题
mybatis-plus使用find_in_set
Mybatis-plus使用find_in_set函数可以实现对字段中包含指定值的查询。在使用lambda表达式拼接SQL时,可以通过apply方法来使用find_in_set函数。具体的代码示例如下:
```java
List<String> realIds = crmProgrammeService.getIdsByRealEstateNames(name);
if (!CollectionUtils.isEmpty(realIds)){
if (realIds.size() == 1){
queryWrapper.like("real_estate_ids", realIds.get(0));
} else {
for (int i = 0; i < realIds.size(); i++) {
if (i == 0) {
queryWrapper.apply(null != realIds.get(i), "(find_in_set({0},real_estate_ids)", realIds.get(i));
} else {
if (i == realIds.size() - 1) {
queryWrapper.or().apply(null != realIds.get(i), "find_in_set({0},real_estate_ids))", realIds.get(i));
} else {
queryWrapper.or().apply(null != realIds.get(i), "find_in_set({0},real_estate_ids)", realIds.get(i));
}
}
}
}
} else {
queryWrapper.isNull("real_estate_ids");
}
```
以上代码中,通过apply方法传入find_in_set函数的参数,实现了对real_estate_ids字段进行查询。具体的SQL语句如下:
```sql
SELECT * FROM `crm_programme` where find_in_set(1,real_estate_ids) or find_in_set(3,real_estate_ids);
```
这条SQL语句会查询crm_programme表中real_estate_ids字段包含1或3的记录。\[1\]\[2\]
#### 引用[.reference_title]
- *1* *2* [记录 mybatis plus QuerWapper使用 FIND_IN_SET](https://blog.csdn.net/qq_34410726/article/details/126561485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [mybatis-plus中使用FIND_IN_SET函数](https://blog.csdn.net/qq_41289165/article/details/116115674)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
MyBatis-Plus使用HOUR函数
MyBatis-Plus提供了对SQL函数的支持,可以使用QueryWrapper或LambdaQueryWrapper中的函数方法来构造SQL语句。
要使用HOUR函数,可以使用LambdaQueryWrapper的方法:
```
LambdaQueryWrapper<Entity> wrapper = new LambdaQueryWrapper<>();
wrapper.apply("HOUR(create_time) = {0}", hour);
```
其中,apply方法可以传入一个SQL语句片段,{0}表示占位符,可以在后面的参数中传入具体的值。在这个例子中,我们使用HOUR函数来获取create_time字段的小时数,然后与hour进行比较。
注意,使用apply方法需要谨慎,因为它可以直接传入SQL语句,存在SQL注入的风险。在构造SQL语句时,最好使用MyBatis-Plus提供的API,如eq、in、like等方法。
阅读全文