首先有一张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对象作为参数,name、pwd、id分别对应User实体类的三个属性,这是Mybatis帮我们做的。既然传入的是一个完整的User对象,那么我们必须创建一个User对象,这就出现了一个问题,当我们只需要修改其中一个属性时,就像例子中,我只要修改一个name属性时,那我同样需要创建一个完整的对象。更扯的其他不需要修改的属性必须保持与原来保持一致,否则一不留神也会被更改。这还只是有三个属性,如果对一个有很对属性的对象进行修改呢?这样的方式显然就很繁琐。

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

Map的野路子的更多相关文章

  1. 野路子土鳖ASP.NETer谈互联网的发展趋势

    有些话别在憋在心里太久了,容易伤身体,总得找个借口吐槽一下,今日不小心看到园有关于互联网发函趋势的文章,作为一名ASP.NET程序员,自然要说说什么是趋势,机会找到了,好高兴. http://zzk. ...

  2. 野路子码农系列(2)Python中的类,可能是最通俗的解说

    啥叫佩奇?啥叫类?啥叫面向对象?后面两个问题以前在大学里“祖传谭浩强”的时候我经常会有所疑问.老师说着一堆什么public, private,我都是一脸懵逼,啥叫私有?为啥要私有?然后就神游天外了…… ...

  3. 野路子码农系列(1) 创建Web API

    新工作正式开始了2天,由于客户暂时还没交接数据过来,暂时无事可做.恰逢政佬给某超市做的商品图像识别的项目客户催收了,老板要求赶紧搞个API,于是我就想我来试试吧. 说起API,我其实是一窍不通的,我对 ...

  4. 野路子Java开发的一篇随笔

    园子的朋友们,一年半的时间大家过的还好吧?       流水它带走光阴的故事改变了我们,再次的见面我们又历经了多少的路程,落花流水,冷暖自知,这一年半,关于工作上的关键词只有两个:加班(996弱多了) ...

  5. 技术的正宗与野路子 c#, AOP动态代理实现动态权限控制(一) 探索基于.NET下实现一句话木马之asmx篇 asp.net core 系列 9 环境(Development、Staging 、Production)

    黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. “九阴神抓”本是& ...

  6. 野路子码农系列(8)我终于大致搞懂了GBDT

    由于下下周要在组里介绍一个算法,最近开始提前准备,当初非常自信地写下自己最喜欢的GBDT,但随着逐步深入,发现其实自己对这个算法的细节并不是非常了解,了解的只是一些面试题的答案而已……(既然没有深入了 ...

  7. 野路子出身PowerShell 文件操作实用功能

    本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...

  8. 野路子出身PowerShell 文件操作实用功能 MSSQL123

    因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职, 索性就网上各种搜,各种Demo,各种修改,花了半天时间,最后还是拼凑出来能达到效果了. 本身对PowerShe ...

  9. iOS开发 - 适配Https的野路子

    大致写下适配Https时遇到的坑,做完服务器迁移一直通宵到现在,表示无力再多做详解,只放一些常见问题的解决方案吧 问题一.Https请求失败 1. NetManager初始化时可参考如下设置(因为我没 ...

随机推荐

  1. C#Winform 注册使用全局快捷键详解

    C#.NET Winform 注册使用全局快捷键详解 借助于全局快捷键,用户可以在任何地方操控程序,触发对应的功能.但 WinForms 框架并没有提供全局快捷键的功能.想要实现全局快捷键需要跟 Wi ...

  2. C#随机打乱列表List元素顺序

    C#随机打乱列表List项目顺序 以下泛型扩展方法,实现了随机打乱泛型列表List<T>的功能 public static List<t> DisorderItems<t ...

  3. MyBatis功能点二:MyBatis提供的拦截器平台

    前面关于MyBatis功能点二plugin已经介绍了一些应用及其实现的底层代码,本文总结MyBatis提供的拦截器平台框架体系. 通过MyBatis功能点二:从责任链设计模式的角度理解插件实现技术 - ...

  4. 终极指南:企业级云原生 PaaS 平台日志分析架构全面解析

    早些时候 Erda Show 针对微服务监控.日志等内容做了专场分享,很多同学听完后意犹未尽,想了解更多关于日志分析的内容.Erda 团队做日志分析也有一段时间了,所以这次打算和大家详细分享一下我们在 ...

  5. HDFS免重启挂载新磁盘

    背景 在生产环境中,集群节点磁盘大小不同,其使用率也会不同,HDFS虽有均衡策略,但也会有数据不平衡的情况,有些节点磁盘就会被打满,然后这个节点就不健康了(Unhealthy Nodes),Yarn的 ...

  6. python处理图像矩阵--值转为int

    1. 在用python处理图像数字矩阵时,若对矩阵进行了加减乘除等运算,可能会造成矩阵元素值溢出,然后某些元素值可能都被赋为255:之后若重新显示图像,可能会没有什么变化,此时,可以将运算后的矩阵值转 ...

  7. MySQL必知必会学习笔记(详细)

    目录 01 了解SQL 02 MySQL简介 03 使用MySQL 04 检索数据 select, from, distinct, limit, offset 05 排序 order by 06 过滤 ...

  8. SQL Server Cross/Outer Apply

    SQL Server2005引入了APPLY运算符,它非常像连接子句,它允许两个表达式直接进行连接,即将左/外部表达式和右/内部表达式连接起来. CROSS APPLY(类比inner join)和O ...

  9. AHUACM寒假集训VI(网络流)

    luoguP2472.蜥蜴 传送门 题目大意: R × C ( 1 ≤ R , C ≤ 20 ) R\times C(1\leq R,C\leq20) R×C(1≤R,C≤20)的网格上,每个格子有一 ...

  10. 聊聊第一个开源项目(内网穿透) - CProxy

    文章首发:聊聊第一个开源项目 - CProxy 作者:会玩code 初衷 最近在学C++,想写个项目练练手.对网络比较感兴趣,之前使用过ngrok(GO版本的内网穿透项目),看了部分源码,想把自己的一 ...