java插入oracle数据并返回主键,传入mybatis整个sql并执行

ps:如果想批量插入数据并返回主键请查看https://my.oschina.net/zudajun/blog/674946

需要修改mybatis源码。

1.传入写好的sql传入mybatis

mapper文件

<select id="createTempTable" parameterType="map" >
      ${sql}<!-- 注意这里是$而不是# -->
  </select>

mappers文件中的#{}语法与${}语法的区别:

默认情况下, #{}语法会促使MyBatis生成PreparedStatement属性并且使用PreparedStatement的参数(=?)来设置值。如果你想直接将未更改的字符串代入到sql中,可以使用${}。

也就是说,MyBatis看到 #{}会认为你在给sql中的变量赋值,就像JDBC编程中给问号赋值一样(比如MyBatis会判断它的类型,并自动在前后加单引号)。而当MyBatis看到${}的时候会直接将之替换成变量的值而不做任何处理。

所以在使用${}的时候,不需要像#{}一样写"jdbcType=VARCHAR"之类的属性。


在执行create table table_name as select 。。。的时候,select 的字段不能为null,否则报错,信息:ORA-01723: 不允许长度为 0 的列

2.单挑插入数据库并返回主键

<insert id="addUserListTest" parameterType="com.pay.phone.entity.SysUser">
  					        <!-- keyProperty的值,谁写在前边返回那个值,不能返回多个,不知如何返回 -->
	<selectKey resultType="string" order="AFTER" keyProperty="user_account,user_id">
		<!-- SELECT CONCAT(sys_user_id.currval,'') FROM DUAL -->
		<!--SELECT SYS_GUID() as user_id,SYS_GUID() as user_account FROM DUAL -->
		select max(to_number(user_id)) from SYS_USER
	</selectKey>
	INSERT INTO SYS_USER (USER_ID,USER_ACCOUNT,USER_PASSWORD,USER_STATE,CREATE_TIME,LAST_LOGIN_TIME,USER_REMARK,USER_THEME,USER_SCOPE)
	    SELECT <!-- CONCAT(sys_user_id.nextval,'') 		 USER_ID, -->
	    	   (select max(to_number(user_id))+1 from SYS_USER) USER_ID,
			   #{user_account     ,jdbcType=VARCHAR} USER_ACCOUNT,
		   #{user_password    ,jdbcType=VARCHAR} USER_PASSWORD,
		   #{user_state       ,jdbcType=VARCHAR} USER_STATE,
		   #{create_time      ,jdbcType=DATE   } CREATE_TIME,
		   #{last_login_time  ,jdbcType=DATE   } LAST_LOGIN_TIME,
		   #{user_remark      ,jdbcType=VARCHAR} USER_REMARK,
		   #{user_theme       ,jdbcType=VARCHAR} USER_THEME,
		   #{user_scope       ,jdbcType=VARCHAR} USER_SCOPE
		FROM DUAL
</insert>
返回主键的数据在你传入的对象之中,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值