对Mapper 中几种update的区别说明
作者:万年精魄 时间:2023-05-19 04:39:44
这两个update都是使用generator生成的mapper.xml文件中,对dao层的更新操作
update
更新传回数据的所有字段,没有传回的字段保持原样。
updateByPrimaryKey
对实体类的字段全部更新(不判断是否为Null),即如果字段为空就更新为空;
updateByPrimaryKeySelective
会对实体类字段进行判断再更新(如果为Null就忽略更新),如果字段为空,忽略不更新;
补充知识:mapper中insert、update、delete、select、resultMap的用法
这里介绍mapper映射文件的配置, 这是mybatis的核心之一,一定要学好。
在mapper文件中,以mapper作为根节点,其下面可以配置的元素节点有: select, insert, update, delete, cache, cache-ref, resultMap, sql 。
先来看看 insert, update, delete 怎么配置, 能配置哪些元素吧:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<!-- mapper 为根元素节点, 一个namespace对应一个dao -->
<mapper namespace="com.dy.dao.UserDao">
<insert
<!-- 1. id (必须配置)
id是命名空间中的唯一标识符,可被用来代表这条语句。 一个命名空间(namespace) 对应一个dao接口,
这个id也应该对应dao里面的某个方法(相当于方法的实现),因此id 应该与方法名一致 -->
id="insertUser"
<!-- 2. parameterType (可选配置, 默认为mybatis自动选择处理)
将要传入语句的参数完全限定类名或别名,如果不配置,mybatis会通过ParameterHandler 根据参数类型默认选择合适的typeHandler进行处理
parameterType 主要指定参数类型,可以是int, short, long, string等类型,也可以是复杂类型(如对象) -->
parameterType="com.demo.User"
<!-- 3. flushCache (可选配置,默认配置为true)
将其设置为 true,任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,
默认值:true(对应插入、更新和删除语句) -->
flushCache="true"
<!-- 4. statementType (可选配置,默认配置为PREPARED)
STATEMENT,PREPARED 或 CALLABLE 的一个。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,默认值:PREPARED。 -->
statementType="PREPARED"
<!-- 5. keyProperty (可选配置, 默认为unset)
(仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey 子元素设置它的键值,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 -->
keyProperty=""
<!-- 6. keyColumn (可选配置)
(仅对 insert 和 update 有用)通过生成的键值设置表中的列名,这个设置仅在某些数据库(像 PostgreSQL)是必须的,当主键列不是表中的第一列的时候需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 -->
keyColumn=""
<!-- 7. useGeneratedKeys (可选配置, 默认为false)
(仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值:false。 -->
useGeneratedKeys="false"
<!-- 8. timeout (可选配置, 默认为unset, 依赖驱动)
这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为 unset(依赖驱动)。 -->
timeout="20">
<update
id="updateUser"
parameterType="com.demo.User"
flushCache="true"
statementType="PREPARED"
timeout="20">
<delete
id="deleteUser"
parameterType="com.demo.User"
flushCache="true"
statementType="PREPARED"
timeout="20">
</mapper>
来源:https://blog.csdn.net/qq_34638435/article/details/80826421
标签:Mapper,update区别
0
投稿
猜你喜欢
Java基础之static关键字的使用讲解
2023-10-06 01:26:25
Flutter 使用fluro的转场动画进行页面切换
2023-06-17 11:49:26
代码实例Java IO判断目录和文件是否存在
2023-04-23 02:00:12
C#导出文本内容到word文档的方法
2021-10-15 19:00:37
ShardingSphere解析SQL示例详解
2023-11-23 13:57:55
两分钟解决IntelliJ IDEA中文乱码问题(推荐)
2022-11-09 00:08:15
jsp如何获取Session中的值
2023-07-01 05:59:28
SpringCloud读取Nacos配置中心报错及遇到的坑:Could not resolve placeholder ‘xxx’ in value ‘${xxx}
2022-12-26 04:41:02
C# TextBox控件实现只能输入数字的方法
2022-03-07 01:57:27
C#中4种深拷贝方法介绍
2023-01-02 21:16:11
Java从同步容器到并发容器的操作过程
2021-10-14 05:26:58
使用mutex实现应用程序单实例运行代码分享
2023-09-18 22:45:11
浅谈String.split()遇到空字符串的几种情况
2021-11-24 00:18:38
Android rom解包打包工具
2023-09-01 21:49:10
Java基于Tcp的基础聊天功能实例
2023-11-25 05:26:56
Android技巧一之启动屏+新功能左右导航逻辑
2021-12-27 16:08:20
Java实现评论回复功能的完整步骤
2023-08-23 20:42:45
心动吗?正大光明的免费使用IntelliJ IDEA商业版
2023-11-25 04:29:48
浅谈利用Spring的AbstractRoutingDataSource解决多数据源的问题
2021-09-07 07:20:59
C#中隐式运行CMD命令行窗口的方法
2021-06-11 18:47:07