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>
返回主键的数据在你传入的对象之中,
阅读更多
文章标签: mybatis
个人分类: java 数据库
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭