XML - insert

XML - insert


属性

属性描述
id命名空间中的唯一标识符,可被用来代表这条语句。
parameterType将要传入语句的参数的完全限定类名或别名。这个属性是可选的,因为 MyBatis 可以通过 TypeHandler 推断出具体传入语句的参数,默认值为 unset。
parameterMap这是引用外部 parameterMap 的已经被废弃的方法。使用内联参数映射和 parameterType 属性。
flushCache将其设置为 true,任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,默认值:true(对应插入、更新和删除语句)。
timeout这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为 unset(依赖驱动)。
statementTypeSTATEMENT,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)是必须的,当主键列不是表中的第一列的时候需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
databaseId如果配置了 databaseIdProvider,MyBatis 会加载所有的不带 databaseId 或匹配当前 databaseId 的语句;如果带或者不带的语句都有,则不带的会被忽略。

useGeneratedKeys

  • foreach + useGeneratedKeys 提示插入行数不对应
  • 错误示例
<insert id="insertList" parameterType="map" useGeneratedKeys="true" keyProperty="id" >
       insert into table (
            id,
			name        
       )values 
	   <foreach collection="list" item="m" open="(" close=")" separator=",">
           (#{m.id},
		   #{m.name})
       </foreach>
</insert>
  • 正确示例
<insert id="insertList" parameterType="map" useGeneratedKeys="true" keyProperty="id" >
       insert into table (
            id,
			name        
       )values 
	   <foreach collection="list" item="m" separator=",">
           (#{m.id},
		   #{m.name})
       </foreach>
</insert>
  • 错误原因
    • insert into table values ((a,b),(a1,b1)) 不符合语法格式
    • 将批量查询时使用foreach的用法直接照搬而没有考虑语法
  • 参考资料

DEMO

  • insert
<insert id="insertList" parameterType="map" useGeneratedKeys="true" keyProperty="id" >
       insert into table (
            id,
	     name        
       )values 
       (#{m.id},
        #{m.name})
</insert>
  • insert batch
<insert id="insertList" parameterType="map" useGeneratedKeys="true" keyProperty="id" >
       insert into table (
            id,
			name        
       )values 
	   <foreach collection="list" item="m" open="(" close=")" separator=",">
           (#{m.id},
		   #{m.name})
       </foreach>
</insert>
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值