mybatis更新数据(传对象 传 Map参数)

一、根据主键更新(传对象)

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();
        }

    }

 

至此,结束。

 

上一篇:轻松理解JVM的分代模型


下一篇:SpringBoot实战项目(十七)--使用拦截器实现系统日志功能