首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在MyBatis中执行update时有没有办法返回主键或实体

在MyBatis中执行update操作时,可以通过一些方式返回主键或实体。

  1. 使用数据库的自增主键:如果数据库表中的主键是自增的,可以在执行update操作后,通过获取数据库生成的主键值来返回主键或实体。在MyBatis的映射文件中,可以使用useGeneratedKeyskeyProperty属性来实现该功能。例如:
代码语言:txt
复制
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>

在上述示例中,useGeneratedKeys="true"表示使用数据库的自增主键,keyProperty="id"表示将生成的主键值赋给id属性。

  1. 使用数据库的触发器:如果数据库表中没有自增主键,可以通过数据库的触发器来实现返回主键或实体。在执行update操作后,触发器可以在数据库层面将主键值返回给MyBatis。这种方式需要在数据库中创建相应的触发器来实现。
  2. 使用数据库的返回结果集:在执行update操作后,可以通过设置MyBatis的useGeneratedKeys属性为false,然后在映射文件中使用selectKey元素来查询刚刚插入或更新的数据,从而返回主键或实体。例如:
代码语言:txt
复制
<insert id="insertUser" parameterType="User" useGeneratedKeys="false">
    INSERT INTO user (username, password) VALUES (#{username}, #{password})
    <selectKey resultType="Integer" keyProperty="id" order="AFTER">
        SELECT LAST_INSERT_ID()
    </selectKey>
</insert>

在上述示例中,useGeneratedKeys="false"表示不使用数据库的自增主键,selectKey元素中的SELECT LAST_INSERT_ID()语句用于查询刚刚插入的数据的主键值,并将其赋给id属性。

需要注意的是,以上方法的适用性取决于数据库的支持和配置。此外,MyBatis还提供了其他一些高级特性和插件,可以根据具体需求进行扩展和定制。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MyBatis知识点

映射器 #{}和${}的区别 模糊查询like语句该怎么写 在mapper中如何传递多个参数 Mybatis如何执行批量操作 如何获取生成的主键 当实体类中的属性名和表中的字段名不一样 ,怎么办 Mapper...SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。...ReuseExecutor:执行update或select,以sql作为key查找Statement对象,存在就使用,不存在就创建,用完后,不关闭Statement对象,而是放置于Map主键,那么应当parameterType 应当是java实体或者Map。 这样数据在插入之后 可以通过Java实体或者Map 来获取主键值。...在Mybatis中,每一个、、update>、标签,都会被解析为一个MappedStatement对象。

1.6K20

MyBatis面试题(2020最新版)

映射器 #{}和${}的区别 模糊查询like语句该怎么写 在mapper中如何传递多个参数 Mybatis如何执行批量操作 如何获取生成的主键 当实体类中的属性名和表中的字段名不一样 ,怎么办 Mapper...SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。...如果想要访问主键,那么应当parameterType 应当是java实体或者Map。这样数据在插入之后 可以通过ava实体或者Map 来获取主键值。...扩展 如果Mysql 使用selectKey的方式获取主键,需要注意下面两点: order : AFTER 获取递增主键值 :SELECT LAST_INSERT_ID() 当实体类中的属性名和表中的字段名不一样...在Mybatis中,每一个、、update>、标签,都会被解析为一个MappedStatement对象。

72210
  • MyBatis面试题(2020最新版)

    映射器 #{}和${}的区别 模糊查询like语句该怎么写 在mapper中如何传递多个参数 Mybatis如何执行批量操作 如何获取生成的主键 当实体类中的属性名和表中的字段名不一样 ,怎么办 Mapper...SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。...如果想要访问主键,那么应当parameterType 应当是java实体或者Map。这样数据在插入之后 可以通过ava实体或者Map 来获取主键值。...扩展 如果Mysql 使用selectKey的方式获取主键,需要注意下面两点: order : AFTER 获取递增主键值 :SELECT LAST_INSERT_ID() 当实体类中的属性名和表中的字段名不一样...在Mybatis中,每一个、、update>、标签,都会被解析为一个MappedStatement对象。

    4.2K71

    MyBatis基础入门

    持久化与ORM技术 1.1 持久化 在软件开发过程中,我们经常要把程序内存中的数据存放到磁盘(或数据库),或者把磁盘(或数据库)的数据加载到内存。...参数名}”的方式声明,而参数类型需要通过select元素的parameterType来声明 3)select元素通过resultType来声明返回类型(实体对象) 2.3 创建MyBatis数据库会话(...2)SqlSessionFactory对象:一旦被创建,应该在你的应用执行期间都存在。没有理由释放或重新创建它。...实现主键自增长         在许多数据库管理系统中(如MySQL和SQL Server),可以把在建表时把主键定义为自增长的整数,插入数据时不需要提供该主键,由数据库维护其自增长逻辑。...MyBatis查询配置中的元素可以自动实现该自增长主键获取功能,不需要额外的查询,在插入成功后自动的为实体对象(参数)赋值新的主键值。

    40330

    Mybatis-Plus使用案例(包括初始化以及常用插件)

    官网: https://mybatis.plus/ 或 https://mp.baomidou.com/ 1、特性 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence...此属性在 MyBatis 中原默认值为 false,在 MyBatis-Plus 中默认开启 如果数据库命名符合规则无需使用 @TableField 注解指定数据库字段名 #关闭自动驼峰映射,该参数不能和...全局默认主键类型,设置后,即可省略实体对象中的@TableId(type = IdType.AUTO)配置。...Sequence 在mysql中,主键往往是自增长的,这样使用起来是比较方便的,如果使用的是Oracle数据库,那么就不能使用自增 长了,就得使用Sequence 序列生成id值了。...在MP中提供了这样的功能,可以实现自动填充。 1、添加@TableField注解 为password添加自动填充功能,在新增数据时有效。

    1.1K40

    SpringBoot整合MyBatis-Plus实现分页,代码生成,锁等实例

    Mybatis-Plus是一款专门针对于传统MyBatis开发中sql需要手动进行映射配置繁琐缺点的一款框架技术,这款框架技术提供了十分丰富的api供开发者们使用,在 MyBatis 的基础上只做增强不做改变...Mybatis-Plus是一个Mybatis的增强工具,只是在Mybatis的基础上做了增强却不做改变,MyBatis-Plus支持所有Mybatis原生的特性,所以引入Mybatis-Plus不会对现有的...14、默认将实体类的类名查找数据库中的表,使用@TableName(value="table1")注解指定表名,@TableId指定表主键,若字段与表中字段名保持一致可不加注解。.../100700365   想要查看执行的 sql 语句,可以在 yml 文件中添加配置信息,如下。...根据 updateWrapper 条件修改实体对象 注: update 中的 entity 为 set 条件,可以为 null。

    1.7K20

    Data Access 之 MyBatis Plus(一)- BaseMapper CRUD(Part B)

    Plus提供了两个分页查询的方法,两个方法中都有一个Wrapper 参数,Warpper是MP中的条件构造器,在 Data Access 之 MyBatis Plus(二)- Wrapper...、判断是否有上一页或下一页以及总页数总记录数等方法 图片 在TeslaMapperTest中增加分页测试方法 @Test public void selectPage(){ Page<Tesla...图片 根据输出的结果可以确定,selectMapsPage方法返回的是Map类型的数据,而selectPage返回的是封装好的实体类对象。...批量删除) * * @param idList 主键ID列表或实体列表(不能为 null 以及 empty) */ int deleteBatchIds(@Param(Constants.COLLECTION...id的效果是相同的 执行deleteByMap方法 Map中设置了SQL语句中WHERE子句后面的条件,可以根据设置的条件执行删除,这个条件的Key一定要是数据库中的字段 执行deleteByBachIds

    44410

    MyBatis面试题总结「建议收藏」

    1.6 怎么解决实体类中的属性名和表中的字段名不一样的问题? 1.7 如何在mapper中传递多个参数? 1.8 MyBatis的接口绑定有哪些实现方式?...(2)MyBatis 可以使用 XML 或注解来配置和映射原生信息,将 POJO映射成数据库中的记录,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。...(3)通过xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql...–用result属性来映射非主键字段,property为实体类属性名,column为数据表中的属性–> ...在Mybatis配置文件中,可以指定默认的ExecutorType执行器类型,也可以手动给DefaultSqlSessionFactory的创建SqlSession的方法传递ExecutorType类型参数

    72320

    Data Access 之 MyBatis(三) - SQL Mapping XML(Part A)

    keyProperty (仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey...keyColumn (仅适用于 insert 和 update)设置生成键值在表中的列名,在某些数据库(像 PostgreSQL)中,当主键列不是表中的第一列的时候,是必须设置的。...获取自增主键的值 数据存储在支持自增主键的数据库中,如何获取数据插入成功后数据库生成的主键值?...图片 数据库中显示成功插入数据库 图片 但是获取到的主键值为null,MyBatis是如何获取自增主键的值的?...如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 中的语句 - 这和 Oracle 数据库的行为相似,在插入语句内部可能有嵌入索引调用。

    84410

    后端技术:MyBatis 知识点整理,值得收藏!

    在 mapper 中如何传递多个参数? Mybatis 动态 sql 有什么用?执行原理?有哪些动态 sql?...通过 xml 文件或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中 sql 的动态参数进行映射生成最终执行的 sql 语句,最 后由 mybatis...–用 result 属性来映射非主键字段,property 为实体类属性名,column 为数据表中的属性–> 在 Mybatis 中,每一个 、、update>、标签,都会被解析为一个MapperStatement 对象。...insert 方法总是返回一个 int 值 ,这个值代表的是插入的行数。 如果采用自增长策略,自动生成的键值在 insert 方法执行完后可以被设置到传入 的参数对象中。

    1.1K10

    mybatis框架Mapper配置详解

    1.mapper下标签一览 标签名称 标签作用 insert 用来映射插入语句 update 用来映射更新语句 delete 用来映射删除语句 select 用来映射查询语句 resultMap 用来将从数据库结果集取出的数据映射到相应的实体对象的字段中..." //是否清除二级缓存 ,二级缓存就是mapper配置下的缓存区域,所有标签共享 userCache="true" //执行结果是否保存到二级缓存 timeout="1000" // 在抛出异常前,驱动程序等待数据库回应的最大秒数..., 可配置为STATEMENT,PREPARED或CALLABLE中的一个, 表示Statement,PreparedStatement或 CallableStatement类型...默认值为false keyProperty="" //代表主键。mybatis会生成主键赋给这个列。...联合主键用逗号隔开 keyColumn="" //进队特定数据库生效,当主键列不是表中的第一列时,需要设置该属性。

    73320

    【为高效开发而生】MyBatisPlus破冰行动

    ,我们经常遇到以上的问题,即实体类所对应的表都有固定的前缀,例如t_或tbl_ 此时,可以使用MyBatis-Plus提供的全局配置,为实体类所对应的表名设置默认的前缀,那么就不需要在每个实体类上通过@...@TableId中的value值在实体类中的字段和表结构的字段一致的情况下我们不用添加,但如果不一致,@TableId中的value我们需要设置表结构中的主键字段。...当然配置主键自增得在表结构中的字段要设置自动增长才行 3....@TableField   @TableField注解的作用是当实体类中的属性和表结构中的字段名称不一致的情况下来设置对应关系的,当然,在MyBatis-Plus中针对实体中是userName而表结构中是...deleteById方法,但是真实执行的是Update方法,实现了逻辑删除的场景。

    61360

    来自面试官的技术面试题

    通过继承 Thread 类、实现Runnable 接口,在run方法中实现功能或业务逻辑。 2、线程中start和run方法有什么区别和联系?...死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外界作用下,它们都将无法进行下去。...; 而 ${} 则只是简单的字符串拼接,在动态解析阶段就直接拼接成了 最终的sql 语句: select * from user where name = 'xcbeyond'; 2、当实体类中的属性名和表中的字段名不一样...–用result属性来映射非主键字段,property为实体类属性名,column为数据表中的属性–> <result property = “orderno” column =”order_no...使用索引时的优缺点如下: 优点: 可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性 建立索引可以大大提高检索的数据,以及减少表的检索行数 在表连接的连接条件 可以加速表与表直接的相连

    42020

    一文带你快速学会SpringBoot工程下MaBatis对数据的增删改查功能!

    一、环境准备 创建SpringBoot工程,数据库表 tb_user,实体类User,以及引入Mybatis相关依赖(创建springboot工程时已经引入),配置Mybatis(数据库连接信息),这些工作我们在...直接刷新或再次查询一下 tb_user表,发现成功删除 id为4的用户数据。 注1:该删除方法也可以有返回值,其返回值为此次操作影响的记录数。只不过这里我们用了 void定义后无返回值。...3、预编译SQL 3.1 配置日志 在application.properties中,配置mybatis的日志,并指定输出到控制台。...userMapper.insert(user); } 运行后控制台输出的结果如下 返回数据库查询 tb_user表,发现新增用户成功 3、主键返回功能实现 3.1 背景 在数据添加成功后...1.3 注意事项 1、实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装。 2、如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装。

    42921
    领券