【MyBatis】——自增主键与非自增主键返回

原创 2016年05月31日 15:22:50

             mysql自增主键,执行insert提交之前自动生成一个自增主键。当时一直没有想为什么要返回主键,也就是返回就返回了吧,总是有用的,确实,返回来有可能会作为下一次查询的依据,或者下一个插入的外键的凭证,总之,先返回来再说……

             实现思想是酱紫的:通过mysql函数获取到刚插入记录的自增主键:LAST_INSERT_ID(),但是是在insert之后调用此函数。

 

             mybatis中,只有添加用户会涉及到返回主键,这里会有两种主键,一种是int型在数据库设置为自增,一种是uuid的形式。

<insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
	 	<!-- 将插入数据的主键返回,返回到user对象中
	 		SELECT LAST_INSERT_ID():得到刚insert进去记录的主键值,只适用于自增主键
	 		keyProperty:将查询到主键值设置到parameterType指定的对象的那个
	 		resultType:指定SELECT LAST_INSERT_ID()的结果类型
	 	 -->
	 	<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
	 		SELECT LAST_INSERT_ID()	
	 	</selectKey>
	 	 	
	 	insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address});
 </insert>

             自增主键方式执行过程是首先将记录插入数据库,前提是数据库已经设置了id是自动递增的,之后通过mysql函数得到刚insert进去记录的主键。


             而另外一种方式uuid的形式是与自增逐渐的执行过程是相反的,它的执行过程是:首先通过uuid()得到主键,然后将主键设置到user对象的id属性中,之后在insert执行时,再从user对象中取出id属性值。

 <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
	 	 <!-- 
	 		使用mysql的uuid()生成主键
	 		执行过程:首先通过uuid()得到主键,将主键设置到user对象的id属性中
	 		其次,在insert执行时,从user对象中取出id属性值
	 	 -->
	 	 <selectKey keyProperty="id" order="AFTER" resultType="java.lang.String">
	 		SELECT uuid()	
	 	</selectKey>
	 	
	 	insert into user(username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address});
</insert>

             这种方式就是所谓的非自增主键返回,需要修改表中id的字段类型为string

 

             二者除了执行过程相反之外,还有一点不同就是:自增主键中的insert sql语句主键自动生成,在insert语句中不需要写id字段,在非自增主键时,insert语句需要写id字段。


             mysql中是这样实现的,那么在oracle中使用不同的函数和order标识,如下:

 <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
	<selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
			SELECT 序列名.nextval()
	</selectKey>
	insert into user(id,username,birthday,sex,address) value(#{id},#{username},#{birthday},#{sex},#{address})
 </insert>



版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

MyBatis操作mysql配置和获取插入记录的自增主键

MyBatis操作mysql配置和获取插入记录的自增主键 我们知道MySql中主键可以设成auto_increment,也就是自增主键,每当新增一条记录,主键值自动加1。 在MyBatis中,执行in...

mybatis 自增主键配置

mybatis自增主键配置(?) mybatis进行插入操作时,如果表的主键是自增的,针对不同的数据库相应的操作也不同。基本上经常会遇到的就是 Oracle Sequece 和 Mysql ...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

mybatis 自增主键配置

mybatis自增主键配置(?) mybatis进行插入操作时,如果表的主键是自增的,针对不同的数据库相应的操作也不同。基本上经常会遇到的就是 Oracle Sequece 和 Mysql 自增主...

MyBatis获取自增长主键值的两种方式及源码浅析

昨天在做项目的时候遇到了一个坑,没错,就是获取MyBatis自增长主键值的坑。因为之前一直用ibatis,所以惯性的用了ibatis的写法,结果返回的值一直是1(受影响的行数)。于是去翻了翻MyBat...
  • zknxx
  • zknxx
  • 2016-12-10 18:43
  • 2484

Mybatis添加功能时获取mysql自增主键和非自增主键的返回值

Mybatis获取mysql自增主键的获取 User.xml <!-- keyProperty:将查询出的主键设置到para

consul怎么在windows下安装

去官网下载:https://www.consul.io/downloads.html 解压: 设置环境变量:计算机 右键 属性 高级属性设置环境变量设置在path下加上:E:\programf...
  • forezp
  • forezp
  • 2017-04-15 23:37
  • 4729

史上最简单的 SpringCloud 教程 | 终章

错过了这一篇,你可能再也学不会 Spring Cloud 了!Spring Boot做为下一代 web 框架,Spring Cloud 作为最新最火的微服务的翘楚,你还有什么理由拒绝。赶快上船吧,老船...
  • forezp
  • forezp
  • 2017-04-12 23:14
  • 68482

史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)

在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用(RPC)。为了保证其高可用,单个服务又必须集群部署。由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务...
  • forezp
  • forezp
  • 2017-04-09 21:14
  • 28255

Spring Cloud中,Eureka常见问题总结

Spring Cloud中,Eureka常见问题总结。 指定Eureka的Environment 1 eureka.environment: 指定环境 ...
  • lc0817
  • lc0817
  • 2017-01-12 10:41
  • 8721

SpringBoot入门系列:第六篇 mybatis

这一篇,代码折腾的时间较长,完成之后都是一些小细节,主要有三: 1、引入的依赖错误; 2、启动配置错误; 3、xml文件的mapper命名空间错误。 一、完整的pom.xml <project xm...
  • lxhjh
  • lxhjh
  • 2016-06-26 22:06
  • 10977
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)