首页
学习
活动
专区
工具
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:每执行一次updateselect,就开启一个Statement对象,用完立刻关闭Statement对象。...ReuseExecutor:执行updateselect,以sql作为key查找Statement对象,存在就使用,不存在就创建,用完后,不关闭Statement对象,而是放置于Map<String,...如果想要访问主键,那么应当parameterType 应当是java实体或者Map。 这样数据插入之后 可以通过Java实体或者Map 来获取主键值。...Mybatis,每一个、、、标签,都会被解析为一个MappedStatement对象。

1.6K20

MyBatis面试题(2020最新版)

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

70110

MyBatis面试题(2020最新版)

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

4.1K60

MyBatis基础入门

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

38130

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添加自动填充功能,新增数据时有效。

73640

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

39410

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.1K20

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

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

81610

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

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

68020

mybatis框架Mapper配置详解

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

70320

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

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

58760

来自面试官的技术面试题

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

39520

一文带你快速学会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、如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装。

29321

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券