`

135. [视频]Spring Boot MyBatis升级篇-注解-自增ID【从零开始学Spring Boot】

阅读更多

 

 

【视频&交流平台】

à SpringBoot视频

http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à SpringCloud视频

http://study.163.com/course/introduction.htm?courseId=1004638001&utm_campaign=commission&utm_source=400000000155061&utm_medium=share

à Spring Boot源码

https://gitee.com/happyangellxq520/spring-boot

à Spring Boot交流平台

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

 

【本篇博客,有配套视频,视频地址:《Spring Boot MyBatis升级篇-注解-自增ID,公众号中点击下面的阅读原文,视频中讲解的更详细】

需求缘起:

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

 

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

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

1)场景1:在开发app的时候,我们对于朋友圈有留言的功能,留完言之后,那么想要删除,这时候,请求请求到后台执行save()动作之后,就需要返回留言信息的id,不然App端发起删除的时候,就不知道删除哪条评论了。

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 = new QuestionOption();
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),但是在某些情况下,我们插入一条记录后,还想得到这条记录的自增主键IDuseGeneratedKeys=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秒。

 

视频&交流平台

à SpringBoot网易云课堂视频

http://study.163.com/course/introduction.htm?courseId=1004329008

à Spring Boot交流平台

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

 

 

分享到:
评论
4 楼 林祥纤 2017-10-18  
itlang01 写道
林祥纤 写道
itlang01 写道
场景2的代码加入事务的话就获取不到qid了,一般需要加入事务,这个情况怎么解决


你测试了吗?

找到原因了是因为我设置了defaultExecutorType=BATCH导致的


找到原因就好!
3 楼 itlang01 2017-10-18  
林祥纤 写道
itlang01 写道
场景2的代码加入事务的话就获取不到qid了,一般需要加入事务,这个情况怎么解决


你测试了吗?

找到原因了是因为我设置了defaultExecutorType=BATCH导致的
2 楼 林祥纤 2017-10-12  
itlang01 写道
场景2的代码加入事务的话就获取不到qid了,一般需要加入事务,这个情况怎么解决


你测试了吗?
1 楼 itlang01 2017-10-12  
场景2的代码加入事务的话就获取不到qid了,一般需要加入事务,这个情况怎么解决

相关推荐

    spring-boot-mybatis-plus 一套打通 有注释 打开就可使用

    这样的项目通常包含完整的配置和示例代码,使得开发者可以立即上手,无需从零开始配置环境。 描述中提到的是最新版本的Spring Boot 2.x和MyBatis Plus。Spring Boot 2.x带来了许多改进和新特性,比如更好的性能、新...

    从零搭建一个 Spring Boot 开发环境!Spring Boot+Mybatis+Swagger2 环境搭建.docx

    在本文中,我们将详细介绍如何从零开始搭建一个基于Spring Boot的开发环境,其中包括Spring Boot、Mybatis和Swagger2的集成。首先,让我们了解为何选择Spring Boot。 **为什么使用Spring Boot** Spring Boot是...

    Spring Boot 系列实战合集.zip

    1. 创建第一个 Spring Boot 项目:从零开始创建一个简单的 "Hello, World!" 应用,理解 Maven 或 Gradle 项目的结构。 2. 使用 Spring Boot 的自动配置:探究如何利用自动配置来简化配置文件。 3. 开发 RESTful API...

    9. 使用JdbcTemplate【从零开始学Spring Boot】

    <artifactId>spring-boot-starter-jdbc ``` 接下来,我们需要配置数据源。Spring Boot支持多种数据库,例如MySQL、PostgreSQL等。这里以MySQL为例,配置`application.properties`文件: ```properties spring....

    Spring中文版基础教程,从0开始教你Spring

    《Spring中文版基础教程》是一本面向初学者的详尽指南,旨在帮助读者从零开始掌握Spring框架的基础知识。Spring是Java开发中最流行的轻量级框架之一,它提供了丰富的功能来简化企业级应用的开发。本教程将带你一步步...

    Spring boot基础demo

    Spring Boot是Java开发中的一个流行框架,用于简化Spring应用程序的创建和配置过程。它通过提供预配置的starter pom或gradle...这个demo是一个实践型的学习资源,帮助开发者从零开始接触并掌握Spring Boot的基础知识。

    从零开始学Spring Boot

    《从零开始学Spring Boot》是一套全面且深入的学习教程,专为想要掌握Spring Boot技术的初学者设计。Spring Boot是Java开发中的一个热门框架,它简化了Spring应用的初始搭建以及开发过程,使得开发者可以更快地构建...

    干净可用spring-boot的项目

    这大大节省了开发者从零开始构建新项目的时间,提高了开发效率。 下面我们将深入探讨Spring Boot的核心特性和主要知识点: 1. **起步依赖(Starter Dependencies)**:Spring Boot通过“起步依赖”管理依赖关系,...

    FShop是一款基于Spring Boot + Mybatis + Dubbo + Zookeeper

    开发者可以直接运行和使用,无需从零开始搭建环境。 【标签】进一步确认了系统的关键技术,包括Java语言、Spring Boot框架和Dubbo服务治理,这些标签可以帮助感兴趣的开发者快速定位到他们熟悉或者想要学习的技术...

    SpringBoot实战-清晰

    - **构建RESTful服务**:如何从零开始创建一个简单的RESTful服务,包括处理HTTP请求、响应JSON数据等。 - **集成外部服务**:如邮件服务、消息队列、支付平台等,展示如何将Spring Boot应用与其他系统无缝连接。 ...

    JavaEE企业级框架开发实战教程-教案-第3章-Spring Boot.docx

    Spring Boot基于约定优于配置的原则,旨在让你能够更快地从零开始构建应用。 **2. 配置复用的问题** 在第二章的学习中,我们了解到整合Spring、Spring MVC和MyBatis时,需要编写大量的配置文件。这些配置虽然不可或...

    java视频教程从零开始ssm项目实战迭代到spring boot架构部署源码

    本视频教程旨在帮助初学者从零开始掌握Java技术,并逐步进阶到能够进行SSM项目实战、迭代,直至熟悉Spring Boot架构的部署与源码分析。 首先,让我们从基础开始。Java是一种面向对象的编程语言,它具有跨平台的特性...

    Spring Boot2 教程.pdf

    【Spring Boot 2 教程】是针对Java开发者的一份详尽指南,旨在帮助读者从零开始学习并掌握Spring Boot 2的使用。Spring Boot 是一个简化Spring应用初始搭建以及开发过程的框架,它强调“约定优于配置”,使得开发者...

    Macbook中使用IDEA开发Spring+SpringMVC+Mybatis+Tomcat+MySQL项目新手必看

    以下是一份详细的步骤指南,帮助你从零开始构建这样的项目。 1. **环境配置**: - **Java环境**:首先确保安装了Java JDK,并设置好`JAVA_HOME`环境变量。 - **IDEA**:下载并安装IntelliJ IDEA社区版或专业版,...

    详尽的Spring2.0学习提纲

    1. 创建Spring项目:从零开始构建一个简单的Spring MVC应用,涉及配置、控制器、视图和数据库访问。 2. 高级特性实践:探索Spring Security、Spring WebSocket、Spring Boot等进阶主题,提升项目开发能力。 通过...

    架构探险_从零开始学spring

    《架构探险:从零开始学Spring》是一本深入浅出的Spring框架学习指南,作者通过细致入微的讲解,带领读者逐步掌握Spring的核心概念和技术。Spring作为Java领域最流行的轻量级框架,其广泛应用于企业级应用开发,是...

    Spring+vue的微服务简介外文文献加翻译

    它被设计为可以从零开始构建一个新的项目,也可以逐步地将现有项目的各个部分转换成Vue.js。Vue.js的核心库专注于视图层,易于与其他技术和库集成。Vue.js的主要特点包括组件化、指令、响应式数据绑定等,这些特性...

    Spring基础教程.pdf

    《Spring基础教程》是针对Java开发人员的一份详尽...本教程通过深入浅出的方式,结合源码分析和实用工具的使用,将帮助读者从零开始掌握Spring框架,提升Java开发技能,为构建高效、稳定的Java企业级应用打下坚实基础。

    spring 学习

    通过搭建基本的工程来学习Spring的原理,可以实现从零开始构建应用,逐步深入理解Spring的工作机制。实际操作中,经常需要阅读和理解Spring框架的官方文档,以及参考其社区提供的大量示例代码。学习Spring也是一个...

    spring-framework-learning-code:从0开始深入学习Spring小册子原始码-源码开源

    《Spring框架学习代码:从零开始深入学习Spring小册子源码开源》 Spring框架是Java开发中的核心组件,尤其在企业级应用中占据主导地位。这个开源项目提供了从零开始学习Spring框架的源码,旨在帮助开发者深入理解...

Global site tag (gtag.js) - Google Analytics