mybatis insert新增语句

1.生成主键id并返回
	<insert id="saveProduct" parameterType="java.util.HashMap" useGeneratedKeys="true" keyProperty="goods_id" >
		INSERT INTO t_product(store_id,name,
				goods_code,is_poss,is_prod_presell,platform_classify,
				platform_prop,store_classify,store_prop,product_HTML,is_quick_end,
				customer_service_HTML,status,
				create_time,creater,product_sales,is_up,keywords,product_info)
		VALUES
			(#{store_id},#{name},#{goods_code},#{is_poss},
			#{is_prod_presell},#{platform_classify},
			#{platform_prop},#{store_classify},#{store_prop},
			#{product_html},#{is_quick_end},#{customer_service_HTML},1,now(),
			#{user_id},#{product_sales},0,#{key_words},#{product_info});
	</insert>


useGeneratedKeys="true" keyProperty="goods_id" 语句来实现,在传入的map中即可取到
mybatis api:



  平时会经常遇到多个表的插入操作,多个表之间的关系,另一个表中的一个字段要以第一个表的主键作为外键。

下面说两种方法,MyBatis+MySQL 返回插入记录的主键ID:

第一种:

<insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User">
	insert into user(userName,password,comment)
	values(#{userName},#{password},#{comment})
</insert>
第二种:
<insert id="insert" parameterType="cn.***.beans.LogObject" >
	<selectKey resultType="java.lang.Integer" order="BEFORE" keyProperty="id">
		SELECT LOGS_SEQ.nextval AS ID FROM DUAL
	</selectKey>
	INSERT INTO S_T_LOGS (
		ID, 
		USER_ID, 
		USER_NAME, 
		USER_IP, 
		OPERATION_TIME,
 		DESCRIPTION, 
		RESOURCE_ID) 
	VALUES (
		#{id}, 
		#{userId}, 
		#{userName}, 
		#{userIp}, 
		#{operationTime},
 		#{description}, 
		#{resourceId})
</insert>
这两种写法都可以,但有两点一定要注意:

一: keyProperty="id" 这个id必须是实体的id,而不是数据表的主键id,否则,得不到正确的返回结果;

二:接收返回值时候,必须用实体的get属性,而不能定义变量,否则,接收不到正确的返回结果:即必须用user.getId()来接收。



 
useGeneratedKeys 要求数据库本身具备主键自动增长的功能,比如说,mysql,sqlserver可以使用useGeneratedKeys =true 这功能,不支持主键自动增长的数据库是不能使用useGeneratedKeys =true的
这个样做是不对的, 用selectKey子节点来做,oracle不支持useGeneratedKeys

 
 
 
 
 
 




  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值