JavaEE开发之记事本完整案例(SpringBoot + iOS端)
上篇博客我们聊了《JavaEE开发之SpringBoot整合MyBatis以及Thymeleaf模板引擎》,并且在之前我们也聊了《Swift3.0服务端开发(五) 记事本的开发(iOS端+服务端)》,在之前的案例中的服务端是我们使用了Swift3.0下的Perfect框架来实现的,本篇博客我们就用Spring Boot来做服务端,而iOS端我们不用改动。
在后端实现时,路由以及数据格式我们都采用之前的规则,但是我们要用Spring Boot来做。当然操作数据库时,我们就使用MyBatis来进行数据的持久化了。本篇我们就来看一下这个Spring Boot完整的工程。当然,本篇博客所设计的Spring Boot是比较简单的,但是用来练手可以了。
本篇博客所涉及的功能无非就是一些数据库表的CURD操作,没有什么多难的地方。接下来就来整体的看一下这个工程。
一、运行效果展示
下方这个Gif效果图,就是我们本篇博客所涉及的完整案例的运行效果。单从下方的效果,我们看不出与之前有什么效果,因为我们的iOS端没有改变。但是下方App的后台确实是使用Spring Boot来实现的。
第一个页面让用户输入用户名,如果用户名存在,那么就让用户输入密码进行登录,如果不存在就让用户进行注册。登录或者注册后直接进入App的首页,也就是笔记的列表页面。该列表页显示了当前用户发布的所有笔记,包括笔记的Title和创建时间。点进去是该笔记的详情页面,可以对其更改操作。在列表的右上角有一个添加按钮,可以用来添加新的笔记。
在列表页中,左滑单元格,会出现删除按钮,点击删除按钮,则对该篇笔记进行删除操作。具体运行效果如下所示。

二、MyBatis的Mapper实现
关于Spring Boot中如何引入和配置MyBatis,在此就不做过多赘述了,你可以参见上篇博客。当然,上述Demo的核心操作就是数据库的CURD操作,当然,我们使用的是Spring Boot下的Mybatis来进行的数据持久化,所以MyBatis的使用是比较重要的。本部分就详细的聊一下本篇博客所涉及的MyBatis的Mapper。下方先给出操作用户user表的Mapper, 然后在介绍操作内容content表的Mapper。
1. UserMapper的实现
下方代码段是UserMappper的具体实现,首先使用@Mapper注解将UserMapper接口声明为MyBatis的Mapper。然后在其中给出相应的操作声明。在UserMapper中主要给出了两个Select操作和一个Insert操作。
在执行Select时,使用了#{参数}来往SQL语句中传入相应的查询条件,使用了@Results()注解来声明表字段与数据Model的属性间的对应关系。如果没有指定,那么默认情况下表字段名就等于Model的属性名。查询语句返回的是含有相应Model的ArrayList。
我们使用@Insert()注解来指定插入语句,并且使用@Param注解和#{}来绑定参数。具体如下所示。

2、INoteContentMapper的实现
看完UserMapper后,我们来看一下INoteContentMapper的具体实现。INoteContentMapper就负责操作Content表。下方截图是INoteContentMapper具体实现,其中多了两个操作,一个是使用@Delete注解声明的删除操作,另一个是使用@Update注解声明的更新操作。下方的实现也是比较简单的在此就不做过多赘述了。

三、DAO层的创建
看完相关的Mapper接下来我们来看一下DAO层的实现,DAO即Data Access Object,主要是负责操作对象的。我们就以ContentDao为例。下方代码段就是ContentDao中的具体实现。在该类中被注入了INoteContentMapper类型的对象,我们可以使用该对象来操作数据库。
我们就以queryContent(String contentId)为例,该方法中就调用了相应Mapper对象的相应方法,根据内容的id来查询相应的内容。而该类中的方法,在获取到相应的对象信息后,对该对象进行了相关操作,并返回。具体代码如下所示。

四、Controller层的实现
DAO层实现完毕后,接下来我们就来实现我们的Controller层。当然,我们还是以Content的Controller层为例。因为我们的Controller是作为接口也就是API对外使用的,所以我们将ContentRestController使用@RestController进行注解,这样我们之间将返回的报文内容进行返回即可。下方代码片段就是我们的ContentRestController中的实现内容。
首先我们要注入ContentDao的对象,然后在相应的路由所对应的方法中来调用DAO中的相应的方法。虽然我们返回的是Map类型,但是Spring Boot会为我们自动的转换成Json格式的数据,所以访问该API返回的都是JSON格式的数据。

我们可以对“/contentList”路由进行访问,该路由需要提供一个userId作为查询参数,下方截图就是对userId=1的用户下的所有List进行的查询。

今天博客就先介绍到这儿吧,下方是本篇博客所涉及Demo的源码分享链接。
github分享链接:https://github.com/lizelu/SpringBootProject
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco }
JavaEE开发之记事本完整案例(SpringBoot + iOS端)的更多相关文章
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- Swift3.0服务端开发(五) 记事本的开发(iOS端+服务端)
前边以及陆陆续续的介绍了使用Swift3.0开发的服务端应用程序的Perfect框架.本篇博客就做一个阶段性的总结,做一个完整的实例,其实这个实例在<Swift3.0服务端开发(一)>这篇 ...
- 李洪强iOS开发之【零基础学习iOS开发】【01-前言】02-准备
在上一讲中,介绍了什么是iOS开发.说简单一点,iOS开发,就是开发运行在iPhone或者iPad上的软件.这么一说完,应该有很多人就会产生一些疑惑,比如学习iOS开发是不是一定要买iPhone?需不 ...
- JavaEE开发基于Eclipse的环境搭建以及Maven Web App的创建
本篇博客就完整的来聊一下如何在Eclipse中创建的Maven Project.本篇博客是JavaEE开发的开篇,也是基础.本篇博客的内容干货还是比较多的,而且比较实用,并且都是采用目前最新版本的工具 ...
- JavaEE开发之基于Eclipse的环境搭建以及Maven Web App的创建
本篇博客就完整的来聊一下如何在Eclipse中创建的Maven Project.本篇博客是JavaEE开发的开篇,也是基础.本篇博客的内容干货还是比较多的,而且比较实用,并且都是采用目前最新版本的工具 ...
- 李洪强iOS开发之【零基础学习iOS开发】【01-前言】01-开篇
从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂 ...
- JavaEE开发使用Maven管理的SpringMVC工程
前几篇博客已经陆陆续续的聊了一些Spring的东西,今天博客我们就来聊一下SpringMVC.SpringMVC目前在JavaEE开发中可谓占据一席之地,用起来也是比较顺手的.低耦合,高内聚,利用一些 ...
- iOS端IM开发从入门到填坑
让App聊起来 IM开发从入门到填坑Demo IM的实现方式 拿来主义,使用第三方IM服务 IM的第三方服务商国内有很多,底层协议基本上都是基于TCP的,类似有网易云信.环信.融云.极光IM.Le ...
- Linux服务器oraclejdk与openjdk共存并配置JavaEE开发环境
由于本人学业的需要,需要在linux中搭建JavaEE开发环境,与windows的同学协同开发. JDK 由于fedora默认使用openjdk,移除多多少少会出现点问题,由于很多开源软件默认使用到它 ...
随机推荐
- iOS开发之UITableView及cell重用
1.UITanleview有的两种风格 一种是Plain,一种是Grouped,可以从这里设置风格: 他们样式分别如下: Plain: Grouped: 2.tableView展示数据的过程: (1) ...
- css gray,grayscale,css变灰兼容大部分浏览器
css gray,grayscale,css变灰兼容大部分浏览器 html { filter: url("data:image/svg+xml;utf8,<svg xmlns=\'ht ...
- Moving to Express 4
http://expressjs.com/guide/migrating-4.html Moving to Express 4 Overview Express 4 is a breaking cha ...
- 实验楼-3-Linux用户及用户组
获得自己用户名 $ who am i $ whoami pts/0 : 伪终端/序号 root操作:sudo Firstly,知道当前登录用户的密码:Secondly,当前用户在sudo用户组 添加新 ...
- 腾讯云报告——MySQL成勒索新目标,数据服务基线安全问题迫在眉睫
推荐理由 大数据时代,人类产生的数据越来越多,但数据越多的情况下,也会带来数据的安全性问题,如MySQL数据库上的数据,越来越多的黑客盯上了它,今天推荐的这篇文章来自于腾讯云技术社区,主要是针对MyS ...
- Python使用心得之魔法参数**kw
通过设置字典类型参数直接传递给接收魔法参数(**kw)的方法,对应赋值.示例如下: jdbcConnectionDict = {, , 'database': 'test', 'charset': ' ...
- AE + GDAL实现影像按标准图幅分割(上)
最近有个项目,其中有个功能是要将遥感影像按标准图幅分割,一开始用AE的接口,慢的让人抓狂,就改用GDAL,速度提升很大.我主要通过http://blog.csdn.net/liminlu0314/学习 ...
- async/await的多线程问题
今天尝试把.net4.5新增的异步编程模型async/await加入自己的框架,因为从第一印象看,使用async/await的写法实在太方便了,以同步代码的方式写异步流程,写起来更顺畅,不容易打断思路 ...
- 老李案例分享:MAT分析应用程序服务出现内存溢出过程
老李案例分享:MAT分析应用程序服务出现内存溢出过程 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.在poptest的loa ...
- JavaScript原生Array常用方法
JavaScript原生Array常用方法 在入门Vue时, 列表渲染一节中提到数组的变异方法, 其中包括push(), pop(), shift(), unshift(), splice(), so ...