编程 33

0服务端开发,记事本的开发

By admin in 编程 on 2019年5月2日

本篇博客大家来聊聊MySQL数据库的连天与操作。即便您当地未有MySQL数据库的话,须要你先安装MySQL数据库。在Mac OS中应用brew包管理器实行MySQL的装置是会同方便的。安装MySQL的一声令下为:brew
install mysql。本篇博客我们将要选取Perfect框架来延续操作数据库了,首先咱们供给创设贰个测试数据库,然后在测试数据库中成立一张测试表用来增加和删除改查操作。

前边以及陆六续续的介绍了利用斯威夫特三.0开拓的服务端应用程序的Perfect框架。本篇博客就做三个阶段性的下结论,做三个完完全全的实例,其实那些实例在《Swift3.0服务端开采(一)》那篇博客中早已轻松的牵线过了,本篇博客就来详细的聊一下这么些工程的现实性贯彻细节。当然包罗iOS端和服务端的代码。本篇博客的介绍顺序根据成效模块来划分的,如登6注册模块、记事本列表,记事本的增加和删除改查等功能。在各种功用模块,大家先交给服务端代码的兑现,然后交给客户端代码的兑现。

在博客的开首呢,先来推举一款Mac上相比好用又无需付费的MySQL可视化管理工科具Sequel
Pro。那款工具用的是十一分的随手呢,应用的图标如下所示:

本篇博客的前几某个注重介绍任何工程的公用模块,为工程的完毕做希图,下方就是我们前些天博客要做的东西。本篇博客iOS端的网络请求首要行使的NSUOdysseyLSession来完成的,关于UGL450LSession更详实的牵线请参考从前公布的博客《NSURLSession全家桶》

  编程 1

  编程 2

 

 

壹、测试数据库的制造

1、记事本数据库的筹算

本有的与Perfect框架无关,完全是MySQL的内容,是Perfect操作数据库的希图事业。前提是你早已安装好了MySQL数据库了。

数据库的设计以及数据库表的开创本身都施用Sequel Pro来落成的,关于Sequel
Pro的应用请看上篇博客的牵线,本篇博客关于Sequel
Pro的介绍就不做过多废话了。首先我们先交付记事本数据库表的妄想,以备使用。大家先创制三个名字为perfect_note的数据库(步骤略),然后再次创下立相应的数目库表。因为我们的记事本相比较简单,主要不外乎登六、注册以及记事本的增加和删除改查。所以大家的数据库结构也是相比较轻便的,perfect_note数据库中只有七个表,二个是user表,二个是content表,下方会付出详细的牵线进程。

 

一.user表的创始

1、运转MySQL的服务器

先是大家来成立user表,user表担当存款和储蓄用户音信,当用户注册和登入时都会操作那几个表。注册用户时正是往该表中插入用户,登六时就是查询相应的用户消息。当然,为了德姆o的简洁性,大家的user表中的字段也是相比较少的。下方正是开创user表的SQL语句。个中有多个字段,主键id是整型而且是自增的,是用户的唯一象征。username字段存款和储蓄的是用户名,password存款和储蓄的固然用户密码。register_date存款和储蓄的是用户注册时间,是时刻戳,并且暗许值是当下光阴。

这点纵然简易,但并非遗忘运行你的MySQL服务啊,不然Sequel
Pro是无力回天连接你的MySQL数据库的。具体运营格局如下。

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(30) CHARACTER SET latin1 NOT NULL DEFAULT '',
  `password` varchar(30) CHARACTER SET latin1 NOT NULL DEFAULT '',
  `register_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

  编程 3

 

运转是start,那么关闭MySQL数据库就是stop了,如下所示:

2.content表的创导

  编程 4

成立完user表后,接下去将要创设咱们的content表了。content表用来存款和储蓄用户录入的笔记,下方就是content表的创设SQL语句。从下方的SQL语句中轻巧看出content表的字段包涵自增的主键id,记录的标题title,记录的始末content,以及外键userID和创制时间create_time。

 

CREATE TABLE `content` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(30) CHARACTER SET gb2312 NOT NULL DEFAULT '',
  `content` text CHARACTER SET gb2312 NOT NULL,
  `userID` int(11) unsigned NOT NULL,
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `USER_FOREIGN_KEY` (`userID`),
  CONSTRAINT `USER_FOREIGN_KEY` FOREIGN KEY (`userID`) REFERENCES `user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

贰.利用Sequel
Pro连接操作数据库

 

(1)、连接MySQL数据库

 

开荒Sequel Pro,输入你MySQL的主机名,用户名以及密码。具体连接那多少个数据库能够不选,然后填上实际的端口,暗许是3306。点击连接就可以。具体如下所示:

2、iOS端基于NSU奥德赛LSession互联网请求类的包裹

  编程 5

始建完数据库后,接下去大家来封装iOS端互联网请求的共用代码。也等于说,iOS端的互联网请求就能够调用本有的包装的内容。当然本有的包装的网络请求类是利用NSUPRADOLSession类封装的。

 

 

(二)、成立测试数据库

壹.字符串常量、闭包回调类型以及枚举的概念

下一场点击增加数据库,成立新的数据库就可以,下方我们创设的是test数据库,编码形式用的是utf八。如下所示。

首先我们先来定义一些卷入互联网请求类要选择的字符串常量以及枚举闭包回调。下方代码段做的正是那件专门的学问,第贰个框中定义了剖析响应数据时采纳到的字符串常量。“SUCCESS”表示请求成功,“FAILE”表示请求战败等等。

  编程 6编程 7

其次个框中定义的是四个闭包变量,用来将呼吁结果回调给调用者。RequestStart正是开首请求要调用的闭包类型,RequestSuccess则是呼吁成功后调用的闭包类型,RequestFailed则是伸手战败要调用的闭包类型。那叁者是请求类对外沟通的桥梁。

 

其多个框则是伸手格局的枚举,主要包蕴GET、POST、PUT、DELETE,当然还留了CUSTOM()自定义的扩充项目。在该枚举中的description总结属性担任将近日的枚举对象转变来其对于的字符串,具体如下所示:

(3)、创建user表

  编程 8

创办完数据库后,接下去大家要成立2个user表用来张开测试。点击左下方的加号来创建新的多寡库表,下方正是大家创立的数据库表的具体步骤以及具体的参数配置。如下所示:

 

  编程 9

二、网络请求基类的创制

始建完user表后,大家需求往表里边增添一些测试字段,下方便是大家抬高的部分字段。在大家的user表中有江湖多个字段,id是主键,用户的独步天下标示。username-用户名,password-用户密码,create_time是创制时间,create_time的体系是时间戳,而且私下认可值是当前时光。具体如下所示。

接下去互连网请求的基类,全部与网络请求相关的类都要承接自此类,下方的BaseRequest就是我们网络请求的基类。该类相比轻便,主要证明了上边定义的多个闭包类型的变量,然后交给了对应的构造器。具体如下所示。

  编程 10

  编程 11

 

 

 

三.互联网请求类的包装

贰、Perfect数据库连接

接下去我们应用NSUOdysseyLSession来封装大家的网络请求类,下方的Request类就是我们封装的互联网请求类,该类承袭自BaseRequest。下方是Request的部分代码,下方每一种方法对应着GET、POST、PUT等请求,能够结合者REST一同行使。在种种具体请求的法子中会调用sessionDataTaskRequest()方法。会给那个点子传入不相同的请求方式以及路线和参数。稍后我们会给出sessionDataTaskRequest()方法的求实落成,sessionDataTaskRequest()方法在这之中就动用了NSUCRUISERLSession相关的剧情提倡了网络请求,具体请看下方对sessionDataTaskRequest()方法的详细介绍。

万事俱备只欠东风,上边准备完MySQL数据库后,我们就要开首实行Perfect框架连接数据库的剧情了。

  编程 12

一.引入重视库

江湖那一个代码段正是sessionDataTaskRequest()方法的完全结构,首先大家依据函数的乞请路线和参数拼接UPRADOL字符串,也正是首先个框中的部分。在该部分中的query()函数是将参数实行U凯雷德L编码调换,那几个函数是从AlamoFire框架中摘过来的。然后创制请求用的U奥迪Q伍LRequest对象。最后是成立Session对象发起DataTask职务了。当然请求的结果是在completionHandler闭包中开始展览管理,稍后会付给completionHandler闭包中的管理格局。

依据惯例,Perfect框架连接数据库如故亟待包的支撑。首先大家需求引进操作MySQL相关的包。

  编程 13

 //MySql数据库注重包

.Package(url: “”,
majorVersion: 2, minor: 0)

编程,随后,大家付出请求成功后,对json数据的剖析以及对回到结果的拍卖。下方就是completionHandler闭包中的代码片段。首先对服务器再次来到的json数据实行分析,解析后将json数据转变到对应的数据类型。然后依据响应报文的result字段来进展相应的操作。要是报文响应平常,就调用success()闭包,不然调用failure()闭包,如下所示:

人人间是增添完上述的依赖包后,重新举行编写翻译的结果:

  编程 14

  编程 15

至此大家iOS客户端的网络请求部分就封装完了,其余实际业务逻辑的网络请求调用上述的Request类就能够,稍后会用到Request。

 

 

2、数据库连接

三、登六注册模块的费用

世间代码段中的MySQLConnnet类就背负数据库的连接并且采取相应的数据库。下方是MySQLConnnet类的完好结构,host,port,user,password都是只读的计量属性,负担布署连接数据库的参数。而mysql属性正是连连数据库后的操作句柄。下方首要有五个点子,3个是接2连三数据库的方法connectDataBase()和选拔数据库的法子selectDataBase()。MySQLConnnet类对外是以单例的情势存在的,然而对外暴漏的不是MySQLConnnet类的目的,而是MySQL类的目的。

地点的根基工作甘休后,接下去我们就要来做大家相应的事务模块了。首先大家来进展登入注册模块的开支专门的学业。
首先付诸服务端相应模块的代码,然后在提交相应模块的iOS端的落成。关于斯维夫特三.0连接和操作MySQL的详尽内容请参见上①篇博客《斯威夫特3.0服务端开垦(肆)
MySQL数据库的连年与操作》,数据库的连接在本有的就不做过多废话了。

  编程 16

一、服务端代码

接下去提交具体的代码落成,下方正是MySQLConnnet类的单例和民用构造器。具体落成如下所示:

(1)、登陆或注册的首先步:接收用户名

  编程 17

世间代码是用户登入依然注册的率先步,通过用户名来查询用户新闻,从而来推断该用户是或不是注册,假若未注册则去登记,假诺注册过就去登六。假若查询成功,那么就将查询的用户ID和UserName重临给客户端。用户登入的代码和尘间大致,就是通过Select语句来同盟该用户名的密码是或不是与用户输入的平等,在此就不做过多废话了。

人间是数据库的连续,宗旨语句便是下方红框中的内容。主要照旧调用MySQL类中的connect()方法,在调用该方法时传出相应的参数就能够。假如延续退步了会回来相应的errorMessage。具体代码如下所示:

  编程 18

  编程 19

(二)、用户注册

连年完数据库后,然后是挑选数据库,下方是选用数据库的代码。使用mysql句柄调用selectDataBase()方法,具体代码如下所示:

人红尘正是用户注册是调用的接口达成,重假诺插入相应的用户音讯,具体如下所示:

  编程 20

  编程 21

 

上边这个代码写完后,配置完相应的路由调用上述方法,我们的服务端代码就完结了。具体路由的布局因为篇幅有限,本篇博客就不做过多废话了。

 

 

叁、数据库操作

二、iOS客户端代码实现

接下去我们就要调用上边包车型客车数据库操作类类操作实际数据库中的表了。在第3部分大家已经创办好了test数据库,并且成立好了对应的user表。接下来大家就要动用Swift代码来对User表举办增加和删除改查操作了。

接下去我们来促成iOS客户端的报到和登记的代码,下方就是登六照旧注册的相关UI。用户输入用户后,点击下一步,会调用后台接口判别用户是或不是注册过,若是已注册输入密码登入,借使未注册就输入密码注册和登六。右侧的UIViewController是公私的,两个页面,一个让用户输入用户名,二个则承担接收密码。UI相比较轻巧,如下所示:

 

  编程 22

一.创设数据库操作基类

 看完UI, 大家来看一下登入或注册的有关互联网请求的代码。下方的UserInfoRequest类就担当全数与用户新闻有关的互连网请求,从下方的代码截图中,我们可以看到UserInfoRequest的基类是BaseRequest。下方的queryUserInfo(userName)便是地点左边的页面所调用的艺术,用来剖断该用户是还是不是是注册过的用户。在queryUserInfo()中对Request类举行了实例化,并且调用了相应的伸手方法。并且对相应的轩然大波回调做了管理,具体如下所示。

人世间截图就是大家营造的数据库操作的基类,所有数据库表的操作都要承袭自该基类,在基类中定义了操作数据库的名字dataBaseName,MySQL操作句柄mysql,以及响应json的格式responsJson。具体如下所示。

  编程 23

  编程 24

在大家相应的ViewController中会调用上述的主意,下方便是用户在输入相应的用户音讯后点击next所调用的章程。通过相应的闭包事件,最后将网络请求的结果回调到了VC中。

 

  编程 25

二.构建user表的操作类

时至明日大家iOS客户端的登入就完毕竣事了。
其余的代码和上边的思绪类似,在此就不做过多废话了。

世间的UserOperator类正是大家创制的特别来操作user表的类,首即便对user表的增加和删除改查操作。insertUserInfo()担当“增”,即插入用户新闻。deleteUser()担负“删”,通过userId来删除用户。updateUserInfo()就背负“改”,更新用户音讯。queryUserInfo()就担当“查”了,肩负从user表中经过用户名来查询音讯。

 

  编程 26

本篇博客,就先到此刻吧,别的代码和上述的思绪一贯,根据上述的笔触去落到实处笔记的增加和删除改查就可以,在此就不多废话了。完整德姆o请移步github相关链接。

 

github分享链接: https://github.com/lizelu/PerfectDemo 

(1)、InsertUserInfo()—-“增”

尘寰就是插入数据的切切实实代码,第二个框正是我们要实施的SQL语句,然后使用mysql操作句柄调用query()方法开始展览SQL语句的实践。试行成功后,查询插入的数码并回到查询的结果,如下所示。

  编程 27

 

(2)、deleteUserInfo()—-“删”

接下去大家来看一下刨除的具体操作,下方截图就是deleteUserInfo()的实际落成。下方的不二法门与插入大约,先给出delete的SQL语句,然后再调用mysql操作句柄的query()操作,具体代码如下所示:

  编程 28

 

(三)、updateUserInfo—-更新用户消息

江湖是立异用户音讯的代码,与上四个代码大致,只但是是透过mysql操作句柄调用query()方法实施的是update的SQL语句。更新时大家运用了MySQL的now()函数来更新时间,具体代码如下所示。

  编程 29

 

(4)、queryUserInfo—-查询

随后我们来贯彻一下查询用户新闻的代码。下方正是询问用户音讯的代码,查询的代码稍微复杂一些,在执行完询问的SQL语句后,还亟需价格查询结果开始展览仓库储存。在存款和储蓄后,会回去查询的结果results。我们得以因而results的forEachRow()函数的尾随闭包来赢得每行的数额。在收取数据后,将其调换来相应的字典,然后将存有查询结果的字典存入到responseJson中,然后将responseJson转变为json字符串再次回到给用户就可以。具体做法如下所示。

  编程 30

 

 

四、测试用例

上面我们写完操作User表的照顾的措施后接下去我们就来测试一些有血有肉的结果。为了便于测试,大家安插伍个路由专门用来对User表的增加和删除改成进行操作。各样路由对应着方面每一个方法。本有的就交付相应的测试用例。为了便于测试,大家在路由布置时,钦赐请求方法全是GET请求。

 

1、对“增”的测试

接下去我们对InsertUserInfo()的的测试,首先大家加多一个请求方式为GET的“/create”路由,然后拿走用户提交的userName和password。获取实现后,调用UserOperator对象的insertUserInfo()方法将数据插入到数据库中。当然插入后,会跟着将数据查询出来重返给客户端的。

  编程 31

咱俩在浏览器里拜访“

  编程 32

 

2.对“改”的测试

接下去大家就要测试一下updateUserInfo()这一个函数,该片段与上述的代码大约,也是索要配置1个请求格局为GET的更新路由“/update”。然后在该路由中拿走请求参数,然后调用updateUserInfo()那么些函数就能够。具体代码就不做过多废话了,直接看下方的测试结果吗。通过结果简单看出,用户名被涂改成准确的Hello了,而且时间也被更新了。

  编程 33

 

结余的查与删,和上面的示范大概,在此就不做过多废话了,大家的MySQL数据库的操作就先聊到那吗。官方上还介绍了有的数据库的O途睿欧M操作,其中就有MySQL的OKugaM操作,能够简化一些数码操作。那一点就留下读者本人去看呢。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 澳门新葡亰官网app 版权所有