最近项目中使用 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
相关推荐
在MyBatis框架中,处理数据库操作时,经常需要向SQL语句传递各种类型的参数。这些参数包括简单数据类型(如Integer、String等)、复杂的对象类型(如自定义JavaBean类)、Map集合以及List集合等。为了更好地理解这些...
MyBatis是一个强大的Java持久层框架,它允许开发者将数据库操作与业务逻辑分离,通过XML或注解方式灵活地映射SQL语句。在某些情况下,我们可能需要使用存储过程来执行复杂的数据库操作,比如批量处理、事务控制或...
在 MyBatis 框架中,`jdbcType` 起到了桥梁的作用,使得 Java 类型的数据能够正确地转换为 SQL 语句中的对应类型。以下是对 MyBatis 常用的 `jdbcType` 数据类型的详细解释: 1. **BIT**: 用于存储单个二进制位,...
- `DOUBLE` 对应于SQL的`DOUBLE PRECISION`或`FLOAT`,与Java的`double`或`Double`类型相对应。 3. **数据库字段类型与Java数据类型映射** - 映射关系通常在JDBC驱动中实现,不同的数据库可能有不同的映射方式,...
MyBatis主要通过`<if>`、`<choose>`、`<when>`、`<otherwise>`、`<where>`、`<set>`等标签来实现动态SQL。 在动态SQL中,有两点需要注意:`#{}`和`${}`的区别。`#{}`是预编译参数标记,它会在JDBC预编译阶段被替换...
MyBatis嵌套查询解析 MyBatis是一款流行的持久层框架,它提供了丰富的查询机制,包括嵌套查询解析。嵌套查询解析是指在一个查询中包含多个关联查询,以减少数据库查询次数,提高查询效率。下面将详细介绍MyBatis的...
在Mybatis Plus中,当更新一个对象时,如果某个字段的值为空,那么Mybatis Plus不会将其包含在更新的SQL语句中。这种行为可能导致预期的更新操作未能正确执行,特别是当希望空值能够更新为数据库的NULL值时。 在...
该对象包含一个List<GoodsCategoryVo>类型的字段catelist,用于存储子分类信息。 Mapper.xml文件 在Mapper.xml文件中,我们定义了一个ResultMap,用于将数据库表中的数据映射到GoodsCategoryVo对象。 ```xml ...
- **属性配置**:定义系统级别的参数,如日志框架类型等。 - **JDBC DataSource**:指定数据库连接的详细信息,包括驱动类、URL、用户名和密码。 - **SQL Maps**:具体定义SQL语句及其返回结果的映射规则。 ####...
本讲主要围绕MyBatis的基础知识展开,包括环境搭建、配置文件详解、参数处理、动态SQL等内容。通过这些知识的学习,可以帮助初学者建立起MyBatis的使用框架,并为进一步深入学习打下坚实的基础。 #### 五、预习知识...
在Java中,当我们处理大数据时,例如Long类型或Double类型的数字,可能会自动转换成科学计数法的形式,例如1.23456789E10。这种自动转换可能会导致数据的精度丢失或难以阅读。因此,我们需要一种方法来避免这种自动...
public List<UserBusiness> searchAllList(Map<String, Object> params) { SqlSession sqlSession = MyBatisUtil.getSqlSession(); try { UserBusinessMapper mapper = sqlSession.getMapper(UserBusinessMapper...
在Java开发中,将Java实体类转换为MySQL数据库的建表语句是一项常见的任务,它有助于快速构建数据库模型,尤其在使用ORM(对象关系映射)框架如Hibernate、MyBatis时更为便捷。本篇文章将深入探讨这个过程,并提供...
需要注意的是,在使用动态SQL时,若参数名称与其他SQL语句中的占位符冲突,则需要使用`$`而非`#`进行绑定。 #### 十三、日期时间格式化 使用`DecimalFormat`类可以方便地进行日期时间的格式化输出。例如: ```java...
2. **准备SQL语句**:根据操作类型(增、删、改、查)编写相应的SQL语句。例如,添加新书的SQL可能是`INSERT INTO books (title, author, price) VALUES (?, ?, ?)`。 3. **预编译SQL语句**:通过`Connection....
- 创建表:`CREATE TABLE <表名> ( <字段名 1> <类型 1>, ..., <字段名 n> <类型 n>);` - 查看表信息:`SHOW TABLES;` - 删除表:`DROP TABLE <表名>;` - 插入数据:`INSERT INTO <表名> VALUES (...);` - 数据...
public String addProduct(@RequestParam("name") String name, @RequestParam("price") Double price) { productService.addProduct(new Product(name, price)); return "redirect:/products"; } ``` 对于中文...
为了提高性能和防止SQL注入,推荐使用`PreparedStatement`代替`Statement`,因为它可以预编译SQL语句,并且支持参数化查询。 此外,JDBC还提供了`CallableStatement`,用于执行存储过程。如果你的数据库应用涉及到...
在数据库操作层(如Hibernate或MyBatis),编写SQL语句来获取特定页的数据。例如,获取第`currentPage`页,每页`pageSize`条记录的SQL可能是这样的: ```sql SELECT * FROM students LIMIT :pageSize OFFSET (:...