首先有一张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的野路子的更多相关文章

  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. HashMap(1.7)源码学习

    一. 1.7 和1.8区别 数据结构: 1.7: 数组 + 链表 1.8 : 数组 + 链表 + 红黑树 put: 1.7: 头插法 1.8: 尾插法 hash计算: 1.7 : Objects.ha ...

  2. CentOS 7 部署 KVM 虚拟化

    文章目录 KVM的组件 KVM模块load进内存之后,系统的运行模式 部署KVM 基础配置 判断CPU是否支持硬件虚拟化 检测 kvm 模块是否装载 安装用户端工具 qemu-kvm 启动服务 查看网 ...

  3. 疑难杂症:运用 transform 导致文本模糊的现象探究

    在我们的页面中,经常会出现这样的问题,一块区域内的文本或者边框,在展示的时候,变得特别的模糊,如下(数据经过脱敏处理): 正常而言,应该是这样的: emmm,可能大图不是很明显,我们取一细节对比,就非 ...

  4. ServiceStack.Redis的源码分析(连接与连接池)

    前几天在生产环境上redis创建连接方面的故障,分析过程中对ServiceStack.Redis的连接创建和连接池机制有了进一步了解.问题分析结束后,通过此文系统的将学习到的知识点整理出来. 从连接池 ...

  5. 请求XSS攻击原理

    起因 巨人的肩膀 一个神秘URL酿大祸,差点让我背锅! (qq.com)

  6. java的不正确使用方法以及什么情况不能使用java

    一.Python3.6新特性 什么情况下不能运用 Java 泛型   1. 前语 Java 1.5 引入了泛型来保证类型安全,避免在运行时发作类型转换反常,让类型参数化,提高了代码的可读性和重用率.可 ...

  7. nacos配置中心文件(bootstrap.properties)不生效问题解决

    springcloud整合nacos作为配置中心时,配置文件不生效的问题 在这个问题处卡了一天多,在网上各种搜索.大多数解决方案都是在bootstrap.properties文件中配置nacos地址. ...

  8. Ansible-DevOps

    Ansible-DevOps Ansible 搭建 CentOS7 yum install epel-release yum search ansible yum install ansible -y ...

  9. 【axios三部曲】一、使用axios

    axios作为一个基于promise的网络请求库,它同时支持浏览器和node环境,是我们开发中常用的一个库 ​ 它的一些特性: 从浏览器发出XMLHttpRequests 从node.js发出http ...

  10. 快速安装与配置kubernetes集群搭

    Kubernetes是什么? 首先,它是一个全新的基于容器技术的分布式架构领先方案.这个方案尽然很新,但它是谷歌十几年以来大规模应用容器技术的经验积累和升华的一个重要成果.确切地说,kubernete ...