面试题 关于SelectKey

本文详细介绍了MyBatis中的SelectKey标签,用于解决插入数据时主键生成的问题。讲解了如何配置使用SelectKey,以及注意事项,如order属性对MySQL的影响。并给出了创建项目、配置MyBatis、创建实体类、实现UserDao接口和测试的完整步骤,展示了如何在XML映射文件和接口中使用SelectKey。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?

注:这道题是京东面试官面试我时问的。

答:还有很多其他的标签,<resultMap><sql><include><selectKey>,加上动态sql9个标签trim|where|set|foreach|if|choose|when|otherwise|bind等,其中<sql>sql片段标签,通过<include>标签引入sql片段,<selectKey>为不支持自增的主键生成策略标签。

 

 

讲解:

在使用MyBatis做持久层时,insert语句默认是不返回记录的主键值,而是返回插入的记录条数;如果业务层需要得到记录的主键时,可以通过配置SelectKey的方式来完成这个功能。SelectKeyMybatis中是为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式。

 

selectKey Attributes

属性

描述

keyProperty

selectKey 语句结果应该被设置的目标属性。

resultType

结果的类型。MyBatis 通常可以算出来,但是写上也没有问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。

order

这可以被设置为 BEFORE AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。

statementType

和前面的相 同,MyBatis 支持 STATEMENT ,PREPARED CALLABLE 语句的映射类型,分别代表 PreparedStatement CallableStatement 类型。

 

 

SelectKey需要注意order属性,像MySQL一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。

 

步骤:

一:创建maven项目

Maven默认的Java版本是1.6,无法使用lambda表达式(1.8)和钻石运算符(1.7

 

代码片段:pom.xmlpom.xml中,添加mybatis依赖,mysql-jdbc依赖,把编译版本改为1.8
你问,为啥mybatis不会自动依赖mysql-jdbc,需要手动写明?答:因为mysql驱动是通过字符串动态加载的,这是一种“动态依赖”,Maven只能推导出“静态依赖”。“动态依赖”是一种更加灵活的依赖

 

 

<!--MyBatis核心jar-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值