疾风式全栈(13)-后端开发基础(草稿)

有了数据库,我们就有了全栈所用到的整套技术,从浏览器到数据库.那么我们就开始尝试把他们整合起来,体验一下实际的软件开发大概是些什么内容.

我们还是以简单的原则,首先实现基本功能.如果我们要在自己的电脑上测试,可能还是需要自己安装数据库软件.云数据库目前我知道免费的只有腾讯云的小程序开发环境,但是无法从公网访问,只有通过上传代码到腾讯云,在内部连接数据库.而代码环境目前只支持php和node.其中又以node的支持最完备.

而要在自己电脑上安装的话,我们一般也是选择mysql. oracle 和 sql server的安装包都很大,运行起来也不小.mysql可以直接在官网下载安装版.基本是一路下一步就可以,在网上也可以搜到很多指引.尽管我是偏好解压版,但是mysql的解压版,每次设置都会出一些问题,不想折腾的就用安装版吧.安装过程中,会为root用户设置密码.还有一个默认的端口号,没什么特殊要求可以不用改.连接用的图形化客户端也可以选择官方的workbench,虽然其他可能用的更多,不过好像都不是免费的.

假设我们建好了数据库,表和数据都添加好了.我们来以一种简单快捷的方式实现一个基本的服务器端.

使用Idea,选择新建项目,类型选择Spring Initializr, 选择添加web,data rest,data jpa和mysql支持.就生成了一个项目骨架.在配置文件中添加数据库的地址和用户名密码,再使用idea的数据库连接插件,根据数据库表生成实体类,为每一个实体类创建一个repository继承JPARepository.然后启动项目,根据提示的路径,访问接口地址,就可以看到返回的数据库中的数据了.增删改查都是可以的,只要熟悉了接口的命名规则就可以用了.

找不到接口地址的,可以添加HAL Browser支持,就可以在网页上查看所有生成的接口了.具体方法可搜索或参考官网文档.

以这样的方式,从数据库到web,基本上只需要简单的几行声明,就可以实现基本功能了.如果有更具体的需要,spring data rest也提供了相应的处理函数,把代码写在对应的处理函数里就可以了.

通过这种方式,后台接口基本上自动生成,再加上自己写的具体业务代码,以及通过过滤器实现授权访问控制.后端基本上是非常简单和清楚的.数据通过HTTP接口开放给前端,前端可以根据实际需求在前端展示和处理数据.这样给了前端极大的自由和灵活性,多数时候也给了客户更加流畅的体验.

meteor.js也是采取这样的思路,轻薄的后台,自动同步数据的传输机制.提高了开发效率和客户端的响应速度.

采用类似思想的技术还包括
美团的koa-restql,基于node和koa2.
CouchDB支持restful接口操作,不过并非关系数据库.
其他大家可以搜索或自己修改.

如果不使用idea的话,Spring Initializr也可以通过网站使用.实体类也可以手工编写或者通过其他方式生成.

当然也可以自己写调用sql和生成HTTP响应的代码.这时候我们就要明白框架自动帮我们做了哪些工作.

  • 首先,Spring Initializr生成的项目框架是基于spring boot的.spring是java社区著名的框架,核心功能是依赖注入,我理解就是对大量对象的统一管理.java里的对象在spring里称为bean,spring容器中的bean是默认单例的,不用担心会占用大量多余的内存.相互调用也只需要简单的声明就可以.而spring boot对配置更加简化,一些基本的配置都自动实现了.所以我们连接数据库所需要配置的DataSource,在spring boot中,只要添加了数据库驱动的jar文件,填写了地址和用户名密码,就自动配置好了,甚至帮我们建好了连接池,非常方便.

  • spring data提供的是统一的数据访问模型,对于关系数据库和非关系数据库都提供了一致的接口.
    我们这里使用的JPA是java社区提供的关系数据库映射规范.通过标准的函数,替代手工编写sql语句,实际上是自动帮我们生成了sql执行.一般使用的实现还是hibernate.不过如果我们用了spring data rest,这些我们就都不用关心了.如果我们准备自己写sql,其实这些我们也不用关心.我们可以直接用spring的JDBCTemplete.JDBC才是java真正和关系数据库交互的标准.但是直接使用JDBC需要写大量模版代码,而使用JDBCTemplete,我们只需要关系sql语句,传递的参数,和接收数据的集合就可以了.

  • 对于HTTP请求的处理,spring也提供了方便的封装,在处理函数上加上声明,就可以自动接收和转换传入的参数,返回的结果也可以自动格式化成HTTP响应.

这也就是在java项目中常见的三层结构,数据访问层,web层和中间的service层,处理业务逻辑的部分.
过去流行SSH,现在常用SSM,不过其实有spring足矣.MyBatis也是手工编写sql语句的,个人感觉没有解决太多问题,现在在国内的流行,感觉只是一种思维惯性,拉个框架凑数成三个而已.我们只想越简单越好.

我们重点说一下关于HTTP的请求和相应信息的类型.这关系到前后端如何发送和接收,以及在spring里如何自动转化的问题.传送数据常用的格式我们前面说过是JSON和XML.XML基于标签,类似HTML.JSON基于js.其实现在主要用的也是json.在请求和相应头部可以设置content-type: application/json.这样在前端js中,发送和接收都很方便,在spring中,由于默认配置了JSON解析器,一般也是可以自动转换格式的.返回时一般也不会有问题,接收时,如果出现问题,接收不到,就要检查发送的类型是否匹配.可以在网上搜一下,仿照别人的写.常见的一个问题是,请求经常会采用form格式(content-type是application/x-www-form-urlencoded,类似?a=1&b=2这样的格式),而这在spring里获取的格式是不一样的.所以这里一定要细致和统一.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,652评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,806评论 6 342
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx阅读 8,327评论 0 16
  • 信用卡透支,花呗透支了,就连温度都透支了 我们在这冰冷的世界里却不能获得很温暖 所有的温暖好像在娘胎里就已用完
    小爷0245阅读 170评论 0 0
  • 盼望已久的旅行,与康婷的小伙伴们开始了!这也是今年的旅游计划吧!9月22日从咸阳机场出发到深圳! ![图片发自简书...
    海蓝蓝蓝蓝蓝阅读 350评论 0 0