首页 > 其他 > 详细

Map的野路子

时间:2021-04-26 22:35:08      阅读:16      评论:0      收藏:0      [点我收藏+]

首先有一张user数据表,数据库名称为mybatis,数据如下:
技术分享图片

我们使用以下两种方式实现数据更新的操作。

方式一

UserMapper.java如下:

    /**
     * @description: 更改用户
     * @Param: [user]
     * @Return: int
     */
    int updateUser(User user);

UserMapper.xml如下:

<update id="updateUser" parameterType="com.th.pojo.User">
     update mybatis.user set name =#{name},pwd=#{pwd} where id=#{id};
</update>

java测试类如下:

     /**
     * @description: 通过对象来更新数据
     * @Param: []
     * @Return: void
     */
    @Test
    public void testUpdateUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            int i = mapper.updateUser(new User(4, "燕gg", "YYYY"));
            if (i>0){
                System.out.println("Update Successful");
            }
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
    }

实验结果如下:
技术分享图片
数据成功进行了更改,现在,在更改的基础上继续使用方式二再进行更改。


方式二

UserMapper.java如下:

    /**
     * @description: 用Map的方式更新数据
     * @Param: [map]
     * @Return: int
     */
    int updateUser2(Map<String,Object> map);

UserMapper.xml如下:

<update id="updateUser2" parameterType="map">
    update mybatis.user set name =#{userName} where id=#{userid};
</update>

java测试类如下:

/**
     * @description: 使用map方式传递参数,只需要传递需要的参数就可以
     * @Param: []
     * @Return: void
     */
    @Test
    public void testUpdateUser2(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        try {
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            Map<String, Object> map = new HashMap<>();
            map.put("userid", 4);
            map.put("userName", "燕g");
            int i = mapper.updateUser2(map);
            if (i>0){
                System.out.println("Update Successful");
            }
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
    }

实验结果如下:
技术分享图片
我们同样正确地对数据进行了修改。


两种方式很显然都能达到修改数据的目的,在第一种方式这里,我们在SQL语句中传入的是一个User对象作为参数,namepwdid分别对应User实体类的三个属性,这是Mybatis帮我们做的。既然传入的是一个完整的User对象,那么我们必须创建一个User对象,这就出现了一个问题,当我们只需要修改其中一个属性时,就像例子中,我只要修改一个name属性时,那我同样需要创建一个完整的对象。更扯的其他不需要修改的属性必须保持与原来保持一致,否则一不留神也会被更改。这还只是有三个属性,如果对一个有很对属性的对象进行修改呢?这样的方式显然就很繁琐。

而对于方式二,我们不再需要一个完整的对象,我们只需要通过键值对将要修改的属性进行修改。通过传递的map对象,在SQL语句中直接使用键名就可以了;就像在上面例子中,我们通过idname属性进行修改,我们只需要设置两个存储idname属性的键值对就可以了。这在大量属性但只需要我们修改个别少数属性时就简单了很多。当然,这种野路子并非完全没有缺点,它在处理不同业务时需要的SQL语句是会更多的。

Map的野路子

原文:https://www.cnblogs.com/threepure/p/14705095.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!