对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
  • asp之家 软件编程 m.aspxhome.com