java 使用BaseMapper 查询的表明后面自动拼接了一个null是怎么回事
时间: 2023-05-22 21:07:29 浏览: 59
首先,BaseMapper 是 MyBatis 框架中的一个基础接口,用来提供通用的 CRUD(增删改查)功能。查询操作时,我们通常使用 selectByExample 方法,其中的 Example 对象封装了查询条件。
在 BaseMapper 中,查询方法的实现是通过生成一条 SQL 语句,再执行该语句来实现的。在 selectByExample 方法中,生成 SQL 语句的方式是使用 Example 对象的 createCriteria 方法创建一个 Criteria 对象,并通过 Criteria 对象的拼接方式生成 SQL 语句。
默认情况下,在 Criteria 对象拼接 SQL 语句时,如果查询条件值为 null,则直接忽略该条件,不拼接在 SQL 语句中。但是,如果查询条件的值为包装类型的 null(如 Integer 类型的 null),则在拼接 SQL 语句时会自动拼接为 IS NULL。
因此,如果使用 BaseMapper 查询的表明后面自动拼接了一个 null,很可能是因为查询条件中该字段的值为包装类型的 null,而不是值为 null。建议检查一下查询条件中的字段值是否正确,或者考虑将包装类型的变量转换为基本类型来进行查询。
相关问题
java 使用BaseMapper 查询的表名后面自动拼接了一个null是怎么回事,即我查询log表会变成log_null这样
造成表名后面自动拼接了 null 的原因可能是在 BaseMapper 接口中的某个方法中,对表名的拼接使用了类似如下的代码:
tableName = tableName + null;
这里的 null 并不是空字符串,而是一个真正的 null 对象。如果 tableName 本身为 null,那么这个拼接后的结果就是 "null" 的字符串,例如查询 log 表时,由于字符串拼接时连接了一个真正的 null 对象,就会变成 lognull 的字符串,导致查询失败。因此,需要检查 BaseMapper 中查询方法的实现,确保表名拼接正确,避免出现这样的问题。
除此之外,也可以考虑使用注解的方式来指定表名,例如使用 @Table(name = "log") 来指定表名为 log,避免在代码中硬编码表名。同时也可以使用调试工具查看查询语句中的表名,确定出现问题的具体位置。
现在的场景是 我需要通过java 通过mybatis-pius查询流水 可以通过merchant_code, sign_name或mobile进行查询 并且使用mybatis-plus的注解方式进行查询 请使用分页查询的方式怎么实现
好的,以下是使用 MyBatis-Plus 注解方式进行分页查询的步骤:
1. 在实体类中添加查询条件字段,例如:
```java
public class Flow {
@TableField("merchant_code")
private String merchantCode;
@TableField("sign_name")
private String signName;
private String mobile;
// getter 和 setter 方法省略
}
```
2. 在 Mapper 接口中添加一个分页查询方法,例如:
```java
public interface FlowMapper extends BaseMapper<Flow> {
@Select("<script>" +
"SELECT * FROM flow " +
"<where> " +
"<if test='merchantCode != null'> AND merchant_code = #{merchantCode}</if>" +
"<if test='signName != null'> AND sign_name = #{signName}</if>" +
"<if test='mobile != null'> AND mobile = #{mobile}</if>" +
"</where>" +
"ORDER BY id DESC" +
"</script>")
IPage<Flow> selectPageByQuery(Page<?> page, @Param("merchantCode") String merchantCode, @Param("signName") String signName, @Param("mobile") String mobile);
}
```
3. 在 Service 中调用该方法进行分页查询,例如:
```java
@Service
public class FlowService {
@Autowired
private FlowMapper flowMapper;
public IPage<Flow> selectPageByQuery(int page, int size, String merchantCode, String signName, String mobile) {
return flowMapper.selectPageByQuery(new Page<>(page, size), merchantCode, signName, mobile);
}
}
```
其中,`page` 和 `size` 分别表示页码和每页大小,`merchantCode`、`signName` 和 `mobile` 分别表示查询条件。
在查询语句中,使用了 MyBatis-Plus 的动态 SQL 语句,通过 `<if>` 标签来判断查询条件是否为空,如果不为空则拼接到查询语句中。
希望这个回答可以帮助到您。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)