MyBatis 是一种优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射,MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集,MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通的 Java 对象)为数据库中的记录。
在 MyBatis 中,我们可以通过以下几种方式来返回自增主键:
1、使用 MyBatis 的内置功能
2、使用 JDBC 的 Statement.RETURN_GENERATED_KEYS
属性
3、使用 MyBatis 的 useGeneratedKeys
属性
4、使用 MyBatis 的 keyProperty
属性
下面我们详细介绍这四种方法:
方法一:使用 MyBatis 的内置功能
在 MyBatis 中,我们可以在插入数据时直接获取自动生成的主键值,具体操作如下:
1、在你的实体类中,为主键字段添加一个 @TableId
注解,并设置 type
为 IdType.AUTO
,
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; public class User { @TableId(type = IdType.AUTO) private Long id; // 其他字段 }
2、在你的 Mapper.xml 文件中,编写插入数据的 SQL 语句,并在最后添加 USE IDENTITY()
,
<mapper namespace="com.example.mapper.UserMapper"> <insert id="insertUser" parameterType="com.example.entity.User"> INSERT INTO user (username, password) VALUES ({username}, {password}) USE IDENTITY() </insert> </mapper>
这样,在插入数据后,MyBatis 会自动将自增主键值赋给实体类的主键字段。
方法二:使用 JDBC 的 Statement.RETURN_GENERATED_KEYS
属性
当我们需要返回多个自增主键值时,可以使用 JDBC 的 Statement.RETURN_GENERATED_KEYS
属性,具体操作如下:
1、在你的 JDBC 连接字符串中,添加 useGeneratedKeys=true&keyProperty=id
,
jdbcUrl=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true&useGeneratedKeys=true&keyProperty=id
2、在你的实体类中,为主键字段添加一个 @TableId
注解,并设置 type
为 IdType.IDENTITY
,
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; public class User { @TableId(type = IdType.IDENTITY) private Long id; // 其他字段 }
3、在你的 Service 或者 Controller 中,执行插入数据的 SQL 语句,
@Autowired private UserMapper userMapper; public void insertUser(User user) throws SQLException { userMapper.insertUser(user); }
当插入数据成功后,JDBC Connection 将返回一个包含所有生成的主键值的结果集,你可以从结果集中获取这些值,并将其赋给实体类的主键字段,需要注意的是,这种方法只适用于返回一个自增主键值的情况,如果需要返回多个自增主键值,可以使用其他方法。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/249474.html