本节主要内容
1:自增主键返回(主讲)
2:uuid类型主键返回
3:主键返回值序列(oracle的)
4:延伸-自增长主键怎么返回当前id的下一个?
5:总结&下节预告
本文是《凯哥陪你学系列-框架学习之mybatis框架学习》中第7篇 mybatis入门程序之插入数据库后返回主键
声明:本文系凯哥原创。转载请注明出处
一:自增主键返回(主讲)
1.1:未插入前先查询数据库,当前最大的主键id是多少:
可以看到是28
1.2:先看mapper.xml文件修改
1.3:测试代码:
1.4:查看sql日志:
我们可以看到最新插入数据的id是29.说明已经返回最新插入数据的id
1.5:详细分析
说明:
selectKey:查询主键,在标签内需要输入查询主键的sql
keyProperty:主键对应的列表(对象属性名)。在本案例中就是id
resultType:返回主键的类型。本案例是自增长型的int类型
order:指定擦还行主键的sql和insert语句的执行顺序,相对于insert语句来说的。
我们是获取插入后的主键id,所以order的值就是after
LAST_INSERT_ID:该函数是mysql的函数,获取自增主键的id.该函数必须配合
inster语句一起使用。否则无效
mapper.xml具体代码:
<!-- 全字段插入数据,带有返回主键的 -->
<insert id="insertUser" parameterType="com.kaigejava.mybatis.pojo.User">
<!-- selectKey:查询主键,在标签内需要输入查询主键的sql -->
<!-- order:指定查询主键的sql和insert语句的执行顺序,相当于insert语句来说 -->
<!-- LAST_INSERT_ID:该函数是mysql的函数,获取自增主键的ID,它必须配合insert语句一起使用 -->
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO USER (username,birthday,sex,address)
VALUES(#{username},#{birthday},#{sex},#{address})
</insert>
二:uuid类型主键返回
直接上图
说明:
resultType:uuid是String类型的。所以这里是uuid的
order:除了自增类型的以外,其他的都是before的
UUID():mysql函数的
注意:
使用uuid作为主键的时候,id必须要显示插入
三:主键返回值序列(oracle的)
说明:
如果是Oracle数据库的时候,UUID作为主键就不能使用UUID()这个函数了。需要使用
seq.nextval from dual 这个语句。
四:延伸-自增长主键怎么返回当前id的下一个?
先看执行结果:
在看mapper.xml文件:
不做过多解释。
五:总结&下节预告
通过本节学习我们需要掌握的:
1:不同类型的主键,怎么返回?
2:自增类型主键id的两种返回方式
入门程序小结
-
l #{}和${}
-
#{}表示占位符?,#{}接收简单类型的参数时,里面的名称可以任意
-
${}表示拼接符,${}接收简单类型的参数时,里面的名称必须是value
-
${}里面的值会原样输出,不加解析(如果该参数值是字符串,有不会添加引号)
-
${}存在sql注入的风险,但是有些场景下必须使用,比如排序后面会动态传入排序的列名
-
l parameterType和resultType
-
parameterType指定输入参数的java类型,parameterType只有一个,也就是说入参只有一个。
-
resultType指定输出结果的java类型(是单条记录的java类型)
-
l selectOne和selectList
-
selectOne查询单个对象
-
selectList查询集合对象