🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式。 ## 1. SelectKey标签属性: ### 1.1 keyProperty selectKey 语句结果应该被设置的目标属性 ### 1.2 resultType 结果的类型。MyBatis 通常可以算出来,但是写上也没有问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。 ### 1.3 order 1. 这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用 2. SelectKey需要注意order属性,像Mysql一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。像Oracle这样取序列的情况,需要设置为before,否则会报错。 ### 1.4 statementType MyBatis 支持 STATEMENT ,PREPARED 和CALLABLE 语句的映射类型,分别代表 PreparedStatement 和CallableStatement 类型。 ## 2. 应用 场景:两张表,A 含有B的唯一id ,想向B中插入一张表,必须向A中插入B的id(自增的) ### 2.1 mapper 在insert前加入: ~~~ <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> ~~~ 通过LAST_INSERT_ID() 获得刚插入的自动增长的id的值,并以Integer返回 ~~~ <insert id="insert" parameterType="com.zimug.imooc.persistence.common.model.MoocBook"> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT LAST_INSERT_ID() </selectKey> insert into mooc_book (id, book_name, brief, doc_id, course_id, create_time, creator, is_del) values (#{id,jdbcType=INTEGER}, #{bookName,jdbcType=VARCHAR}, #{brief,jdbcType=VARCHAR}, #{docId,jdbcType=INTEGER}, #{courseId,jdbcType=INTEGER}, #{createTime,jdbcType=TIMESTAMP}, #{creator,jdbcType=VARCHAR}, #{isDel,jdbcType=INTEGER}) </insert> ~~~ ### 2.2 java ~~~ # 1. 将moocBookClassify对象实体插入数据库,然后数据库为数据自动分配自动id moocBookMapper.insert(moocBookClassify); //插入专辑 # 2. 将moocBookClassify对象的id字段被自动复制了自增id moocBookClassify.getId() ~~~