在映射器中配置获取记录主键值
在xml中 insert 标签中定义 :
useGeneratedKeys为true,用来设置返回主键id的值,keyProperty 代表数据库记录主键字段keyColumn 代表 java对象成员属性名 <!-- 插入数据:返回记录主键id值 --> <insert id="insert" useGeneratedKeys="true" keyProperty="id" keyColumn="id"> insert into t_user (name,age) values (#{name},#{age}) </insert>在接口映射器中通过注解@Options分别设置参数useGeneratedKeys,keyProperty,keyColumn值 如下
// 返回主键字段id值 @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") @Insert("insert into t_user (name,age) values (#{name},#{age})") void insert(Student stu);调用 BaseMapper 的 insert方法后 ,默认将自增主键封装在 插入对象中
在MyBatis中,允许设置名称为“useGeneratedKeys”参数存在3个位置如下:
在settings元素中设置useGeneratedKeys参数在xml映射器中设置useGeneratedKeys参数在接口映射器中设置useGeneratedKeys参数对于支持自动生成记录主键的数据库,如:MySQL,SQL Server,此时设置useGeneratedKeys参数值为true,在执行添加记录之后可以获取到数据库自动生成的主键ID。
使用useGeneratedKeys生成主键时,不能在DAO层使用@Param注解传递参数,否则无法获取主键。
///Dao层对应的代码 不能使用 @Param注解传递参数 /// Long savNewUser(@Param("user") User user); Long savNewUser( User user); ///Mapper对应的映射层 <insert id="add" useGeneratedKeys="true" keyProperty="id"> insert into t_user(u_name,u_age) VALUES (#{user.userName},#{user.userAget}) </insert> 早起的年轻人 认证博客专家 移动开发 项目管理 Java 只要用心去做,每一件事情还是有可能成功的,当然成功是没有界限的,只不过是达到自己心里的那个目标,公众号:我的大前端生涯,一个爱喝茶的程序员,通常会搞搞SpringBoot 、Herbinate、Mybatiys、Android、iOS、Flutter、Vue、小程序等.