使用ibatis,如果要更新表记录,一般常用的做法就是,查找出记录,然后修改部分字段,进行update操作.
例如:
User user = userDAO.findById(1);
user .setName("zhangsan");
user DAO.update( user );
这种是最常用的方法.在很多应用场景下完全没有问题.
但是,如果user表中存在一个或者多个text(或者blob)字段.难道仅仅为了更新一个name字段,需要重新update那些本不需要更新的text/blob字段吗?
人们又想出了一个办法,参数采用map,把需要更新的字段put到map中,
应用方法如下:
ibatis映射文件sqlmap.xml中:
<update id="update" parameterClass="java.util.HashMap">
UPDATE TAB SET EDITION=#ID# WHERE USERID=#USERID#
</update>
在我们要调用sql查询语句的java方法中有:
Map<String, Object> parameter = new HashMap<String, Object>();
parameter.put("USERID", userId);
parameter.put("ID", edition);
try {
sqlMapClient.update("mysqlibatis.update", parameter);
} catch (SQLException e) {
return false;
}
在此处对上面用到的参数作说明,sqlMapClient.update("mysqlibatis.update", parameter);中的"mysqlibatis"是ibatis映射文件的
名称,"update"是<update>标签的id,而parameter是传入的map参数名称,并且parameter参数中必须要有和
<update id="update" parameterClass="java.util.HashMap">
UPDATE TAB SET EDITION=#ID# WHERE USERID=#USERID#
</update>
中对应的key值,如上,就是在parameter中要有ID和USERID。并且,<update>标签的parameterClass的
一定要是"java.util.HashMap".向上面这样做就减轻了我们的工作量,不用在ibatis中写parameterMap的映射了。
参考:http://duqiangcise.iteye.com/blog/300459
http://www.blogjava.net/stone2083/archive/2008/06/26/210969.html