Map的野路子
首先有一张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的野路子的更多相关文章
- 野路子土鳖ASP.NETer谈互联网的发展趋势
有些话别在憋在心里太久了,容易伤身体,总得找个借口吐槽一下,今日不小心看到园有关于互联网发函趋势的文章,作为一名ASP.NET程序员,自然要说说什么是趋势,机会找到了,好高兴. http://zzk. ...
- 野路子码农系列(2)Python中的类,可能是最通俗的解说
啥叫佩奇?啥叫类?啥叫面向对象?后面两个问题以前在大学里“祖传谭浩强”的时候我经常会有所疑问.老师说着一堆什么public, private,我都是一脸懵逼,啥叫私有?为啥要私有?然后就神游天外了…… ...
- 野路子码农系列(1) 创建Web API
新工作正式开始了2天,由于客户暂时还没交接数据过来,暂时无事可做.恰逢政佬给某超市做的商品图像识别的项目客户催收了,老板要求赶紧搞个API,于是我就想我来试试吧. 说起API,我其实是一窍不通的,我对 ...
- 野路子Java开发的一篇随笔
园子的朋友们,一年半的时间大家过的还好吧? 流水它带走光阴的故事改变了我们,再次的见面我们又历经了多少的路程,落花流水,冷暖自知,这一年半,关于工作上的关键词只有两个:加班(996弱多了) ...
- 技术的正宗与野路子 c#, AOP动态代理实现动态权限控制(一) 探索基于.NET下实现一句话木马之asmx篇 asp.net core 系列 9 环境(Development、Staging 、Production)
黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. “九阴神抓”本是& ...
- 野路子码农系列(8)我终于大致搞懂了GBDT
由于下下周要在组里介绍一个算法,最近开始提前准备,当初非常自信地写下自己最喜欢的GBDT,但随着逐步深入,发现其实自己对这个算法的细节并不是非常了解,了解的只是一些面试题的答案而已……(既然没有深入了 ...
- 野路子出身PowerShell 文件操作实用功能
本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...
- 野路子出身PowerShell 文件操作实用功能 MSSQL123
因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职, 索性就网上各种搜,各种Demo,各种修改,花了半天时间,最后还是拼凑出来能达到效果了. 本身对PowerShe ...
- iOS开发 - 适配Https的野路子
大致写下适配Https时遇到的坑,做完服务器迁移一直通宵到现在,表示无力再多做详解,只放一些常见问题的解决方案吧 问题一.Https请求失败 1. NetManager初始化时可参考如下设置(因为我没 ...
随机推荐
- Spring Cloud之服务注册中心搭建Eureka Server服务注册中⼼
Spring Cloud并不与Spring MVC类似是一个开源框架,而是一组解决问题的规范(个人理解).解决哪些问题呢?如下: 1)服务管理:⾃动注册与发现.状态监管 2)服务负载均衡 3)熔断 4 ...
- Spring Boot自动配置SpringMVC(一)
实际上在关于Spring Boot自动配置原理实战的文章Spring Boot自动配置实战 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中,可以看到我们使用到了@ReqeusMappi ...
- 解决Chrome94之后非安全网站请求localhost报CORS问题
问题 自从谷歌浏览器升级到chrome94版本后,在非安全网站下通过请求本地接口就会出现以下错误: Access to XMLHttpRequest at 'http://127.0.0.1:1000 ...
- python3批量统计用户电脑配置
最近领导想统计一下用户电脑配置信息.好几百人难道让我一个一个的去弄吗? 想想还是写个程序接收一下吧. 客户端 # -*- coding: utf-8 -*- #author:Guoyabin impo ...
- 前端防抖,double click 克星
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 【计理01组04号】JDK基础入门
java.lang包 java.lang包装类 我们都知道 java 是一门面向对象的语言,类将方法和属性封装起来,这样就可以创建和处理相同方法和属性的对象了.但是 java 中的基本数据类型却不是面 ...
- ASP.NET Core 6框架揭秘实例演示[10]:Options基本编程模式
依赖注入使我们可以将依赖的功能定义成服务,最终以一种松耦合的形式注入消费该功能的组件或者服务中.除了可以采用依赖注入的形式消费承载某种功能的服务,还可以采用相同的方式消费承载配置数据的Options对 ...
- [题解]UVA11027 Palindromic Permutation
链接:http://vjudge.net/problem/viewProblem.action?id=19602 描述:给出一个字符串,求重新排列后第n个回文串,若没有则输出"XXX&quo ...
- DHCPv4 Relay场景测试—信而泰网络测试仪实操
一.测试说明 本文主要介绍DHCPv4 Relay场景的测试仪配置方法以及需要注意的事项. DHCPv4 Relay原理: DHCP中继代理,就是在DHCP服务器和客户端之间转发DHCP数据包.当DH ...
- 【C# 基础概念】命名空间
命名空间 C#10 新功能==================== 命名空间格式:声明所有后续声明都是已声明的命名空间的成员: //C#10 命名空间的新写法,这种方式一个文件只能有一个命名空间. / ...