blog.TangGaowei.com

IBatis 怎样直接执行SQL语句

作者 Neot 写于 2009-06-15  | 3,139 次浏览

有时候,为了代码灵活,便于修改,要直接向IBatis传入完整的SQL语句。ibatis map 文件如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap namespace="bbs_define">
    <!– selectBySql –>
    <select id="selectBySql" resultClass="java.util.HashMap"
        remapResults="true"
        parameterClass="java.util.HashMap">
        <isNotEmpty property="sql">$sql$</isNotEmpty>
    </select>   
    <!– updateBySql –>
    <update id="updateBySql" parameterClass="java.util.HashMap">
        <isNotEmpty property="sql">$sql$</isNotEmpty>
    </update>   
</sqlMap>

其中最重要的设置是“remapResults="true"”。remapResults设置成true,表示结果字段可以是不定的。也就是说,这次可返回“ID,NAME”两个字段,下次何返回“ID,NAME,TYPE_ID”三个字段,也可以返回“*”

[ 标签: ibatis ]
[ 固定链接:http://blog.tanggaowei.com/2009/06/ibatis-sql.html ]

Ibatis 的 Error setting a property: IllegalArgumentException 错误

作者 Neot 写于 2009-01-14  | 1,836 次浏览

今天碰到一个 NestedRuntimeException 错误:

Caused by: com.ibatis.common.exception.NestedRuntimeException: Error setting properties of ‘org.ld.bean.Lifeinfo@193f6e2′.  Cause: java.lang.IllegalArgumentException
Caused by: java.lang.IllegalArgumentException

有人说是因为数据库字段有 null 值,所以出现这种错误。确实,将 null 值都改为非 null 值后能解决这个问题。但是,这种方式太不友好,一旦表里插入了 null 值就可能出现错误。

后来在“RE: Error setting a property: IllegalArgumentException”里找到另一种更好的方法。

其实根本问题是 ibatis 无法将 null 值赋给 Java 的 int 类型变量而产生的。将 resultMap 映射的 bean 中的 int 类型属性改为 Integer 类型就可以了。

[ 标签: ibatis ]
[ 固定链接:http://blog.tanggaowei.com/2009/01/ibatis-error-setting-a-property-illegalargumentexception.html ]

Abator 的 selectByExample 方法需要 ibatis 2.2 支持

作者 Neot 写于 2008-12-30  | 1,471 次浏览

  Abator 的 selectByExample 方法实现了类似 Hibernate 的使用方法:

            SysMenuDAOImpl dao = new SysMenuDAOImpl();
            SysMenuExample example = new SysMenuExample();
            example.createCriteria().andMenuParentIdEqualTo(0); // 添加上极菜单 ID 等于 0 的条件
            example.setOrderByClause(”MENU_ID”); // 按 MENU_ID 排序
            List list = dao.selectByExample(example);

这种方法需要 ibatis 2.2 才能支持,ibatis 2.1 不能正常使用,ibatis 2.3 没有测试过。

  它使用了 SqlMap 中的 include 方法,类似以下:

<sql id=”selectItem_fragment”>    
  FROM items     
  WHERE parentid = #value#
</sql>    
<select id=”selectItemCount” parameterClass=”int” resultClass=”int”>    
  SELECT COUNT(*) AS total     
  <include refid=”selectItem_fragment”/>    
</select>    
<select id=”selectItems” parameterClass=”int” resultClass=”Item”>    
  SELECT id, name     
  <include refid=”selectItem_fragment”/>    
</select>

SqlMap 中的 include 方法好像需要 ibatis 2.0 及以上版本才支持。

[ 标签: Abator, ibatis, SqlMap ]
[ 固定链接:http://blog.tanggaowei.com/2008/12/abator-selectbyexample-ibatis-22.html ]

订阅

 

手机访问

http://blog.tanggaowei.com/wap/

Google