135. Spring Boot MyBatis升级篇-注解-自增ID

Posted SpringBoot

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了135. Spring Boot MyBatis升级篇-注解-自增ID相关的知识,希望对你有一定的参考价值。

需求缘起:

       在上一篇文章中,我们已经会集成MyBatic并且完成了保存数据的动作,但是现在如果你细心观察的话,在浏览器看到的数据中id=0。有人说:我不需要返回id呀,id返回我也用不到,返回为0的话,无所谓了。但是在实际项目中,我们是有很多场景需要用到返回的id的。网友就有疑问了,博主你吹牛吧,很多场景,那很多是多少呢?你说两个来听听。

 

使用场景 —— 保存时返回id的使用场景:

       既然网友要让博主回答两个,那就回答两个吧:

(2)场景2:在题库管理的时候,我们需要录入题目信息以及题库的选项,对于题库的选项是可以多个,如下:

题目:你最喜欢的是技术是?

A: Java语言   B: php语言  C: python语言  D:C语言

       那么对于题目信息我们会保存到一张表中Question,对于选项,我们会保存到另外一张表QuestionOption,对于表QuestionOption会有一个外键qid,也就是question的主键。对于Question和QuestionOption的保存是在同一个请求就完成的(如果是题目的保存和选项的保存是两个请求才完成的,那么流程不一样)。在保存QuestionOption的时候,需要用到Question的主键,这时候后台的保存代码是这样的:

Question question =Question();

int qid = save(Question);

QuestionOption qo = newQuestionOption();

qo.setQid(qid);

int qid = save(QuestionOption);

       这种场景就需要在保存Question的时候,就返回Question的主键了。

类似的场景很多,总之来说,有很多场景需要我们在保存完数据之后就获取到自增主键id。

 

示例代码:

       在上面说了这么多,其实这个很简单,主要是使用@Options注解,核心代码如下(这个代码是在上一篇博客的代码基础进行编写),只需要修改下DemoMapper即可:

package com.kfit.demo.mapper;

 

import org.apache.ibatis.annotations.Insert;

import org.apache.ibatis.annotations.Options;

 

import com.kfit.demo.bean.Demo;

 

public interface DemoMapper {

    @Insert("insert into Demo(name) values(#{name})")

    @Options(keyProperty="id",keyColumn="id",useGeneratedKeys=true)

    public void save(Demo demo);

}

这时候在访问http://127.0.0.1:8080/save 就可以看到如下的返回信息:

{"id":7,"name":"张三"}

@Options解说:

@Options注解中的工作就比较有意思,我们在插入记录时,一般是定义主键自增(auto_increment),但是在某些情况下,我们插入一条记录后,还想得到这条记录的自增主键ID,useGeneratedKeys=true就是定义数据库返回主键ID的,常用的属性如下:

useCache=true

flushCache=false

resultSetType=FORWARD_ONLY

statementType=PREPARED

fetchSize= -1,timeout=-1 ,

useGeneratedKeys=false 

keyProperty=”id“。

KeyProperty是实体类中定义的主键字段名;

KeyColumn是表中主键对应的字段;

useGeneratedKeys=true定义数据库返回主键ID;

à注解中的useCache还可以设置缓存相关的选项:

useCache = true表示本次查询结果被缓存以提高下次查询速度,flushCache = false表示下次查询时不刷新缓存,timeout =10000表示查询结果缓存10000秒。

       从上面的描述中,我们会发现@Options实际常用于两种场景:

@Options的两种使用场景:

(1)场景1:保存数据:返回主键id

设置@Options属性userGeneratedKeys的值为true,并指定实例对象中主键的属性名keyProperty以及在数据库中的字段名keyColumn。这样在gendar插入数据后,gendarId属性会被自动赋值。当然flushCache 仍然可以设置,表示插入数据后是否更新缓存,默认是true。

(2)场景2:查询数据:缓存数据、设置超时时间

配合查询语句使用,主要是开关一些查询的选项。比如useCache = true表示将会缓存本次查询结果,以提高下次查询速度;flushCache= Options.FlushCachePolicy.FALSE表示查询时不刷新缓存;timeout =10000表示查询结果缓存10000秒。

 

视频+交流平台:

à Spring Boot视频

http://412887952-qq-com.iteye.com/blog/2344171


à Spring Boot交流平台

http://412887952-qq-com.iteye.com/blog/2321532

 


以上是关于135. Spring Boot MyBatis升级篇-注解-自增ID的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot mybatis-starter原理

Spring Boot:Spring Boot整合Mybatis案例

Spring Boot 实用MyBatis做数据库操作

Spring boot 入门三:spring boot 整合mybatis 实现CRUD操作

Spring Boot集成Mybatis及通用Mapper

spring boot 与 Mybatis整合(*)