jxp2002 发表于 2016-11-28 09:37:08

Mybatis/Ibatis,数据库操作的返回值

insert,返回值是:新插入行的主键(primary key);需要包含<selectKey>语句,才会返回主键,否则返回值为null。
update/delete,返回值是:更新或删除的行数;无需指明resultClass;但如果有约束异常而删除失败,只能去捕捉异常。
queryForObject,返回的是:一个实例对象或null;需要包含<select>语句,并且指明resultMap;
queryForList,返回的是:实例对象的列表;需要包含<select>语句,并且指明resultMap;
我的配置文件如下(desktop_common_sqlMap.xml):
view plaincopy在CODE上查看代码片派生到我的代码片
<typeAlias alias="UnlockTagInfo" type="com.desktop.common.bean.UnlockTagInfo" />
<resultMap class="UnlockTagInfo" id="UnlockTagInfoResult">
    <result column="id" property="id" jdbcType="INTEGER" />
    <result column="name" property="name" jdbcType="VARCHAR" />
    <result column="description" property="description" jdbcType="VARCHAR" />
    <result column="priority" property="priority" jdbcType="INTEGER" />
</resultMap>
<insert id="insertUnlockTagInfo" parameterClass="map">
    <selectKey resultClass="int" keyProperty="id">
      select
      nextval('desktop_unlock_tag_id_seq') as id
    </selectKey>
    insert into
    desktop_unlock_tag(id,name,description,priority)
    values(#id:INTEGER#,#name:VARCHAR#,#description:VARCHAR#,#priority:INTEGER#)
</insert>
<update id="updateUnlockTagInfo" parameterClass="map">
    update
    desktop_unlock_tag
    set modify_time=now(),priority=#priority:INTEGER#,
    name=#name:VARCHAR#,description=#description:VARCHAR#
    where
    id=#id:INTEGER#
</update>
<delete id="deleteUnlockTagInfo" parameterClass="int">
    delete from
    desktop_unlock_tag
    where id=#value:INTEGER#
</delete>
<select id="countUnlockTagInfo" resultClass="int">
    select count(*)
    from
    desktop_unlock_tag
</select>
<sql id="selectUnlockTagInfo">
    select
    id,name,description,priority
    from
    desktop_unlock_tag
</sql>
<select id="findUnlockTagInfoById" parameterClass="int"
    resultMap="UnlockTagInfoResult">
    <include refid="selectUnlockTagInfo" />
    where id=#id:INTEGER#
</select>
<select id="listUnlockTagInfo" parameterClass="map"
    resultMap="UnlockTagInfoResult">
    <include refid="selectUnlockTagInfo" />
    order by
    modify_time desc limit #size:INTEGER#
    offset #start:INTEGER#
</select>
我的DAO源码如下:
view plaincopy在CODE上查看代码片派生到我的代码片
public class UnlockTagDaoImpl extends SqlMapClientDaoSupport implements
      UnlockTagDao {
    @Override
    public Integer addItem(String name, String desc, Integer priority) {
      SqlMapClientTemplate template = this.getSqlMapClientTemplate();
      Map<String, Object> args = new HashMap<String, Object>();
      args.put("name", name);
      args.put("description", desc);
      args.put("priority", priority);
      Object key = template.insert("DesktopCommon.insertUnlockTagInfo", args);
      return (Integer) key;
    }

    @Override
    public boolean updateItem(Integer id, String name, String description,
            Integer priority) {
      SqlMapClientTemplate template = this.getSqlMapClientTemplate();
      Map<String, Object> args = new HashMap<String, Object>();
      args.put("id", id);
      args.put("name", name);
      args.put("description", description);
      args.put("priority", priority);
      try {
            int c = template.update("DesktopCommon.updateUnlockTagInfo", args);
            if (c > 0) {
                return true;
            }
            return false;
      } catch (Exception e) {
            return false;
      }
    }

    @Override
    public boolean deleteItem(Integer id) {
      SqlMapClientTemplate template = this.getSqlMapClientTemplate();
      try {
            int c = template.delete("DesktopCommon.deleteUnlockTagInfo", id);
            if (c > 0) {
                return true;
            }
            return false;
      } catch (Exception e) {
            return false;
      }
    }

    @Override
    public UnlockTagInfo findItemById(Integer id) {
      SqlMapClientTemplate template = this.getSqlMapClientTemplate();
      UnlockTagInfo item = (UnlockTagInfo) template.queryForObject(
                "DesktopCommon.findUnlockTagInfoById", id);
      return item;
    }

    @Override
    public PagedList<UnlockTagInfo> listAll(Integer nStart, Integer nSize,
            boolean bCountTotal) {
      SqlMapClientTemplate template = this.getSqlMapClientTemplate();
      PagedList<UnlockTagInfo> result = new PagedList<UnlockTagInfo>();
      if (bCountTotal) {
            int total = (Integer) template
                  .queryForObject("DesktopCommon.countUnlockTagInfo");
            result.setTotal(total);
      }
      Map<String, Integer> args = new HashMap<String, Integer>();
      args.put("start", nStart);
      args.put("size", nSize);
      @SuppressWarnings("unchecked")
      List<UnlockTagInfo> items = template.queryForList(
                "DesktopCommon.listUnlockTagInfo", args);
      result.setData(items);
      return result;
    }
}
页: [1]
查看完整版本: Mybatis/Ibatis,数据库操作的返回值