Mybatis 使用<if test/>实现选择插入
2016-03-11 17:04
543 查看
最近遇到需要需要根据 areaId的范围进行插入,在使用中使用when test实现数据范围选择,之前在test中使用 大于号 > 是没有问题的,例如
于是根据编程的想法,就写了这个
结果编译出错,说Mybatis不支持小于号,也还是挺蒙啊,为什么大于支持,小于就不支持了。。
当然查到了解决问题的办法
1.用
我加入了select的头,是因为后面继续的报错,报错是Integer中不能找到praise的getter
报错的意思很明确,要按照int对应的Integer类查找praise属性,这显然是没有的。继续查。
还是两种解决方法,
1.DAO接口中适用注解@Param(value=”praise”) int num
2.将参数名(上面的例子为‘praise’)替换为”_parameter”
看到这里我就很晕了,使用注解在没有if的判断时不会报错,例如,并且不去注解参数
但是加上判断就会将参数理解为parameterType类型中的成员变量。网上说问题原因是Mybatis默认采用ONGL解析参数,所以会自动采用对象树的形式获取传入的变量值。
于是判断在没有if时mybatis不会强制采用对象树去获取,而在使用if之后将会采用。
查看官网文档
动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多的元素需要来了解。MyBatis 3 大大提升了它们,现在用不到原先一半的元素就可以了。MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素。
也就是对于动态sql我们必须制定参数的来源,要么使用注解,要是使用_parameter符号。
简单的解释先到这里,后续看来有必要看看源码啊。。
<when test="praise > 0">
于是根据编程的想法,就写了这个
<if test="praise > 0 and praise <100">
结果编译出错,说Mybatis不支持小于号,也还是挺蒙啊,为什么大于支持,小于就不支持了。。
当然查到了解决问题的办法
1.用
<select id="getGroupUserList" parameterType="int" resultType="int"> ... <when test="praise > 100000 and praise < 1000000"> ...
我加入了select的头,是因为后面继续的报错,报错是Integer中不能找到praise的getter
报错的意思很明确,要按照int对应的Integer类查找praise属性,这显然是没有的。继续查。
还是两种解决方法,
1.DAO接口中适用注解@Param(value=”praise”) int num
2.将参数名(上面的例子为‘praise’)替换为”_parameter”
看到这里我就很晕了,使用注解在没有if的判断时不会报错,例如,并且不去注解参数
<select id="selectUserInfo" resultType="string" parameterType="int"> SELECT nickname FROM user_info WHERE userid=#{userId} </select>
但是加上判断就会将参数理解为parameterType类型中的成员变量。网上说问题原因是Mybatis默认采用ONGL解析参数,所以会自动采用对象树的形式获取传入的变量值。
于是判断在没有if时mybatis不会强制采用对象树去获取,而在使用if之后将会采用。
查看官网文档
动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多的元素需要来了解。MyBatis 3 大大提升了它们,现在用不到原先一半的元素就可以了。MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素。
也就是对于动态sql我们必须制定参数的来源,要么使用注解,要是使用_parameter符号。
简单的解释先到这里,后续看来有必要看看源码啊。。
相关文章推荐
- 编程经验点滴 动态SQL的拼接技巧
- 深入浅析mybatis oracle BLOB类型字段保存与读取
- MyBatis MapperProvider MessageFormat拼接批量SQL语句执行报错的原因分析及解决办法
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- MyBatis学习笔记(二)之关联关系
- 浅析Mybatis 在CS程序中的应用
- Java Mybatis框架入门基础教程
- 基于Oracle的高性能动态SQL程序开发
- oracle中动态SQL使用详细介绍
- MySQL存储过程中实现执行动态SQL语句的方法
- Oracle实现动态SQL的拼装要领
- Java简单实现SpringMVC+MyBatis分页插件
- MyBatis批量添加、修改和删除
- MyBatis与Hibernate的比较
- 浅析mybatis和spring整合的实现过程
- mybatis的动态sql详解(精)
- MyBatis实践之动态SQL及关联查询
- Mybatis实现增删改查及分页查询的方法
- MyBatis入门学习教程(一)-MyBatis快速入门