在Spring Boot项目中,useGeneratedKeys
是 MyBatis 框架中的一个参数,用于指定是否允许 JDBC 支持自动生成主键。这个参数可以在三个不同的位置设置:全局配置文件、XML 映射器和接口映射器。
-
全局配置文件 :可以在 MyBatis 的全局配置文件
mybatis-config.xml
中的<settings>
元素内设置useGeneratedKeys
参数。例如:xml<settings> <setting name="useGeneratedKeys" value="true"/> </settings>
这样设置后,所有接口映射器中的插入操作都会尝试获取自动生成的主键,但对 XML 映射器不起作用。
-
XML 映射器 :在具体的 XML 映射文件中,可以在
<insert>
标签中设置useGeneratedKeys
属性。例如:xml<insert id="addBigdataGroup" parameterType="BigdataGroup" useGeneratedKeys="true" keyProperty="groupId" keyColumn="group_id"> insert into bigdata_group (group_id, group_name, comment, business_line, create_by, remark, create_time) values(#{groupId}, #{groupName}, #{comment}, #{businessLine}, #{createBy}, #{remark}, sysdate()) </insert>
这里
keyProperty
指定了 Java 对象中的属性名,keyColumn
指定了数据库中的列名,这样在插入操作后,MyBatis 会将生成的主键值回填到对应的 Java 对象属性中。 -
接口映射器 :在接口映射器中,可以使用
@Options
注解来设置useGeneratedKeys
参数。例如:java@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") @Insert("insert into test(name,descr,url,create_time,update_time) values(#{name},#{descr},#{url},now(),now())") Integer insertOneTest(Test test);
在这里,
keyProperty
指定了 Java 对象中的属性,keyColumn
指定了数据库中的列名,useGeneratedKeys
设置为true
表示启用自动生成主键。
请注意,如果在接口映射器中设置了 useGeneratedKeys
参数,那么这个设置会覆盖全局配置文件中相同的设置。
如果在配置了 useGeneratedKeys
后,插入操作没有返回预期的主键值,可能是因为数据库驱动不支持自动生成主键,或者配置有误。确保数据库表配置了自动生成主键,并且 JDBC 驱动支持这一特性。