Mybatis 如何获取自动生成的(主)键值?(面试题)

一.主键生成方式

① 支持主键自增,例如 MySQL数据库,SQL Server

② 不支持主键自增,例如 Oracle数据库

二.获取主键自增数据

  • useGeneratedKeys:启动主键生成策略
  • keyProperty:设置存储属性值

若数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),则可以设置 useGeneratedKeys = "true",然后再把 keyProperty 设置到目标属性上。如:

<insert id="addEmployee" useGeneratedKeys="true" keyProperty="id">
    输入添加的sql语句即可,然后就 可以获取自动生成的主键值
</insert>

拓展点:

三.获取数据库受影响行数

  • 直接将接口中方法的返回值 设置为 int 或 boolean 即可
    • int :代表受影响行数
    • boolean
      • true:表示对数据库有影响
      • false:表示对数据库无影响
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在MyBatis中,可以通过两种方式获取自动生成主键值: 1. 在Mapper.xml文件中使用<selectKey>标签,该标签可以在执行插入语句之前或之后执行一个查询语句,获取自动生成主键值。例如: ``` <insert id="insertUser" parameterType="User"> <selectKey keyProperty="id" order="AFTER" resultType="int"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO user(name, age) VALUES(#{name}, #{age}) </insert> ``` 在这个例子中,<selectKey>标签在插入语句之后执行一个查询语句,获取自动生成主键值,并将其设置到User对象的id属性中。 2. 在Mapper接口中使用@Options注解,该注解可以在执行插入语句之后获取自动生成主键值。例如: ``` @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})") @Options(useGeneratedKeys = true, keyProperty = "id") int insertUser(User user); ``` 在这个例子中,@Options注解的useGeneratedKeys属性设置为true,表示要获取自动生成主键值;keyProperty属性指定了主键值要设置到User对象的哪个属性中。 ### 回答2: MyBatis是一个开源的持久层框架,它提供了一种灵活的映射器方式来将数据库表映射成为Java对象。MyBatis支持自动生成主键值,可以通过以下两种方式来获取自动生成主键值: 1. 在Mapper.xml中使用selectKey元素 selectKey元素是用来自动生成主键值的,可以在Mapper.xml文件中通过以下方式定义: ``` <insert id="insertUser" parameterType="User"> <selectKey keyProperty="id" resultType="int" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO user (username,password) VALUES (#{username},#{password}) </insert> ``` 其中,keyProperty属性指定了从数据库获取到的主键值要映射到Java对象的哪个属性上,resultType属性指定了主键值的数据类型,order属性指定了selectKey元素执行顺序。在执行insert语句之前,会先执行selectKey语句获取自动生成主键值,并将值设置到User对象的id属性中。 2. 在Java代码中使用@Options注解 @Options注解是MyBatis提供的另一种获取自动生成主键值的方式,可以在Mapper接口的方法上使用@Options注解来启用自动生成主键值的功能,示例如下: ``` @Insert("INSERT INTO user (username,password) VALUES (#{username},#{password})") @Options(useGeneratedKeys = true, keyProperty = "id") int insertUser(User user); ``` 其中,useGeneratedKeys属性指定了是否启用自动生成主键值的功能,keyProperty属性指定了从数据库获取到的主键值要映射到Java对象的哪个属性上。在执行insertUser方法后,将会自动获取自动生成主键值,并将值设置到User对象的id属性中。 总之,MyBatis提供了多种获取自动生成主键值的方式,可以根据具体的需求和实现方式选择相应的方法。 ### 回答3: MyBatis 是一种流行的 Java ORM 框架,它可以通过与数据库表的映射来实现数据的持久化。在使用 MyBatis 时,我们可以将传统的 SQL 语句与 Java 代码分离,通过 XML 配置文件或者注解来配置 SQL 和执行的逻辑。对于需要操作的记录,我们一般会指定一个唯一的主键,用来标识该记录的唯一性。MyBatis 可以自动为我们生成主键,但需要我们手动获取这个主键值。 MyBatis 提供了两种获取自动生成主键值的方式:在 SQL 语句中获取并返回主键值或者通过返回生成主键值的方法获取。其中,第一种方式要求数据库支持返回生成的主键值,例如 MySQL 中的 LAST_INSERT_ID() 函数。而第二种方式要求在映射文件中配置主键返回方式,并在对应的 INSERT 语句中添加 keyProperty 属性来告诉 MyBatis 生成的主键应该放在哪个对象的哪个属性中。 下面是在映射文件中配置获取自动生成主键值的步骤: 1. 配置主键生成方式:在映射文件的insert标签中添加如下配置: ``` <insert id="insertUser" keyProperty="id" useGeneratedKeys="true"> INSERT INTO user(name, age) VALUES(#{name}, #{age}) </insert> ``` 在这个配置中,keyProperty 属性用来指定主键应该存放在哪个 Java 对象的哪个属性中,useGeneratedKeys 属性用来告诉 MyBatis 是否使用自动生成主键。 2. 获取主键:在执行插入操作时,需要创建一个 Java 对象来保存插入的数据,然后调用 sqlSession 的 insert 方法来执行插入操作。执行完插入操作后,可以通过 getGeneratedKeys 方法来获取自动生成主键值。 ``` User user = new User(); user.setName("test"); user.setAge(18); sqlSession.insert("insertUser", user); // 获取自动生成主键值 Long id = user.getId(); ``` 在这个代码片段中,我们通过 insertUser 的入参 user 来将要插入的数据传递给 MyBatis,在插入完成后,通过 user.getId() 方法来获取自动生成主键值。 总结起来,获取自动生成主键值有两种方式:在 SQL 语句中获取并返回主键值或者通过返回生成主键值的方法获取。在 MyBatis 中,我们可以通过配置主键生成方式,来使得 MyBatis 能够自动为我们生成主键,并通过 getGeneratedKeys 方法获取自动生成主键值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值