`

Mybatis Integer类型,值为0被认为是空字符串的解决办法

阅读更多

Mybatis中进行查询或者插入等操作的时候,我们一般会对数据进行非空校验。例:

<if test="payerId != null and payerId != '' ">
      AND payer_id = #{payerId}
</if>
<if test="payeeId != null and payeeId != '' ">
      AND payee_id = #{payeeId}
</if>

 

如果不为空并且不是null才去修改这个值,但这样写只能针对字符串(String)类型,如果是Integer类型的话就会有问题了。例:

int parentId  = 0;
<if test="parentId != null and parentId != '' ">
      AND parent_id = #{parentId}
</if>
如上伪代码, AND parent_id = #{parentId}  将不会执行,也就是说mybatis将 parentId的值默认为
空字符串。

 所以,针对这个问题,我的解决办法是:如果类型为Integer类型,我就去掉 != ”的判断,只判断!=null即可。

 

分享到:
评论

相关推荐

    Mybatis Integer类型参数值为0时得到为空的解决方法

    这是因为 Mybatis 因自身原因,默认了 Integer 类型数据值等于 0 时为 ""(空字符串)。这样,可能会导致错误的查询结果。 解决方法 解决这个问题有多种方法,下面将逐一介绍: 1. 在 Controller 处拦截 在 ...

    springmybatis

    其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如IUserOperation.class),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.下面是详细...

    Mybatis在Mapper.xml文件中的转义字符处理方式.pdf

    为了解决这个问题,Mybatis提供了一些处理转义字符的方式,以确保SQL语句能够正确地写入Mapper.xml文件中并被解析。 在Mapper.xml文件中处理转义字符的常见方法主要有以下几种: 1. 常用的XML转义字符写法 在XML中...

    关于MyBatis参数传入#{index}的问题的解决方案【源码】

    而${index}则是在SQL字符串中直接替换变量,不进行预编译,存在安全风险。 在多参数的情况下,MyBatis通常推荐使用Map或者注解@Param来传递参数。例如: ```java public User getUser(@Param("id") int id, @Param...

    MyBatis3 用户指南 附JavaDB实例 pdf

    - **trim, where, set元素**:自动处理SQL字符串。 - **foreach元素**:遍历集合。 #### 七、Java API - **目录结构**:MyBatis项目的基本组织结构。 - **SqlSessions**:执行SQL语句的会话。 - **...

    mybatis中实现枚举自动转换方法详解

    在插入或更新数据时,将枚举对象转换为对应的数据库存储值(通常是字符串或整型)。 2. `T getNullableResult(ResultSet rs, String columnName) throws SQLException`: 当从ResultSet中按列名获取值时,调用此...

    mybatis常用语句和lyaui 多条件查询加分页

    - 使用`&lt;if&gt;`标签来动态构建SQL语句,只有当对应的值不为空且非空字符串时才加入更新语句中。 - `WHERE`子句不可遗漏,用于指定需要修改的具体记录。 #### 四、Lyaui多条件查询加分页 Lyaui框架(假设为Lyaui,...

    mybatis-plus练习项目包括Mapper的配置以及枚举配置等 简单项目,仅仅是用法

    - **条件构造器**:`QueryWrapper`和`UpdateWrapper`用于构建复杂的查询和更新条件,避免了手动拼接SQL字符串的繁琐工作。 这个练习项目可以帮助初学者快速上手MyBatis-Plus,理解其基本用法和优势。通过实际操作,...

    mybatis-plus id主键生成的坑

    然而,当主键类型被误设为 Integer 而不是 Long 或其他能容纳更大数值的数据类型时,可能会出现异常。例如,错误信息 "Could not set property 'id' of 'class ...

    sql的封装,不需要使用StringBuffer进行字符串拼接

    首先,`StringBuffer`或`StringBuilder`在Java中用于构建可变字符串,它们在循环中拼接字符串时比直接使用`+`操作符更有效率。然而,这种字符串拼接方式在处理大量数据或者频繁拼接时,容易导致内存开销过大,因为...

    mybatis自定义类型处理器TypehHandler示例详解

    例如,这里可能是将字符串转换成对应的JDBC字符串类型并设置到SQL语句的参数位置。 2. **getResult**:此方法用于从ResultSet中读取数据并将其转换为Java对象。根据传入的参数不同,有三种重载形式,分别用于按列名...

    Mybatis调用PostgreSQL存储过程实现数组入参传递

    在`setNonNullParameter`中,你需要将Java数组转换为PostgreSQL可以识别的格式,这通常涉及到调用`Arrays.toString()`方法转换为字符串,因为CallableStatement通常需要以字符串形式传递数组。 总结起来,Mybatis...

    MyBatis常用的jdbcType数据类型

    在 MyBatis 框架中,`jdbcType` 起到了桥梁的作用,使得 Java 类型的数据能够正确地转换为 SQL 语句中的对应类型。以下是对 MyBatis 常用的 `jdbcType` 数据类型的详细解释: 1. **BIT**: 用于存储单个二进制位,...

    java中long类型转换为int类型-java long转int.pdf

    第三种方法是先将 `long` 类型的值转换为 `String`,然后再通过 `Integer.parseInt()` 将字符串解析为 `int`。这种方法比较间接,但可以避免直接转换时的溢出异常。不过,如果原始 `long` 值超出 `int` 范围,`...

    Typehandler mybatis

    - 复杂对象的序列化与反序列化:如果某个字段需要存储一个复杂对象,可以自定义 TypeHandler 将对象序列化为字符串存储,再反序列化为对象。 - 特殊格式的数据:比如日期格式不统一,可以定制 TypeHandler 进行...

    MyBatis常用标签大全

    `item`是集合中每个元素的别名,`index`表示元素的索引,`open`、`separator`和`close`分别表示循环开始的字符串、分隔符和结束的字符串。以下示例用于批量更新操作: ```xml ;"&gt; &lt;!-- 更新或删除逻辑 --&gt; ```...

    Mybatis日志参数快速替换占位符工具的详细步骤

    为了提取第二个或更多个换行符后的文本,可以编写一个递归函数`index(str, reg, n)`,该函数返回字符串`str`中字符串`reg`的第`n`个实例的索引。在给定的代码示例中,这个函数实现了这一功能,允许我们定位到第二个...

    从零搭建Spring Boot脚手架,集成mybatis.docx

    - **URL**: 数据库的JDBC连接字符串。 - **Username** 和 **Password**: 数据库登录用户名和密码。 - **Driver-Class-Name**: 指定JDBC驱动类的全限定名。 - **Type**: 数据源的具体实现类,此处使用的是HikariCP...

    Mybatis中自定义TypeHandler处理枚举详解

    1. `EnumTypeHandler`: 这个TypeHandler将枚举对象转换为它们的字符串表示,即枚举的名称。在数据库中存储的是枚举的名称。 2. `EnumOrdinalTypeHandler`: 它会将枚举对象转换为其在枚举类中的位置(序号),在...

Global site tag (gtag.js) - Google Analytics