iBatis 动态SQL别名查询结果为Null问题

在项目中使用了iBatis,使用xml方便的维护SQL,清晰明了,偶然发现动态拼接的SQL语句在数据中执行很好的返回结果,而到了程序中总是有字段返回null值,跟在数据库中执行的结果不一致

例如

<select id="getUser" parameterClass="SearchModel" resultClass="UserTO">select id,name<dynamic><isNotNull property="birthday" prepend=",">time AS birthday</isNotNull></dynamic>from user
</select>

这个简单查询中,“birthday”这个字段是在传入参数birthday不为null的情况才会返回,有时候即使数据库中time字段有值也会返回null,这个是因为iBatis机制的问题,这是因为只定义了birthday字段不为null时返回的别名(值),而另外的情况未为iBatis设置返回规则,默认的iBatis就会都返回null

解决方法

iBatis中

  • isNotNull
  • isNull
  • isNotEmpty
  • isEmpty
  • isNotEqual
  • isEqual

这种动态判断关键字最好是成对出现,将所有情况规则都写出来,避免iBatis使用默认规则导致的动态SQL别名字段返回为Null问题

<select id="getUser" parameterClass="SearchModel" resultClass="UserTO">select id,name<dynamic><isNotNull property="birthday" prepend=",">time AS birthday</isNotNull><isNull property="birthday" prepend=",">null AS birthday</isNull></dynamic>from user
</select>

注意: iBatis中的动态拼接SELECT 后面列时,会出现 “索引超出了数组界限”的错误,需要将动态拼接的情况写完整,类似上述情况

iBatis 动态SQL别名查询结果为Null问题相关推荐

  1. 动态sql模糊查询和分页

    文章目录 动态sql 模糊查询 查询返回结果集的处理 分页 动态sql BookMapper xml bookservice 测试: MapperSql.test 运行: 模糊查询 BookMappe ...

  2. ibatis动态sql配置启动时提示:The content of elements must consist of well-formed character data......

    ibatis动态sql配置启动时提示:The content of elements must consist of well-formed character data... 2012-07-18 ...

  3. 转:ibatis动态sql

     直接使用JDBC一个非常普遍的问题就是动态SQL.使用参数值.参数本身和数据列都是动态SQL,通常是非常困难的.典型的解决办法就是用上一堆的IF-ELSE条件语句和一连串的字符串连接.对于这个问 ...

  4. MyBatis 实践 -动态SQL/关联查询

    MyBatis 实践 标签: Java与存储 动态SQL 动态SQL提供了对SQL语句的灵活操作,通过表达式进行判断,对SQL进行拼接/组装. if 对查询条件进行判断,如果输入参数不为空才进行查询条 ...

  5. 动态SQL 模糊查询 联表查询

    1. 正文 1. set标签 和 foreach标签 trim标签 sql片段 2. mybatis映射文件处理特殊字符. 3. mybatis完成模糊查询. 4. 联表查询 2. 动态sql 2.1 ...

  6. Mybatis:动态SQL分组查询

    目录 1.  实现思路 2. 代码实现 2.1  mapper 2.2 mapper 接口 2.3 Service层 AjaxResult对象 2.4 controller 2.5 测试 1.  实现 ...

  7. mybatis02映射动态sql关联查询spring整合mybatis

    2019独角兽企业重金招聘Python工程师标准>>> 输入映射和输出映射: 动态sql: 关联查询_一对一: 关联查询_一对多: 一对一,一对多操作的区别: 一对一,resultM ...

  8. mybatis collection标签_MyBatis第二天(结果映射+动态sql+关联查询)

    笑不出莱:MyBatis第一天(介绍+文件配置+Mapper动态代理)​zhuanlan.zhihu.com 一.导包+配置文件+pojo类 1.jar包:mybatis的核心包和依赖包+连接数据库的 ...

  9. mybatis动态sql模糊查询方法

    动态SQL可以省略很多拼接SQL的步骤,使用类似于JSTL方式. 方式1 : <select id="queryBlogIf" resultType="blog&q ...

最新文章

  1. 在线直播 | 是事实还是贩卖焦虑?IT行业也偏爱“小鲜肉”​
  2. 【BOOM】一款有趣的Javascript动画效果
  3. Dubbo 序列化协议 5 连问,你接得住不?
  4. linux:vim中全选复制
  5. 基于JAVA+SpringBoot+Vue+Mybatis+MYSQL的宿舍管理系统
  6. 计算机主机技术标准规范,B级机房技术规范要求
  7. 盘点(腾讯字节谷歌等大厂)面试中常见的智力题
  8. 革新科技CIDE-EDA:实验1 3-8译码器
  9. oppo小布机器人_OPPO小布助手2.0强势来袭 三大版块迎来重大升级
  10. 二层交换机 三层交换机 四层交换机的区别
  11. “怀孕后,老公居然背着我做这些事”:有没有嫁对人,看这点就知道了
  12. 好数推荐 数据堂平均音色语音库
  13. Assignment | 05-week3 -Part_2-Trigger Word Detection
  14. 简单计算器(C 语言实现)
  15. JS实现元素自动移动
  16. matlab之用m脚本自动完成检查变量命名规范
  17. 结构体嵌套结构体,及其的初始化
  18. java-字符串,抽象类与抽象
  19. 俄罗斯最大银行宣布加入区块链联盟…
  20. linux文件名后 rc 是什么意思

热门文章

  1. 实例化Servlet类ServletTest异常的处理方式
  2. 共享打印机查找计算机名,如何查找网络共享打印机
  3. HCIA-Security 学习笔记-1.1信息安全基础概念
  4. 网易内部AIGC项目落地长图;Claude开放申请;YC 2023顶级初创公司地图;科研界ChatGPT | ShowMeAI日报
  5. 打印杨辉三角的java代码,打印打印杨辉三角形怎么编程?
  6. 著名经济学家吴敬链清华大学演讲:不惜一切代价发展芯片非常危险!
  7. memcpy函数实现(c语言)
  8. 高级语言及其文法(一)
  9. 用最精炼语言介绍OpenStack网络代码演进的前世今生
  10. Javascript入门阶段——else if语句