`

mybatis sql String>Double, 类型参数被强转为数值类型

阅读更多

 

最近项目中使用 mybatis 做为持久化层框架, 本来觉得还挺简单的, 这个框架的整体感觉是简单、直观明了,比较容易上手, 可是刚开始就遇到个棘手的问题,以为是配置哪里不对, 后来找了好久都没查出问题。 最后请教高手,帮忙解决了难题。

 

问题简要:

传入参数为String类型,xml配置文件也是VARCHAR类型,可以一旦传入字符类型的数据,就会抛出异常, Error querying database.  Cause: java.lang.NumberFormatException: For input string: "XXX", 代码如下:


 经过高手多方查找, 解决方案如下:


 这样一来问题就解决了

 

 

参考资源 here

参考资源核心描述:

根据提示的信息,我们很容易知道是数据格式化的时候出了问题,不过为什么哪?我们定义的没有错呀!传递的也没有错呀!想不通,百度一下吧!下面是百度的一个结果,指明了引起错误原因的所在!是OGNL的语法问题,这里'Y'将被认为是char类型的数据,但是'YY'或者“Y”将被认为是String类型的数据,解决方案如下所示:

1:将代码改为test="param eq 'Y'.toString()"

2:将代码改为test="name == "Y""

3:将代码改为test='index == "Y"'

当对象的映射文件及对应的属性如下编写时,<result column="IF_SHIELD" property="ifShield" jdbcType="VARCHAR" /> private String ifShield;

<if test="ifShield==1">是没问题的(并且数字是全部没问题的,无论是小数还是整数是正数还是负数),不过这样编写<result column="IF_SHIELD" property="ifShield" jdbcType="CHAR" /> private String ifShield;

<if test="ifShield==1">就是有问题的。

 参考如下:

http://www.cnblogs.com/tv151579/p/3297691.html

https://code.google.com/p/mybatis/issues/detail?id=262

  • 大小: 4.4 KB
  • 大小: 4 KB
0
3
分享到:
评论
2 楼 davidforit 2015-09-28  
fisher123 写道
谁教你的字符串比较用 == 和!=
equals 放哪饿?


你用过mybatis吗?
1 楼 fisher123 2015-09-12  
谁教你的字符串比较用 == 和!=
equals 放哪饿?

相关推荐

    mybatis参数解说

    在MyBatis框架中,处理数据库操作时,经常需要向SQL语句传递各种类型的参数。这些参数包括简单数据类型(如Integer、String等)、复杂的对象类型(如自定义JavaBean类)、Map集合以及List集合等。为了更好地理解这些...

    mybatis调用存储过程源码

    MyBatis是一个强大的Java持久层框架,它允许开发者将数据库操作与业务逻辑分离,通过XML或注解方式灵活地映射SQL语句。在某些情况下,我们可能需要使用存储过程来执行复杂的数据库操作,比如批量处理、事务控制或...

    MyBatis常用的jdbcType数据类型

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

    javasqlTypes数据库字段类型java数据类型的对应关系

    - `DOUBLE` 对应于SQL的`DOUBLE PRECISION`或`FLOAT`,与Java的`double`或`Double`类型相对应。 3. **数据库字段类型与Java数据类型映射** - 映射关系通常在JDBC驱动中实现,不同的数据库可能有不同的映射方式,...

    MyBatis动态创建表的实例代码

    MyBatis主要通过`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`、`&lt;where&gt;`、`&lt;set&gt;`等标签来实现动态SQL。 在动态SQL中,有两点需要注意:`#{}`和`${}`的区别。`#{}`是预编译参数标记,它会在JDBC预编译阶段被替换...

    MyBatis的嵌套查询解析

    MyBatis嵌套查询解析 MyBatis是一款流行的持久层框架,它提供了丰富的查询机制,包括嵌套查询解析。嵌套查询解析是指在一个查询中包含多个关联查询,以减少数据库查询次数,提高查询效率。下面将详细介绍MyBatis的...

    Mybatis Plus 字段为空值时执行更新方法未更新解决方案

    在Mybatis Plus中,当更新一个对象时,如果某个字段的值为空,那么Mybatis Plus不会将其包含在更新的SQL语句中。这种行为可能导致预期的更新操作未能正确执行,特别是当希望空值能够更新为数据库的NULL值时。 在...

    mybatis递归 一对多的实现方法示例

    该对象包含一个List&lt;GoodsCategoryVo&gt;类型的字段catelist,用于存储子分类信息。 Mapper.xml文件 在Mapper.xml文件中,我们定义了一个ResultMap,用于将数据库表中的数据映射到GoodsCategoryVo对象。 ```xml ...

    iBATIS-SqlMaps-2-Tutorial_en.pdf

    - **属性配置**:定义系统级别的参数,如日志框架类型等。 - **JDBC DataSource**:指定数据库连接的详细信息,包括驱动类、URL、用户名和密码。 - **SQL Maps**:具体定义SQL语句及其返回结果的映射规则。 ####...

    Mybaties讲义(小白需要)

    本讲主要围绕MyBatis的基础知识展开,包括环境搭建、配置文件详解、参数处理、动态SQL等内容。通过这些知识的学习,可以帮助初学者建立起MyBatis的使用框架,并为进一步深入学习打下坚实的基础。 #### 五、预习知识...

    Mybatis应用mysql存储过程查询数据实例

    public List&lt;UserBusiness&gt; searchAllList(Map&lt;String, Object&gt; params) { SqlSession sqlSession = MyBatisUtil.getSqlSession(); try { UserBusinessMapper mapper = sqlSession.getMapper(UserBusinessMapper...

    java实体转mysql建表语句

    在Java开发中,将Java实体类转换为MySQL数据库的建表语句是一项常见的任务,它有助于快速构建数据库模型,尤其在使用ORM(对象关系映射)框架如Hibernate、MyBatis时更为便捷。本篇文章将深入探讨这个过程,并提供...

    一个java程序员的经验总结

    需要注意的是,在使用动态SQL时,若参数名称与其他SQL语句中的占位符冲突,则需要使用`$`而非`#`进行绑定。 #### 十三、日期时间格式化 使用`DecimalFormat`类可以方便地进行日期时间的格式化输出。例如: ```java...

    javabean技术开发图书网站数据库的增删改查操作

    2. **准备SQL语句**:根据操作类型(增、删、改、查)编写相应的SQL语句。例如,添加新书的SQL可能是`INSERT INTO books (title, author, price) VALUES (?, ?, ?)`。 3. **预编译SQL语句**:通过`Connection....

    解决Java中由于数据太大自动转换成科学计数法的问题

    在Java中,当我们处理大数据时,例如Long类型或Double类型的数字,可能会自动转换成科学计数法的形式,例如1.23456789E10。这种自动转换可能会导致数据的精度丢失或难以阅读。因此,我们需要一种方法来避免这种自动...

    MySQL操作命令以及JDBC连接Mysql编程的步骤

    - 创建表:`CREATE TABLE &lt;表名&gt; ( &lt;字段名 1&gt; &lt;类型 1&gt;, ..., &lt;字段名 n&gt; &lt;类型 n&gt;);` - 查看表信息:`SHOW TABLES;` - 删除表:`DROP TABLE &lt;表名&gt;;` - 插入数据:`INSERT INTO &lt;表名&gt; VALUES (...);` - 数据...

    Maven创建商品增删改查功能+解决中文乱码

    public String addProduct(@RequestParam("name") String name, @RequestParam("price") Double price) { productService.addProduct(new Product(name, price)); return "redirect:/products"; } ``` 对于中文...

    java数据库连接示例(Mysql)内涵驱动

    为了提高性能和防止SQL注入,推荐使用`PreparedStatement`代替`Statement`,因为它可以预编译SQL语句,并且支持参数化查询。 此外,JDBC还提供了`CallableStatement`,用于执行存储过程。如果你的数据库应用涉及到...

    struts2实现分页显示

    在数据库操作层(如Hibernate或MyBatis),编写SQL语句来获取特定页的数据。例如,获取第`currentPage`页,每页`pageSize`条记录的SQL可能是这样的: ```sql SELECT * FROM students LIMIT :pageSize OFFSET (:...

Global site tag (gtag.js) - Google Analytics