|  | 
|  | 1 | +## SprintBoot-Vue | 
|  | 2 | + | 
|  | 3 | +SpringBoot + 前端MVVM 基于Java的微服务全栈快速开发实践 | 
|  | 4 | + | 
|  | 5 | +<p align="center"> | 
|  | 6 | +  <a href ="##"><img alt="spring_vue" src="https://github.com/boylegu/SpringBoot-vue/blob/master/images/newlogo.jpg?raw=true"></a></p> | 
|  | 7 | + | 
|  | 8 | +<h4 align="center" style="color:	#3399FF"> | 
|  | 9 | +Convenient & efficient and better performance for Java microservice full stack. | 
|  | 10 | +</h4> | 
|  | 11 | + | 
|  | 12 | +<p align="center" style="color: #FF66FF">Commemorate the 6 anniversary of enter the profession.</p> | 
|  | 13 | + | 
|  | 14 | +<p align="center" style="color: #FF9933">Give beginner as a present.</p> | 
|  | 15 | + | 
|  | 16 | +<p align="right" style="color: #3399FF">———————By Boyle Gu</p> | 
|  | 17 | + | 
|  | 18 | +## 背景 | 
|  | 19 | +如今Web开发领域,当有人提到Java时,总会让人觉得臃肿、古老而过时且开发效率没有某些动态语言高效,甚至在此之前还有人高喊“Java 已死!”,但是事实真是如此吗?其实如果你一直关注着Java,那你的感悟会更深,尽管它有很多的缺点和啰嗦,但不可否认,Java依然是工业界中最优秀的语言,而且它一直保持着与时俱进。本项目将使用SpringBoot + Vue2 + Webpack2 配合最简单CRUD的逻辑来展示一个基于Java的微服务全栈快速开发实践的Demo。 | 
|  | 20 | + | 
|  | 21 | +在某些时候,其开发效率已经并不比某些动态语言低。 | 
|  | 22 | + | 
|  | 23 | +## 为什么是SpringBoot | 
|  | 24 | + | 
|  | 25 | +首先先来简单的介绍一下Spring,它是目前Java生态中最广为人知、流行的企业级Web框架。不像其他一些框架仅聚焦在某个领域,Spring框架通过其容器化组件式管理及开发,可提供或定制各式各样的功能来满足企业化需求。 | 
|  | 26 | + | 
|  | 27 | +那么相较于Spring,Spring Boot的目标是更加容易的创建Spring应用、建立自动化、最少人为干预的生产级配置,真正意义做到开箱即用,并且对于新用户及Spring平台的用户极易上手,快速开发。 | 
|  | 28 | + | 
|  | 29 | +下图主要展示了Spring Boot在Spring庞大的生态圈中的层级关系 | 
|  | 30 | + | 
|  | 31 | +<p align="center"> | 
|  | 32 | +  <a href ="##"><img alt="spring_vue" src="https://github.com/boylegu/SpringBoot-vue/blob/master/images/springboot.png?raw=true"></a></p> | 
|  | 33 | +   | 
|  | 34 | +SpringBoot的目标主要: | 
|  | 35 | + | 
|  | 36 | +- 为所有Spring开发提供一个从根本上更快,且随处可得的入门体验。 | 
|  | 37 | + | 
|  | 38 | +- 开箱即用,但通过不采用默认设置可以快速摆脱这种方式。 | 
|  | 39 | + | 
|  | 40 | +- 提供一系列大型项目常用的非功能性特征,比如:内嵌服务器,安全,指标,健康检测,外部化配置。 | 
|  | 41 | + | 
|  | 42 | +**绝对没有代码生成,也不需要XML配置。** | 
|  | 43 | + | 
|  | 44 | +下面展示的是本项目的SpringBoot相关代码片段,你觉得简单么? | 
|  | 45 | + | 
|  | 46 | +~~~~java | 
|  | 47 | +@RestController | 
|  | 48 | +@RequestMapping("/api/persons") | 
|  | 49 | +public class MainController { | 
|  | 50 | + | 
|  | 51 | +    @RequestMapping( | 
|  | 52 | +            value = "/detail/{id}",  | 
|  | 53 | +            method = RequestMethod.GET,  | 
|  | 54 | +            produces = MediaType.APPLICATION_JSON_VALUE | 
|  | 55 | +            ) | 
|  | 56 | +    public ResponseEntity<Persons> getUserDetail(@PathVariable Long id) { | 
|  | 57 | + | 
|  | 58 | +        /* | 
|  | 59 | +        *    @api {GET} /api/persons/detail/:id  details info | 
|  | 60 | +        *    @apiName GetPersonDetails | 
|  | 61 | +        *    @apiGroup Info Manage | 
|  | 62 | +        *    @apiVersion 1.0.0 | 
|  | 63 | +        * | 
|  | 64 | +        *    @apiExample {httpie} Example usage: | 
|  | 65 | +        * | 
|  | 66 | +        *        http GET http://127.0.0.1:8000/api/persons/detail/1 | 
|  | 67 | +        * | 
|  | 68 | +        *    @apiSuccess {String} email | 
|  | 69 | +        *    @apiSuccess {String} id | 
|  | 70 | +        *    @apiSuccess {String} phone | 
|  | 71 | +        *    @apiSuccess {String} sex | 
|  | 72 | +        *    @apiSuccess {String} username | 
|  | 73 | +        *    @apiSuccess {String} zone | 
|  | 74 | +        */ | 
|  | 75 | + | 
|  | 76 | +        Persons user = personsRepository.findById(id); | 
|  | 77 | + | 
|  | 78 | +        return new ResponseEntity<>(user, HttpStatus.OK); | 
|  | 79 | +    } | 
|  | 80 | + | 
|  | 81 | +} | 
|  | 82 | +~~~~ | 
|  | 83 | + | 
|  | 84 | +### 为什么是MVVM | 
|  | 85 | + | 
|  | 86 | +那么在我继续之前,我也想和大家回顾一下Web开发的发展简史: | 
|  | 87 | + | 
|  | 88 | +- 第一阶段: 网页三剑客,生猛的通过原生javascript直接操作Dom树; | 
|  | 89 | + | 
|  | 90 | +- 第二阶段: JQuery诞生,配合前端MVC为代表的Backbone.js, 让我们可以优雅而简单的操作Dom树; | 
|  | 91 | + | 
|  | 92 | +- 第三阶段: 后端架构升级为MVC,前后端分工更清晰,前端工程化、ECMAScript规范开始崭露头角; | 
|  | 93 | + | 
|  | 94 | +- 第四阶段: 后端架构进入了微服务时代,前端架构不仅升级为MVVM,ES6更是成为目前事实上的标准; | 
|  | 95 | + | 
|  | 96 | +在这里,我不想过于神化MVVM有多么的先进,JQuery为代表的MVC有多么的落后,但确实MVVM有着很多先进的特性: | 
|  | 97 | + | 
|  | 98 | +- 低开销 | 
|  | 99 | + | 
|  | 100 | +- 易维护 | 
|  | 101 | + | 
|  | 102 | +- 可重用 | 
|  | 103 | + | 
|  | 104 | +### 为什么选择Vue.js | 
|  | 105 | + | 
|  | 106 | +Vue.js是MVVM设计模式中目前最火热的一个前端框架之一,除了性能表现优异之外,与类似React相比,更轻量级、更容易上手。 | 
|  | 107 | + | 
|  | 108 | +通过Vue中的“单文件组件”特性,更灵活的定义组件,不仅使代码结构更清晰,而且能与任何其他组件进行随意组合,更具复用性。 | 
|  | 109 | + | 
|  | 110 | +<p align="center"> | 
|  | 111 | +  <a href ="##"><img style="box-shadow: 8px 8px 5px #888888;"alt="sanic_vue" src="http://i2.muimg.com/536217/5ae4b10becac44b0.png"></a> | 
|  | 112 | + | 
|  | 113 | +### Webpack是什么 | 
|  | 114 | +Webpack提供了一整套前端工程自动化的解决方案 | 
|  | 115 | + | 
|  | 116 | +## Demo | 
|  | 117 | + | 
|  | 118 | +一个简单的“上海人员信息查询系统”作为例子 | 
|  | 119 | + | 
|  | 120 | + | 
|  | 121 | +### 具备的功能(v0.1) | 
|  | 122 | + | 
|  | 123 | +- Spring Boot (后端) | 
|  | 124 | +   | 
|  | 125 | +  - 通过在Spring Boot中建立基于RestFul-API并使用`@ RequestMapping`实现一个基本的CRUD逻辑 | 
|  | 126 | +   | 
|  | 127 | +  - 处理CORS(跨域资源共享) | 
|  | 128 | +   | 
|  | 129 | +  - 在Spring Boot中进行单元测试 | 
|  | 130 | + | 
|  | 131 | +  - 支持热加载 | 
|  | 132 | +   | 
|  | 133 | +  - 增加api接口文档  | 
|  | 134 | +   | 
|  | 135 | +  - 通过SpringBoot配合JPA来实现RestFul-API的分页 | 
|  | 136 | +    | 
|  | 137 | +- VueJS & webpack (前端) | 
|  | 138 | + | 
|  | 139 | +  - 遵循ECMAScript 6 规范 | 
|  | 140 | +   | 
|  | 141 | +  - 如何在vue中使用‘单文件组件’进行开发编码 | 
|  | 142 | +   | 
|  | 143 | +  - 演示‘非父子组件’如何进行简单的通信以及‘父子组件’之间如何传递数据 | 
|  | 144 | +   | 
|  | 145 | +  - 如何和后端进行数据交互 | 
|  | 146 | + | 
|  | 147 | +  - 如何在vue中优雅的引入第三方JS库 | 
|  | 148 | + | 
|  | 149 | +  - 格式化时间 | 
|  | 150 | +   | 
|  | 151 | +  - 分页实现 | 
|  | 152 | +   | 
|  | 153 | +  - 可复用组件 | 
|  | 154 | +  | 
|  | 155 | +     - DbHeader.vue | 
|  | 156 | +     - DbFooter.vue  (sticky footer)  | 
|  | 157 | +     - DbFilterinput.vue | 
|  | 158 | +     - DbModal.vue | 
|  | 159 | +     - DbSidebar.vue | 
|  | 160 | +     - DbTable.vue  | 
|  | 161 | +      | 
|  | 162 | +     >> 得益于类似vue、react等MVVM模式,本项目的任何组件,只要您觉得合适,都可以复用在您的任何项目中,避免重复造轮子。 | 
|  | 163 | +   | 
|  | 164 | +  - 如何通过webpack2配置来自动化构建前端环境(包括如何配置vue2、处理静态文件,构建不同环境等等)   | 
|  | 165 | + | 
|  | 166 | +### 本项目主要技术栈 | 
|  | 167 | +- Java 1.7 | 
|  | 168 | +- Spring Boot 1.5.x | 
|  | 169 | +- Maven | 
|  | 170 | +- sqlite (not recommend, only convenience example) | 
|  | 171 | +- vueJS 2.x | 
|  | 172 | +- webpack 2.x | 
|  | 173 | +- element ui | 
|  | 174 | +- axios | 
|  | 175 | + | 
|  | 176 | +### 准备工作 | 
|  | 177 | + | 
|  | 178 | +- 安装JDK1.7或更新的版本 | 
|  | 179 | +- 安装Node.js/NPM | 
|  | 180 | + | 
|  | 181 | +### 安装   | 
|  | 182 | +         | 
|  | 183 | +- 编译前端开发环境 | 
|  | 184 | + | 
|  | 185 | +        cd springboot_vue/frontend | 
|  | 186 | + | 
|  | 187 | +        npm install  | 
|  | 188 | + | 
|  | 189 | +### 使用 | 
|  | 190 | + | 
|  | 191 | +- 运行Spring Boot后端服务 | 
|  | 192 | + | 
|  | 193 | +        cd springboot_vue/target/ | 
|  | 194 | + | 
|  | 195 | +        java -jar springboot_vue-0.0.1-SNAPSHOT.jar | 
|  | 196 | + | 
|  | 197 | + | 
|  | 198 | +[]() | 
|  | 199 | + | 
|  | 200 | +- 运行前端服务 | 
|  | 201 | + | 
|  | 202 | +        cd springboot_vue/frontend | 
|  | 203 | + | 
|  | 204 | +        npm run dev | 
|  | 205 | + | 
|  | 206 | + | 
|  | 207 | +> 你也可以在生产环境中运行`cd sanic_crudvue/frontend;npm run build`进行编译并配合Nginx | 
|  | 208 | +         | 
|  | 209 | +## 未来计划 | 
|  | 210 | + | 
|  | 211 | +本项目可以作为工作参考、学习或者教学演示,之后将陆续以版本的形式,即每个版本都会新增不同的功能演示项,不定期进行发布更新,有以下功能已经在计划之中: | 
|  | 212 | + | 
|  | 213 | +1. 用户认证 | 
|  | 214 | +2. 引入更高级的vuex组件通信机制 | 
|  | 215 | +3. 演示vue-route的使用 | 
|  | 216 | +4. 加入docker部署环境 | 
|  | 217 | +5. 新增针对yarn的支持 | 
|  | 218 | +... ... | 
|  | 219 | + | 
|  | 220 | +## 技术、教学支持 | 
|  | 221 | + | 
|  | 222 | +由于个人时间暂时有限,关于Sanic、Vue、webpack等所有的核心的议题内容非常庞大,因此我将以以下形式来回答和解释关于本项目Demo问题: | 
|  | 223 | + | 
|  | 224 | +1. 以Github Issue的形式进行提问 | 
|  | 225 | + | 
|  | 226 | +3. QQ群:315308272 | 
|  | 227 | + | 
|  | 228 | +## My Final Thoughts | 
|  | 229 | + | 
|  | 230 | +``` | 
|  | 231 | +      .   ____          _ | 
|  | 232 | +     /\\ / ___'_ __ _ _(_)_ __  __ _ | 
|  | 233 | +    ( ( )\___ | '_ | '_| | '_ \/ _` | | 
|  | 234 | +     \\/  ___)| |_)| | | | | || (_| | | 
|  | 235 | +      '  |____| .__|_| |_|_| |_\__, | | 
|  | 236 | +\  ===========|_|==============|___/== ▀ | 
|  | 237 | +\- ▌          SpringBoot-vue             ▀ | 
|  | 238 | + - ▌                            (o)        ▀ | 
|  | 239 | +/- ▌            Go Go Go !               ▀ | 
|  | 240 | +/  =================================== ▀ | 
|  | 241 | +                    ██ | 
|  | 242 | +
 | 
|  | 243 | +
 | 
|  | 244 | +``` | 
|  | 245 | + | 
0 commit comments