SSM-Mybatis-映射器-insert

SSM-Mybatis-映射器-insert

insert语句配置:

属性描述备注
idSQL编号,用于标识这条SQL命名空间+id+databaseId唯一,否则Mybatis会抛出异常
parameterType将会传入这条语句的参数的类全限定名或别名。这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler)推断出具体传入语句的参数,默认值为未设置(unset)。默认值为未设置(unset)
parameterMap用于引用外部 parameterMap 的属性,目前已被废弃。请使用行内参数映射和 parameterType 属性。
flushCache是否刷新缓存,可以配置true/false,为true时,插入时会刷新一级和二级缓存,否则不刷新默认true
timeout超时时间,单位为秒
statementType可选 STATEMENT,PREPARED 或 CALLABLE。这会让 MyBatis 分别使用 Statement,PreparedStatement(预编译) 或 CallableStatement(存储过程)默认值:PREPARED
useGeneratedKeys(仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段)默认值:false
keyProperty(仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值默认值:未设置(unset)。如果生成列不止一个,可以用逗号分隔多个属性名称。
keyColumn(仅适用于 insert 和 update)设置生成键值在表中的列名,在某些数据库(像 PostgreSQL)中,当主键列不是表中的第一列的时候,是必须设置的。如果生成列不止一个,可以用逗号分隔多个属性名称。不能和keyProperty连用
databaseId如果配置了数据库厂商标识(databaseIdProvider),MyBatis 会加载所有不带 databaseId 或匹配当前 databaseId 的语句;如果带和不带的语句都有,则不带的会被忽略。

主键回填

​ JDBC中的Statement对象在执行插入的SQL后,可以通过getGeneratedKeys方法获取数据库生成的主键(需要数据库驱动支持),在insert语句中有一个属性开关useGeneratedKeys,用来控制是否开启这个功能,默认值false
​ 打开这个属性,还需要配置keyProperty或者keyColumn,告诉系统生成的主键放入哪个属性中,如果存在过个主键,就用逗号将他隔开

如:

<insert id="insertRole" parameterType="role"
      useGeneratedKeys="true" keyProperty="id" >
    insert into t_role(role_name,note) values(#{roleName},#{note})
</insert>

keyProperty代表将用哪个POJO的属性去匹配这个主键,这里是id,说明会用数据库生成的主键去赋值给这个POJO


自定义主键

​ selectKey元素支持自定义主键生成规则:

<insert id="”insertRole" parameterType="role">
    <selectKey keyProperty="id" resultType="long" order="BEFORE">
        select if(max(id))=null , 1, max(id)+3 ) from t_role
    </selectKey>
	insert into t_role(id,role_name,note) values(#{id},#{roleName},#{note})
</insert>

selestKey元素属性:

属性描述
keyPropertyselectKey 语句结果应该被设置到的目标属性。如果生成列不止一个,可以用逗号分隔多个属性名称。
keyColumn返回结果集中生成列属性的列名。如果生成列不止一个,可以用逗号分隔多个属性名称。
resultType结果的类型。通常 MyBatis 可以推断出来,但是为了更加准确,写上也不会有什么问题。MyBatis 允许将任何简单类型用作主键的类型,包括字符串。如果生成列不止一个,则可以使用包含期望属性的 Object 或 Map。
order可以设置为 BEFOREAFTER。如果设置为 BEFORE,那么它首先会生成主键,设置 keyProperty 再执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 中的语句 - 这和 Oracle 数据库的行为相似,在插入语句内部可能有嵌入索引调用。
statementType和前面一样,MyBatis 支持 STATEMENTPREPAREDCALLABLE 类型的映射语句,分别代表 Statement, PreparedStatementCallableStatement 类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值