您的位置:新葡亰496net > 奥门新萄京娱乐场 > 新葡亰496net:0服务端开发,记事本的开发

新葡亰496net:0服务端开发,记事本的开发

发布时间:2019-07-05 12:57编辑:奥门新萄京娱乐场浏览(180)

    本篇博客我们来聊聊MySQL数据库的连年与操作。要是您本地未有MySQL数据库的话,需要您先安装MySQL数据库。在Mac OS中运用brew包管理器进行MySQL的安装是连同方便的。安装MySQL的授命为:brew install mysql。本篇博客我们将要动用Perfect框架来接二连三操作数据库了,首先大家要求成立一个测量试验数据库,然后在测验数据库中开创一张测量检验表用来增加和删除改查操作。

    前边以及时断时续的牵线了使用斯维夫特3.0开荒的服务端应用程序的Perfect框架。本篇博客就做三个阶段性的总括,做四个安然无事的实例,其实这一个实例在《斯威夫特3.0服务端开垦(一)》这篇博客中已经轻便的牵线过了,本篇博客就来详细的聊一下以此工程的具体落到实处细节。当然包涵iOS端和服务端的代码。本篇博客的介绍顺序依照作用模块来划分的,如登入注册模块、记事本列表,记事本的增加和删除改查等成效。在各种成效模块,大家先交付服务端代码的贯彻,然后交到客户端代码的落实。

    前边以及时断时续的介绍了动用斯维夫特3.0开垦的服务端应用程序的Perfect框架。本篇博客就做叁个阶段性的下结论,做三个整机的实例,其实这些实例在《Swift3.0服务端开垦(一)》那篇博客中曾经轻松的介绍过了,本篇博客就来详细的聊一下那么些工程的实际贯彻细节。当然包罗iOS端和服务端的代码。本篇博客的牵线顺序依据功能模块来划分的,如登入注册模块、记事本列表,记事本的增删改查等成效。在每一种功用模块,大家先交给服务端代码的贯彻,然后交由客户端代码的落到实处。

    上篇博客咱们聊了《JavaEE开采之SpringBoot工程的创始、运维与安排》,从上篇博客的内容大家容易看出SpringBoot的方便人民群众。本篇博客大家继承在上篇博客的底子上来看一下SpringBoot是哪些引进和应用MyBatis和Thymeleaf的。在事先的博客中大家提到过Hibernate,前些天博客所引进的Mybatis所扮演的剧中人物与Hibernate类似,都以一套ORM框架,重要承担长久化的,也是将数据库中的数据直接照射为Model的框架。

    在博客的启幕呢,先来推举一款Mac上相比好用又无偿的MySQL可视化管理工科具Sequel Pro。那款工具用的是一对一的随手呢,应用的Logo如下所示:

    本篇博客的前几有的关键介绍任何工程的公用模块,为工程的兑现做计划,下方正是大家明日博客要做的东西。本篇博客iOS端的网络须求首要选拔的NSU福睿斯LSession来促成的,关于UXC60LSession更详尽的介绍请参照他事他说加以考察以前公布的博客《NSURLSession全家桶》

    本篇博客的前几有的注重介绍任何工程的公用模块,为工程的兑现做筹算,下方就是大家前些天博客要做的东西。本篇博客iOS端的互连网央浼主要选择的NSULX570LSession来促成的,关于U奥德赛LSession更详细的牵线请参照他事他说加以考察在此之前宣布的博客《NSURLSession全家桶》

    而Thymeleaf就是三个模板引擎了,与此前大家聊得PHP中的斯马特y模板引擎类似。即使你们的Web工程是内外端分离的,那么就不须要Thymeleaf等模板引擎了。本篇博客要做的事情正是在SpringBoot工程中引进MyBatis,然后经过MyBatis所提供的光彩夺目方法以及注解来读取数据库中的消息。然后利用Thymeleaf模板在前端进行数量的显得。

      新葡亰496net 1

      新葡亰496net 2

      新葡亰496net 3

    咱俩事先在聊斯维夫特开垦服务端的内容,也正是Perfect框架时,用到了MySQL相关的东西。本篇博客大家就使用Perfect框架在此之前所操作的数据库就行了。关于斯维夫特的Perfect框架的连锁内容,请移步于《Swift中的服务端框架---Perfect》种类博客。因为事先聊过MySQL相关的事物了,本篇博客就不做过多废话了。关于MySQL的装置,请参见在此之前发表的博客《macOS Sierra安装Apache2.4 PHP7.0 MySQL5.7.16》。本篇博客,大家就把主要放到Spring Boot中的MyBatis和Thymeleaf上。

     

     

     

     

    一、测试数据库的始建

    一、记事本数据库的设计

    一、记事本数据库的安插

    一、MyBatis的引进与行使

    本有的与Perfect框架非亲非故,完全都以MySQL的剧情,是Perfect操作数据库的备选干活。前提是您已经安装好了MySQL数据库了。

    数据库的打算以及数据库表的开创自身都利用Sequel Pro来达成的,关于Sequel Pro的采纳请看上篇博客的介绍,本篇博客关于Sequel Pro的牵线就不做过多废话了。首先大家先付给记事本数据库表的规划,以备使用。大家先创设多少个名为perfect_note的数据库(步骤略),然后再次创下建相应的数据库表。因为大家的记事本相比较简单,主要包涵登陆、注册以及记事本的增加和删除改查。所以大家的数据库结构也是比较轻易的,perfect_note数据库中独有四个表,二个是user表,一个是content表,下方会提交详细的牵线进程。

    数据库的布置以及数据库表的创造本人都应用Sequel Pro来完结的,关于Sequel Pro的使用请看上篇博客的牵线,本篇博客关于Sequel Pro的介绍就不做过多废话了。首先大家先提交记事本数据库表的安排,以备使用。我们先创制一个名称叫perfect_note的数据库(步骤略),然后再成立相应的多寡库表。因为大家的记事本比较轻易,主要不外乎登陆、注册以及记事本的增加和删除改查。所以大家的数据库结构也是比较轻巧的,perfect_note数据库中独有多少个表,贰个是user表,一个是content表,下方会交到详细的介绍进程。

    1.配置pom文件

     

    1.user表的始建

    1.user表的开创

    率先大家来看一下什么在Spring Boot中引进MyBatis。首先大家在http://mvnrepository.com/中找到Mybatis Spring Boot Starter相关的Mvn货仓连接。如下所示,从人间截图中,我们简单看出,这两天MyBatis Spring Boot Starter的新式版本是1.2.0。但是本篇博客中大家运用的是1.1.1版本,因为小编引进1.2.0后,作者的SpringBoot工程根本运转不了,于是换来1.1.1版本就OK了。

    1、运维MySQL的服务器

    率先我们来成立user表,user表担负存款和储蓄用户消息,当用户注册和登陆时都会操作那个表。注册用户时正是往该表中插入用户,登陆时正是询问相应的用户消息。当然,为了德姆o的简洁性,大家的user表中的字段也是比非常少的。下方正是创办user表的SQL语句。在这之中有八个字段,主键id是整型并且是自增的,是用户的独一象征。username字段存款和储蓄的是用户名,password存储的即便用户密码。register_date存款和储蓄的是用户注册时间,是光阴戳,况且私下认可值是眼下光阴。

    率先大家来创建user表,user表担负存款和储蓄用户消息,当用户注册和登入时都会操作这几个表。注册用户时便是往该表中插入用户,登入时就是询问相应的用户信息。当然,为了德姆o的简洁性,我们的user表中的字段也是相当少的。下方正是创立user表的SQL语句。个中有五个字段,主键id是整型况兼是自增的,是用户的无与伦比代表。username字段存储的是用户名,password存储的即使用户密码。register_date存储的是用户注册时间,是光阴戳,並且暗许值是当前时光。

      新葡亰496net 4

    那或多或少虽说轻易,但绝不遗忘运转你的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;
    
    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;
    

    在pom.xml增添上下方的配备项,引进mybatis-spring-boot-starter和mysql-connector-java相关陈设。mysql-connector-java顾明思议,就是连接MySQL数据库使用的信赖包。pom.xml中的配置如下。

      新葡亰496net 5

     

     

            <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.1.1</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.38</version>
            </dependency>
    

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

    2.content表的创造

    2.content表的制造

     

      新葡亰496net 6

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

    始建完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;
    
    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;
    

    2、配置MySQL数据库连接

    2.使用Sequel Pro连接操作数据库

     

     

    因为我们应用的是Spring Boot引进的MyBatis, Mybatis Spring Boot Starter会为大家做过多自动化的配置,比方SqlSessionFactory的创办等等。供给我们做的就是在application.properties文件中实行数据库连接的连锁配置就可以。下方正是大家在布署文件中增多的接连数据库的有关消息。首要配置了数据库连接的门路,数据库的用户名以及密码,数据库的驱动。

    (1)、连接MySQL数据库

     

     

    #Config MySQL Connect Info
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/perfect_note
    spring.datasource.username=root
    spring.datasource.password=admin!@#
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    

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

    二、iOS端基于NSU翼虎LSession互连网伏乞类的包装

    二、iOS端基于NSUPAJEROLSession网络央求类的卷入

     

      新葡亰496net 7

    创建完数据库后,接下去大家来封装iOS端网络央求的共用代码。也正是说,iOS端的互联网央浼就能够调用本有的包装的剧情。当然本有的包装的互连网央浼类是选取NSUPRADOLSession类封装的。

    创建完数据库后,接下去大家来封装iOS端网络央求的共用代码。也正是说,iOS端的互联网央浼就能够调用本有的包装的内容。当然本有的包装的网络央浼类是使用NSU奥迪Q7LSession类封装的。

     

     

     

     

    3、创建Model类

    (2)、创制测量试验数据库

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

    1.字符串常量、闭包回调类型以及枚举的定义

    接下去我们就来成立数据库中的相应数额所要映射的数码Model类。接下来大家就来操作perfect_note数据库中的content表,如下所示。下方数据库及数据库中的数据是我们事先在聊Perfect框架时所利用的数量,本篇博客大家照例对该数据开始展览操作。

    然后点击增多数据库,创造新的数据库就能够,下方大家创立的是test数据库,编码情势用的是utf8。如下所示。

    先是我们先来定义一些封装互联网诉求类要运用的字符串常量以及枚举闭包回调。下方代码段做的便是那件事情,第三个框中定义精通析响应数据时选择到的字符串常量。“SUCCESS”表示央浼成功,“FAILE”表示乞请退步等等。

    率先大家先来定义一些封装互连网央求类要运用的字符串常量以及枚举闭包回调。下方代码段做的正是这件事情,第三个框中定义了分析响应数据时采取到的字符串常量。“SUCCESS”表示诉求成功,“FAILE”表示央浼战败等等。

      新葡亰496net 8

      新葡亰496net 9新葡亰496net 10

    其次个框中定义的是八个闭包变量,用来将呼吁结果回调给调用者。RequestStart正是始于诉求要调用的闭包类型,RequestSuccess则是须要成功后调用的闭包类型,RequestFailed则是呼吁失利要调用的闭包类型。这三者是乞求类对外调换的大桥。

    第一个框中定义的是四个闭包变量,用来将呼吁结果回调给调用者。RequestStart正是始于需要要调用的闭包类型,RequestSuccess则是伸手成功后调用的闭包类型,RequestFailed则是呼吁失利要调用的闭包类型。这三者是央浼类对外沟通的大桥。

    根据上述cotent表中的字段,大家来成立该表所对应的model类。下方这几个Content类便是我们所创设的content表所对应的Model。具体如下所示。

     

    其四个框则是伸手格局的枚举,首要包罗GET、POST、PUT、DELETE,当然还留了CUSTOM()自定义的扩展项目。在该枚举中的description总计属性肩负将日前的枚举对象转变到其对于的字符串,具体如下所示:

    其四个框则是呼吁格局的枚举,首要不外乎GET、POST、PUT、DELETE,当然还留了CUSTOM()自定义的扩充项目。在该枚举中的description总计属性担任将近日的枚举对象转变到其对于的字符串,具体如下所示:

      新葡亰496net 11

    (3)、创建user表

      新葡亰496net 12

      新葡亰496net 13

     

    创办完数据库后,接下去大家要开创二个user表用来进行测验。点击左下方的加号来创设新的数量库表,下方就是大家创造的数码库表的具体步骤以及具体的参数配置。如下所示:

     

     

     

      新葡亰496net 14

    2、网络央求基类的创制

    2、网络乞求基类的开创

    4.创建映射接口

    开创完user表后,大家需求往表里边增多一些测量检验字段,下方正是我们增加的局地字段。在大家的user表中有江湖四个字段,id是主键,用户的独一标示。username-用户名,password-用户密码,create_time是创制时间,create_time的种类是光阴戳,而且私下认可值是现阶段岁月。具体如下所示。

    接下去互连网央求的基类,全体与网络诉求相关的类都要承袭自此类,下方的BaseRequest正是我们网络须求的基类。该类比较轻易,重要注脚了上边定义的八个闭包类型的变量,然后交给了相应的构造器。具体如下所示。

    接下去网络央求的基类,全部与互连网央求相关的类都要一连自此类,下方的BaseRequest正是我们互连网恳求的基类。该类比较轻易,首要注解了下面定义的三个闭包类型的变量,然后交由了相应的构造器。具体如下所示。

    接下去大家来创立数量库表与Model直接的映照接口。在该接口中提供了数量与Model直接的酷炫关系,而且提供了相关的SQL操作。下方的ContentMapper接口正是我们成立的content表与ContentModel之间的映射关系。何况在该接口中的方法所对应的注释中,提供了对应的SQL操作。

      新葡亰496net 15

      新葡亰496net 16

      新葡亰496net 17

    在ContentMapper接口的query()方法中,该办法所对应的SQL语句是“select * from content”,也正是询问全体content中的数据。@Results注解提供了数量库表的字段与Model的习性的照射关系。下方钦定了表字段"id"与"contentId"对应,字段名"create_time"与“createTime”属性相对应,而未钦命的就是字段名与属性名一致。

     

     

     

    queryById()正是带有条件的询问办法了。其参数正是询问的标准。通过@Param表明进行规范化与参数的绑定。具体代码如下所示。

     

    3.网络要求类的卷入

    3.互连网央求类的卷入

      新葡亰496net 18

    二、Perfect数据库连接

    接下去我们采纳NSU悍马H2LSession来封装我们的互连网须要类,下方的Request类正是大家封装的互连网央浼类,该类承接自BaseRequest。下方是Request的一部分代码,下方每一种方法对应着GET、POST、PUT等央浼,能够结合者REST一齐利用。在各种具体央求的法子中会调用sessionDataTaskRequest()方法。会给这些点子传入区别的乞请形式以及路线和参数。稍后大家会给出sessionDataTaskRequest()方法的切切实实贯彻,sessionDataTaskRequest()方法在那之中就使用了NSU本田UR-VLSession相关的剧情提倡了互连网乞请,具体请看下方对sessionDataTaskRequest()方法的事无巨细介绍。

    接下去大家利用NSU奥德赛LSession来封装我们的网络乞请类,下方的Request类正是大家封装的互连网央浼类,该类承继自BaseRequest。下方是Request的部分代码,下方各类方法对应着GET、POST、PUT等诉求,能够结合者REST一同利用。在各样具体诉求的主意中会调用sessionDataTaskRequest()方法。会给那些艺术传入分裂的乞求方式以及路径和参数。稍后大家会给出sessionDataTaskRequest()方法的切切实实贯彻,sessionDataTaskRequest()方法个中就选用了NSU奇骏LSession相关的内容提倡了网络乞求,具体请看下方对sessionDataTaskRequest()方法的事无巨细介绍。

     

    齐全只欠东风,上边策画完MySQL数据库后,我们将要起来打开Perfect框架连接数据库的内容了。

      新葡亰496net 19

      新葡亰496net 20

     

    1.引进依赖库

    人红尘这么些代码段正是sessionDataTaskRequest()方法的全部布局,首先大家按照函数的央浼路径和参数拼接UOdysseyL字符串,相当于率先个框中的部分。在该片段中的query()函数是将参数举行U奥迪Q3L编码调换,那几个函数是从AlamoFire框架中摘过来的。然后创制诉求用的UEnclaveLRequest对象。最后是创造Session对象发起DataTask职分了。当然央求的结果是在completionHandler闭包中开始展览拍卖,稍后会提交completionHandler闭包中的管理格局。

    江湖这么些代码段正是sessionDataTaskRequest()方法的全体布局,首先我们依照函数的呼吁路线和参数拼接UWranglerL字符串,也正是第多少个框中的部分。在该部分中的query()函数是将参数进行ULX570L编码转变,那一个函数是从AlamoFire框架中摘过来的。然后创设须要用的U奥德赛LRequest对象。最终是成立Session对象发起DataTask职责了。当然诉求的结果是在completionHandler闭包中张开拍卖,稍后会提交completionHandler闭包中的管理形式。

    5、创造测试用的Controller

    根据惯例,Perfect框架连接数据库如故须求包的支撑。首先大家必要引进操作MySQL相关的包。

      新葡亰496net 21

      新葡亰496net 22

    为了方便时期,大家就不创建DAO层了,就直接在Controller中来调用上述接口中的方法就能够。下方这么些MyBatisTestController正是我们创设的用来测量检验上述操作的测验调控器。当然大家将该调节器评释为@RestController以便大家对其进展测量检验。然后利用@Autowired表明注入ContentMapper类型的靶子,大家得以因此该对象来操作上述接口中所对应的点子。queryContentById()方法,对应的是contentMapper中的queryById()方法,queryAll()方法对应的是Mapper中的query()方法,具体代码如下所示。

     //MySql数据库注重包

    .Package(url: "",
    majorVersion: 2, minor: 0)

    紧接着,我们提交乞求成功后,对json数据的剖判以及对回到结果的管理。下方正是completionHandler闭包中的代码片段。首先对服务器重临的json数据开始展览解析,分析后将json数据转变来对应的数据类型。然后依据响应报文的result字段来实行对应的操作。要是报文响应符合规律,就调用success()闭包,不然调用failure()闭包,如下所示:

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

    江湖大家直接将获取到的Model或然Model数组实行再次来到,在Spring Boot中,直接再次来到的Model会被映射成相应的JSON格式的数量的,那几个稍后大家会直观的见到。

    俗世是增加完上述的注重包后,重新开展编写翻译的结果:

      新葡亰496net 23

      新葡亰496net 24

      新葡亰496net 25

      新葡亰496net 26

    到现在大家iOS客户端的互联网央浼部分就封装完了,其余实际职业逻辑的网络伏乞调用上述的Request类就能够,稍后会用到Request。

    由来大家iOS客户端的网络哀告部分就封装完了,其余实际专门的学业逻辑的网络乞求调用上述的Request类就能够,稍后会用到Request。

     

     

     

     

    6、访谈上述路由

    2、数据库连接

    三、登陆注册模块的支付

    三、登入注册模块的花费

    咱俩先拜谒/queryContentById那一个路由,再拜见那么些路由时,大家要提供四个参数contentId。也正是用来询问数据的基准。下方截图中的结果正是大家对contentId=6的准则查询的结果。

    人俗尘代码段中的MySQLConnnet类就担当数据库的总是何况接纳相应的数据库。下方是MySQLConnnet类的完全布局,host,port,user,password都以只读的计量属性,担当安插连接数据库的参数。而mysql属性就是三番三回数据库后的操作句柄。下方首要有三个措施,三个是连接数据库的措施connectDataBase()和挑选数据库的艺术selectDataBase()。MySQLConnnet类对外是以单例的款型存在的,可是对外暴漏的不是MySQLConnnet类的目的,而是MySQL类的指标。

    下边包车型客车底蕴职业完毕后,接下去我们即以往做大家相应的事务模块了。首先我们来打开登陆注册模块的费用工作。 首先付诸服务端相应模块的代码,然后在付出相应模块的iOS端的实现。关于Swift3.0连接和操作MySQL的详尽内容请参见上一篇博客《斯维夫特3.0服务端开垦(四) MySQL数据库的连日与操作》,数据库的一连在本有的就不做过多废话了。

    地点的底子工作甘休后,接下去我们即现在做大家相应的职业模块了。首先我们来进展登入注册模块的支出专业。 首先付诸服务端相应模块的代码,然后在付给相应模块的iOS端的完毕。关于Swift3.0连接和操作MySQL的详尽内容请参见上一篇博客《Swift3.0服务端开辟(四) MySQL数据库的连接与操作》,数据库的总是在本有的就不做过多废话了。

      新葡亰496net 27

      新葡亰496net 28

    1、服务端代码

    1、服务端代码

    接下去我们来询问一下持有的数据,相当于访谈queryAll路由。具体结果如下所示。

    接下去提交具体的代码完结,下方正是MySQLConnnet类的单例和个体构造器。具体落到实处如下所示:

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

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

      新葡亰496net 29

      新葡亰496net 30

    江湖代码是用户登陆依旧注册的第一步,通过用户名来查询用户音讯,进而来判断该用户是不是注册,假使未注册则去登记,假若注册过就去登入。假使查询成功,那么就将查询的用户ID和UserName重回给客户端。用户登陆的代码和下方大约,正是通过Select语句来合营该用户名的密码是不是与用户输入的一致,在此就不做过多废话了。

    人尘凡代码是用户登入依然注册的第一步,通过用户名来查询用户音信,进而来剖断该用户是不是注册,借使未注册则去登记,假使注册过就去登入。如若查询成功,那么就将查询的用户ID和UserName再次回到给客户端。用户登陆的代码和江湖大概,正是通过Select语句来同盟该用户名的密码是还是不是与用户输入的平等,在此就不做过多废话了。

     

    凡尘是数据库的总是,核心语句正是下方红框中的内容。主要照旧调用MySQL类中的connect()方法,在调用该方法时传出相应的参数就能够。固然总是失败了会回去相应的errorMessage。具体代码如下所示:

      新葡亰496net 31

      新葡亰496net 32

     

      新葡亰496net 33

    (2)、用户注册

    (2)、用户注册

    二、Thymeleaf模板的引进与运用

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

    尘凡便是用户注册是调用的接口完毕,首若是插入相应的用户新闻,具体如下所示:

    红尘正是用户注册是调用的接口达成,首假设插入相应的用户消息,具体如下所示:

    上面引入MyBatis算是妥了,未来的博客中还只怕会三番两次对MyBatis的相关东西进行介绍。接下来大家就引进Thymeleaf模板,然后突显大家选择MyBatis读取到的连锁数据。下方大家就来看一下在Spring Boot中是怎么样整合Thymeleaf模板的

      新葡亰496net 34

      新葡亰496net 35

      新葡亰496net 36

     

     

    上面那几个代码写完后,配置完相应的路由调用上述方法,大家的服务端代码就完了了。具体路由的安排因为篇幅有限,本篇博客就不做过多废话了。

    上边那几个代码写完后,配置完相应的路由调用上述措施,大家的服务端代码就达成了。具体路由的安插因为篇幅有限,本篇博客就不做过多废话了。

    1、配置pom.xml文件

     

     

     

    在pom.xml中增加Thymeleaf在Spring Boot中有关的库,具体如下所示:

    三、数据库操作

    2、iOS客户端代码完毕

    2、iOS客户端代码完毕

            <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
                <version>1.5.2.RELEASE</version>
            </dependency>
    

    接下去大家将在调用上面包车型地铁数据库操作类类操作实际数据库中的表了。在率先片段我们早已创建好了test数据库,并且创办好了对应的user表。接下来我们将在动用斯威夫特代码来对User表举办增加和删除改查操作了。

    接下去大家来贯彻iOS客户端的记名和挂号的代码,下方便是登录依旧注册的相关UI。用户输入用户后,点击下一步,会调用后台接口推断用户是不是注册过,假若已登记输入密码登陆,假若未注册就输入密码注册和登陆。左边的UIViewController是集体的,多个页面,三个让用户输入用户名,二个则承担接收密码。UI对比轻便,如下所示:

    接下去我们来落到实处iOS客户端的报到和注册的代码,下方正是登入照旧注册的相关UI。用户输入用户后,点击下一步,会调用后台接口判别用户是或不是注册过,借使已注册输入密码登入,假使未注册就输入密码注册和登陆。左侧的UIViewController是国有的,七个页面,贰个让用户输入用户名,贰个则担负接收密码。UI相比轻便,如下所示:

     

     

      新葡亰496net 37

      新葡亰496net 38

    2、成立模板使用的Controller

    1.创设数据库操作基类

     看完UI, 大家来看一下登陆或注册的相干网络央求的代码。下方的UserInfoRequest类就担当全部与用户音信相关的网络乞求,从下方的代码截图中,大家得以看看UserInfoRequest的基类是BaseRequest。下方的queryUserInfo(userName)正是地方右边的页面所调用的点子,用来推断该用户是不是是注册过的用户。在queryUserInfo()中对Request类进行了实例化,况且调用了相应的呼吁方法。並且对相应的风云回调做了拍卖,具体如下所示。

     看完UI, 我们来看一下记名或注册的有关互联网央求的代码。下方的UserInfoRequest类就背负全体与用户音讯相关的网络伏乞,从下方的代码截图中,我们能够看出UserInfoRequest的基类是BaseRequest。下方的queryUserInfo(userName)正是上面侧面的页面所调用的办法,用来判定该用户是不是是注册过的用户。在queryUserInfo()中对Request类举办了实例化,并且调用了对应的央浼方法。何况对相应的轩然大波回调做了拍卖,具体如下所示。

    继之,大家就来成立模板所对应的Controller,如下所示。下方我们照例选拔注入的ContentMapper对象来获取数据。然后将获得的数目增进到model对象中,在充分时,大家会为该多少对象钦定四个参数名称,如下方的"contents"。然后回到模板页面就能够,下方的“display”正是我们模板页面所在的文件名称。

    人凡尘截图便是我们创设的数据库操作的基类,全数数据库表的操作都要持续自该基类,在基类中定义了操作数据库的名字dataBaseName,MySQL操作句柄mysql,以及响应json的格式responsJson。具体如下所示。

      新葡亰496net 39

      新葡亰496net 40

      新葡亰496net 41

      新葡亰496net 42

    在我们相应的ViewController中会调用上述的点子,下方就是用户在输入相应的用户音信后点击next所调用的章程。通过相应的闭包事件,最终将互联网供给的结果回调到了VC中。

    在大家相应的ViewController中会调用上述的议程,下方正是用户在输入相应的用户消息后点击next所调用的不二诀窍。通过相应的闭包事件,最后将网络要求的结果回调到了VC中。

     

     

      新葡亰496net 43

      新葡亰496net 44

    3、创立模板页面

    2.构建user表的操作类

    时至后日大家iOS客户端的记名就落到实处告竣了。 别的的代码和方面包车型地铁思路类似,在此就不做过多废话了。

    迄今大家iOS客户端的报到就贯彻得了了。 别的的代码和地点的思路类似,在此就不做过多废话了。

    接下来大家就该创设模板页面了,也正是此处的display.html。下方就是display.html页面包车型地铁装有剧情。当中大家为数量的展现加多了有的css样式,并应用CDN引进了当前时尚版本的Bootstrap。下方带有“th:”前缀的习性便是Thymeleaf模板的竹签。

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

     

     

    率先应用“th:if="${not #lists.isEmpty(contents)}"”来判定contents属性所对应的值是不是为空,虽然不为空,则推行标签中的内容。然后利用th:if="${not #lists.isEmpty(contents)}"来遍历contents中的内容,类似于while循环。通过th:each="content:${contents}"收取每一类的多寡。通过th:text="${content.contentId}"抽出某个属性的值。具体内容如下所示。

      新葡亰496net 45

    本篇博客,就先到那时候吧,其余代码和上述的思绪向来,遵照上述的笔触去落到实处笔记的增加和删除改查就可以,在此就十分的少废话了。完整德姆o请移步github相关链接。

    本篇博客,就先到那时吧,别的代码和上述的笔触一向,根据上述的思路去完成笔记的增加和删除改查就能够,在此就非常的少废话了。完整德姆o请移步github相关链接。

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
    <meta content="text/html;charset=UTF-8"/>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va PmSTsz/K68vbdEjh4u" crossorigin="anonymous"/>
    <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    <script src="http://www.paidtyping.com/uploads/allimg/190705/125FI3b-45.jpg" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
    <title>Content</title>
    </head>
    <body>
        <div class="center-block" style="width:800px" th:if="${not #lists.isEmpty(contents)}">
            <div class="row"  style="height:50px; background-color: #000000; color: #ffffff">
              <div class="col-md-1">CotentId</div>
              <div class="col-md-2">Title</div>
              <div class="col-md-5">Cotent</div>
              <div class="col-md-1">UserId</div>
              <div class="col-md-2">CreateTime</div>
            </div>
            <div th:if="${not #lists.isEmpty(contents)}">
                <div class="row" th:each="content:${contents}" style="height:40px;background-color: #000000; margin-top: 1px; color: #ffffff">
                  <div class="col-md-1"></div>
                  <div class="col-md-2"></div>
                  <div class="col-md-5"></div>
                  <div class="col-md-1"></div>
                  <div class="col-md-2"></div>
                </div>
            </div>
        </div>
    
    </body>
    </html>
    

     

    新葡亰496net:0服务端开发,记事本的开发。github分享链接: https://github.com/lizelu/PerfectDemo 

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

     

    (1)、InsertUserInfo()----"增"

    4、访谈上述路由

    凡间正是插入数据的切切实实代码,第三个框正是大家要实践的SQL语句,然后利用mysql操作句柄调用query()方法开始展览SQL语句的奉行。施行成功后,查询插入的多少并回到查询的结果,如下所示。

    制造完浮现用的模版后,接下去大家要做的职业正是要对其进展访谈了。下方截图正是大家最后的拜会结果。

      新葡亰496net 46

      新葡亰496net 47

     

    本篇博客就先到那时吧,现在还大概会利用到MyBatis的任何剧情,到时候再细说。

    (2)、deleteUserInfo()----"删"

    本篇博客所波及代码的github地址:https://github.com/lizelu/SpringBootProject

    接下去大家来看一下剔除的具体操作,下方截图正是deleteUserInfo()的有血有肉落到实处。下方的诀窍与插入大约,先给出delete的SQL语句,然后再调用mysql操作句柄的query()操作,具体代码如下所示:

     

      新葡亰496net 48

     

    (3)、updateUserInfo----更新用户音信

    江湖是创新用户音讯的代码,与上多个代码大约,只不过是透过mysql操作句柄调用query()方法实行的是update的SQL语句。更新时大家应用了MySQL的now()函数来更新时间,具体代码如下所示。

      新葡亰496net 49

     

    (4)、queryUserInfo----查询

    随即我们来兑现一下查询用户音讯的代码。下方正是询问用户信息的代码,查询的代码稍微复杂一些,在实行完询问的SQL语句后,还亟需价格查询结果实行仓库储存。在仓库储存后,会回来查询的结果results。我们得以因此results的forEachRow()函数的尾随闭包来获得每行的数量。在抽取数据后,将其转变来相应的字典,然后将存有查询结果的字典存入到responseJson中,然后将responseJson调换为json字符串再次来到给用户就可以。具体做法如下所示。

      新葡亰496net 50

     

     

    四、测量试验用例

    上面大家写完操作User表的对应的法子后接下去大家就来测量试验一些实际的结果。为了有助于测验,大家安顿4个路由非常用来对User表的增加和删除改成开始展览操作。每一个路由对应着地点每种方法。本有的就提交相应的测量试验用例。为了方便测量检验,大家在路由安排时,钦定央浼方法全部是GET央浼。

     

    1、对“增”的测试

    接下去大家对InsertUserInfo()的的测量试验,首先大家抬高贰个央浼形式为GET的“/create”路由,然后拿走用户提交的userName和password。获取实现后,调用UserOperator对象的insertUserInfo()方法将数据插入到数据库中。当然插入后,会随着将数据查询出来重回给客户端的。

      新葡亰496net 51

    咱俩在浏览器里寻访“

      新葡亰496net 52

     

    2.对“改”的测试

    接下去大家就要测验一下updateUserInfo()这么些函数,该片段与上述的代码差不离,也是供给配备一个呼吁情势为GET的换代路由“/update”。然后在该路由中赢得诉求参数,然后调用updateUserInfo()那些函数就能够。具体代码就不做过多废话了,直接看下方的测量检验结果吗。通过结果简单看出,用户名被改换成准确的Hello了,并且时间也被更新了。

      新葡亰496net 53

     

    剩余的查与删,和上边的演示大约,在此就不做过多废话了,我们的MySQL数据库的操作就先说起那吗。官方上还介绍了一些数据库的ORM操作,个中就有MySQL的ORM操作,能够简化一些数量操作。那点就留下读者自个儿去看吗。

     

    本文由新葡亰496net发布于奥门新萄京娱乐场,转载请注明出处:新葡亰496net:0服务端开发,记事本的开发

    关键词: