MyBatis--动态SQL

来源:互联网 发布:js 获取html属性值 编辑:程序博客网 时间:2024/06/05 23:51

之前的项目中已经实现了(根据笔记ID修改笔记的功能)

其中Dao接口为方法一:

//在编辑笔记区域根据笔记ID修改笔记,返回影响数据的条数(两个方法功能相同,第二个方法使用动态SQL)public int updateNote(Note note);public int updateNoteByMap(Map<String,Object> map);
现在使用动态SQL来实现,因为有可能笔记修改的时候只是修改了某一些属性,在SQL中不用将所有的属性都进行更新,这样可以提高系统性能

示意图如下:


先将需要传递的传输放入Map<String,Object>中,然后将Map作为一个参数来使用

Mapper文件:

  <!-- 在编辑笔记区域根据笔记ID修改笔记,使用动态SQL title为map中的key,           如果没有修改cn_note_last_modify_time,则会产生多余的逗号,需要利用trim去掉多余逗号           如果有时间,就使用传过来的时间,若没有事件就是用MySql系统当前事件,choose相当于if  else  -->  <update id="updateNoteByMap" parameterType="map">    update         cn_note     set    <trim suffixOverrides=",">    <if test="title!=null">    cn_note_title = #{title},    </if>    <if test="body!=null">    cn_note_body = #{body},    </if>    <choose>      <when test="time!=null">          cn_note_last_modify_time = #{time}      </when>      <otherwise>        cn_note_last_modify_time = unix_timestamp()      </otherwise>    </choose>    </trim>    where     cn_note_id = #{noteId}  </update>

---------------------------------------------------------

测试代码:

@Test//更具笔记ID修改笔记--使用动态SQLpublic void testUpdateNoteByMap(){//设置MapMap<String,Object> map = new HashMap<String, Object>();map.put("title", "Java");map.put("body", "Hello World");map.put("noteId", "9c612c62-7743-426d-850e-23a5eaa3454f");//次此处故意省略了参数  timedao.updateNoteByMap(map);}

若SQL语句有错,则会在报错中打印出错误的动态SQL语句

==================================================

批量删除笔记:

注意:在get请求中发送数据的key可以相同,例如:http://localhost:8080/cloud_note/delete.do?id=id1&id=id2

接收数据时当作一个数组来接收String[] id
批量删除笔记:


---------------------------------------------------------

Dao接口:

/*** 利用动态SQL批量删除笔记(真正的删除笔记--在cn_note_status_id=2的笔记中进行再次删除)* map中需要添加参数:ids代表被删除笔记的ID列表,status代表被删除笔记的状态属性* map={ids:[id1,id2,id3...],status:2}*/public int deleteNotes(Map<String,Object> map);
---------------------------------------------------------

Mapper文件:

<!-- 批量删除笔记(真正的删除笔记,在cn_note_status_id=2的笔记中进行再次删除) -->  <delete id="deleteNotes" parameterType="map">    delete from cn_note     where    <if test="status!=null">      cn_note_status_id = #{status} and    </if>    cn_note_id in    <foreach collection="ids" item="id" open="(" separator="," close=")">    #{id}    </foreach>  </delete>
---------------------------------------------------------

测试代码:

@Test//批量删除笔记(真正的删除笔记--在cn_note_status_id=2的笔记中进行再次删除)public void testDeleteNotes(){Map<String,Object> map = new HashMap<String, Object>();String id1 = "c87adda0dad44f0dae660a3c2d9c7f13";//demo中笔记:蛋蛋123String id2 = "f01543a3e776476387eed947e62688c8";//demo中笔记:测试TTString id3 = "f2805f05d7974a9e8509abfc33650777";//demo中笔记:测试王庆6String[] ids = {id1,id2,id3};map.put("ids", ids);map.put("status", 2);int n = dao.deleteNotes(map);System.out.println(n);}

原创粉丝点击