框架学习系列 mybatis 第七篇 mybatis入门程序之插入数据库后返回主键

来源:互联网 发布:java声明银行账户类锁 编辑:程序博客网 时间:2024/06/06 03:32

本节主要内容

1:自增主键返回(主讲)

2:uuid类型主键返回

3:主键返回值序列(oracle的)

4:延伸-自增长主键怎么返回当前id的下一个?

5:总结&下节预告

本文是《凯哥陪你学系列-框架学习之mybatis框架学习》中第7篇 mybatis入门程序之插入数据库后返回主键

声明:本文系凯哥原创。转载请注明出处

一:自增主键返回(主讲)

1.1:未插入前先查询数据库,当前最大的主键id是多少:

框架学习系列 mybatis 第七篇 mybatis入门程序之插入数据库后返回主键

可以看到是28

1.2:先看mapper.xml文件修改

框架学习系列 mybatis 第七篇 mybatis入门程序之插入数据库后返回主键

1.3:测试代码:

框架学习系列 mybatis 第七篇 mybatis入门程序之插入数据库后返回主键

1.4:查看sql日志:

框架学习系列 mybatis 第七篇 mybatis入门程序之插入数据库后返回主键

我们可以看到最新插入数据的id是29.说明已经返回最新插入数据的id

1.5:详细分析

框架学习系列 mybatis 第七篇 mybatis入门程序之插入数据库后返回主键

说明:

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类型主键返回

直接上图

框架学习系列 mybatis 第七篇 mybatis入门程序之插入数据库后返回主键

说明:

resultType:uuid是String类型的。所以这里是uuid的

order:除了自增类型的以外,其他的都是before的

UUID():mysql函数的

注意:

使用uuid作为主键的时候,id必须要显示插入

三:主键返回值序列(oracle的)

框架学习系列 mybatis 第七篇 mybatis入门程序之插入数据库后返回主键

说明:

如果是Oracle数据库的时候,UUID作为主键就不能使用UUID()这个函数了。需要使用

seq.nextval from dual 这个语句。

四:延伸-自增长主键怎么返回当前id的下一个?

先看执行结果:

框架学习系列 mybatis 第七篇 mybatis入门程序之插入数据库后返回主键

在看mapper.xml文件:

框架学习系列 mybatis 第七篇 mybatis入门程序之插入数据库后返回主键

不做过多解释。

五:总结&下节预告

通过本节学习我们需要掌握的:

1:不同类型的主键,怎么返回?

2:自增类型主键id的两种返回方式

入门程序小结

  • l #{}和${}

  1. #{}表示占位符?,#{}接收简单类型的参数时,里面的名称可以任意

  2. ${}表示拼接符,${}接收简单类型的参数时,里面的名称必须是value

  3. ${}里面的值会原样输出,不加解析(如果该参数值是字符串,有不会添加引号)

  4. ${}存在sql注入的风险,但是有些场景下必须使用,比如排序后面会动态传入排序的列名

  • l parameterType和resultType

  1. parameterType指定输入参数的java类型,parameterType只有一个,也就是说入参只有一个。

  2. resultType指定输出结果的java类型(是单条记录的java类型)

  • l selectOne和selectList

  1. selectOne查询单个对象

  2. selectList查询集合对象

阅读全文
0 0
原创粉丝点击