一、根據主鍵更新(傳對象)
1. 接口是:
/* * 根據主鍵更新 * */ int updateById(SysUser sysUser);
2. xml下:
<update id="updateById"> update sys_user set user_name = #{userName}, user_password = #{userPassword}, user_email = #{userEmail}, user_info = #{userInfo}, head_img = #{headImg ,jdbcType = BLOB}, create_time = #{createTime, jdbcType = TIMESTAMP} where id = #{id} </update>
3. 測試函數:
@Test public void testUpdate(){ SqlSession sqlSession = getSqlSession(); try{ UserMapper userMapper = sqlSession.getMapper(UserMapper.class); SysUser sysUser = userMapper.selectById(1L); Assert.assertEquals("admin_test1",sysUser.getUserName()); sysUser.setUserName("admin"); sysUser.setUserEmail("test@com.example"); sysUser.setUserInfo("admin_test info"); int result = userMapper.updateById(sysUser); System.out.println(result); Assert.assertNotEquals(1,result); sysUser = userMapper.selectById(1L); Assert.assertEquals("admin",sysUser.getUserName()); }finally { sqlSession.commit(); sqlSession.close(); } }
二、通過Map更新列(傳Map)
1. 接口如下:
/* * 通過Map更新列 * */ int updateByMap(Map<String, Object> map);
2. xml中:
<update id="updateByMap"> update sys_user set <foreach collection="_parameter" item="val" index="key" separator=","> ${key} = #{val} </foreach> where id = #{id} </update>
注:這里沒有通過@ Param 注解指定參數名,因而 MyBati 在內部的上下文中使用了默認值_parameter 作為該參數的 key ,所以在 XML 使用了_parameter
item:變量名,值為從法代對象中取出的每一個值。
index:這個值為 Map key (鍵值)
3. 測試函數如下:
@Test public void testUpdateByMap(){ SqlSession sqlSession = getSqlSession(); try { UserMapper userMapper = sqlSession.getMapper(UserMapper.class); Map<String, Object> map = new HashMap<String, Object>(); map.put("id" , 1L); map.put("user_email","test@ccc.tk"); map.put("user_password", "12345678"); userMapper.updateByMap(map); SysUser user = userMapper.selectById(1L); Assert.assertEquals("test@ccc.tk",user.getUserEmail()); }finally { sqlSession.close(); } }
至此,結束。