进行代码检查的时候,被同事发现了一个问题,dao层中不管是update,insert,delete还是select操作,统一用的是,但是我在使用的时候结果并没有错误,但为了规范,在此做一下总结,贴出代码留个教训。
1、select操作
service层中:selectOne—>查找一条记录;select—>查找多条记录;返回值—>hashmap
Map<String, Object> selMap=commDAO.selectOne(KFSGL + "KFSGL_S", paramsMap);
Map<String, Object> selMap=commDAO.select(KFSGL + "KFSXX_Q", paramsMap);
dao层中:
<!--单记录查找 -->
<select id="KFSGL_S" parameterType="hashmap" resultType="hashmap">
select ID,KFSMC,KFSDM,LXRXM,LXDH,LXRSM,YXDZ,TXDZ,KFSMS
from FW_SYPT_KFSJLB
where ID=#{ID}
</select>
<!-- 多记录查询开发商信息 -->
<select id="KFSXX_Q" parameterType="hashmap" resultType="hashmap">
select id KFSID, KFSMC as KFS_XZ
from FW_SYPT_KFSJLB
WHERE 1=1 AND YXBZ = '1'
</select>
2、update操作
service层中:update—>更新;返回值—>int
if(id!=null&&id!=""){
temp=commDAO.update(KFSGL + "KFSGL_U", paramsMap);
}
dao层中:可以不写resultType,细节方面要注意
<update id="KFSGL_U" parameterType="hashmap">
update FW_SYPT_KFSJLB
<set>
<if test="KFSMC != null and KFSMC != ''"> KFSMC =#{KFSMC}, </if>
<if test="KFSDM != null and KFSDM != ''"> KFSDM =#{KFSDM}, </if>
<if test="LXRXM != null and LXRXM != ''"> LXRXM =#{LXRXM}, </if>
<if test="LXDH != null and LXDH != ''"> LXDH =#{LXDH}, </if>
<if test="LXRSM != null and LXRSM != ''"> LXRSM =#{LXRSM}, </if>
<if test="YXDZ != null and YXDZ != ''"> YXDZ =#{YXDZ}, </if>
<if test="TXDZ != null and TXDZ != ''"> TXDZ =#{TXDZ}, </if>
<if test="KFSMS != null and KFSMS != ''"> KFSMS =#{KFSMS}, </if>
<if test="CJR != null and CJR != ''"> CJR =#{CJR}, </if>
CJSJ =sysdate
</set>
<where>
ID = #{ID}
</where>
</update>
3、insert操作
service层中:insert—>插入;返回值—>int
temp=commDAO.insert(KFSGL + "KFSGL_I", paramsMap);
dao层中:可以不写resultType,细节方面要注意
<!-- 更新或者插入操作,默认有效标志为1 -->
<insert id="KFSGL_I" parameterType="hashmap">
insert into FW_SYPT_KFSJLB(ID,KFSMC,KFSDM,LXRXM,LXDH,LXRSM,YXDZ,TXDZ,KFSMS,YXBZ,CJSJ,CJR)
values(SEQ_SYPT_KFSJLB_ID.nextval,#{KFSMC},#{KFSDM},#{LXRXM},#{LXDH},#{LXRSM},#{YXDZ},#{TXDZ},{KFSMS},'1',sysdate,#{CJR})
</insert>
4、delete操作
由于数据很重要,作用非常大,因此在实际开发中,基本上是不存在物理上的删除数据的,只是逻辑上的删除数据,仅仅只是让用户觉得自己删除了数据,实际开发中的delete一般用update操作来代替。这里为了总结,还是写一写delete操作。
service层中:delete—>删除;返回值—>int
temp=commDAO.delete(KFSGL + "KFSGL_D", paramsMap);
dao层中:可以不写resultType,细节方面要注意
<!-- 更新或者插入操作,默认有效标志为1 -->
<insert id="KFSGL_D" parameterType="hashmap">
delete from FW_SYPT_KFSJLB where id='#{id}'
</insert>
5、总结
service层中统一调用了select(),用于进行update,insert,delete还是select操作(dao层配置sql语句还是没有改变,还是用了update,insert等等关键字),结果并没有错误,原因可能是因为service中查找mybatis中的配置信息时,仅仅还是根据id找到相应的sql语句进行执行,并没有匹配service中的函数调用是否和mybatis中配置的一样。但是这类问题要规避,因为现在没有问题不代表之后没有问题,缺陷都是隐藏在没有被发现,还是要注重规范。