Druid数据源的使用
目前市场上最主流的数据源,是阿里巴巴计算平台事业部出品,为监控而生的数据库连接池。
官网地址:https://github.com/alibaba/druid
中文文档:https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
整合Druid的两种方式:
导入相关依赖进行自定义配置
使用starter场景启动器自动配置
自定义方式导入依赖123456<!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.4</version></dependency>
基本配置123456spring: datasource: dr ...
单元测试
JUnit5 的变化Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库
作为最新版本的JUnit框架,JUnit5与之前版本的Junit框架有很大的不同。由三个不同子项目的几个不同模块组成。
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
JUnit Platform: Junit Platform是在JVM上启动测试框架的基础,不仅支持Junit自制的测试引擎,其他测试引擎也都可以接入。
JUnit Jupiter: JUnit Jupiter提供了JUnit5的新的编程模型,是JUnit5新特性的核心。内部包含了一个测试引擎,用于在Junit Platform上运行。
JUnit Vintage: 由于JUint已经发展多年,为了照顾老的项目,JUnit Vintage提供了兼容JUnit4.x,Junit3.x的测试引擎。
注意:
SpringBoot 2.4 以上版本移除了默认对 Vintage 的依赖。如果需要兼容JUnit4,则需自行引入(不能使用JUnit ...
Mybatis问题解决
There is no getter for property前两天工作中遇到这个异常,一开始还以为是实体类漏写set/get方法,经排查不是。
异常大概如下:
1org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'user' in 'class top.nanzx.entity.User'
dao层代码大概如下:
12@Select("SELECT * FROM users WHERE id = #{user.id}")User getUser(User user)
解决:
12@Select("SELECT * FROM users WHERE id = #{user.id}")User getUser ...
前后端分离项目的部署
Windows环境部署前端
axios.defaults.baseURL = "http://localhost:8080",配置的是前端访问后端接口的服务。
前端部署还需考虑一个问题:打包之后项目资源引用路径,比如我们打包后链接是否需要带项目名称等。按照Vue官方的部署说明,我们需要添加一个vue.config.js文件:module.exports = { publicPath: '/' }。
执行打包命令:npm run build,把打包出来的dist文件夹内的所有文件(不包括dist文件夹)都复制到nginx的html文件夹中。
启动nginx,然后浏览器输入http://localhost,就可以访问到我们的vue项目,nginx默认端口是80。
我们点击任意刷新界面,这时候出现了404,这是因为刷新之后nginx就找不到路由了。
vue项目的入口是index.html文件,nginx路由的时候都必须要先经过这个文件,所以我们得给nginx定义一下规则,让它匹配不到资源路径的时候,先去读取index.ht ...
项目的总结
浏览器异常:TypeError问题描述封装好的request.js:
12345678910111213141516171819202122232425262728import axios from 'axios'export function request(config) { // 1.创建axios的实例 const instance = axios.create({ baseURL: 'http://127.0.0.1:8181', timeout: 5000 }) // 2.axios的拦截器 // 2.1.请求拦截的作用 instance.interceptors.request.use(config => { return config }, err => { console.log(err); }) // 2.2.响应拦截 instance.interceptors.response.use(res =&g ...
SpringBoot整合Vue的小案例
众所周知现在开发都是前后端分离,后端选用Spring Boot,前端选用Vue技术。
由于刚学完Vue.js,所以想了解下现在主流的前后端分离是如何实现的,所以写了个小demo。
案例需求:将数据库的goods表展示到前端页面。
所用技术:
SpringBoot
MyBatis
Vue.js
SpringBoot目录结构
基础项目配置Pom.xml12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocat ...
网络模块封装
axios中文网:http://www.axios-js.com/zh-cn/docs
选择什么网络模块?Vue中发送网络请求有非常多的方式,那么在开发中如何选择呢?
传统的Ajax是基于XMLHttpRequest(XHR)。
为什么不用它呢?因为它的配置和调用方式等非常混乱,编码起来看起来就非常蛋疼。
所以真实开发中很少直接使用,而是使用jQuery-Ajax。
在前面的学习中,我们经常会使用jQuery-Ajax,相对于传统的Ajax非常好用。
为什么不选择它呢?首先,我们先明确一点:在Vue的整个开发中都是不需要使用jQuery了。
那么,就意味着为了方便我们进行一个网络请求,特意引用一个jQuery,你觉得合理吗?
jQuery的代码1w+行,Vue的代码才1w+行。完全没有必要为了用网络请求就引用这个重量级的框架.
官方在Vue1.x的时候,推出了Vue-resource。
Vue-resource的体积相对于jQuery小很多。另外Vue-resource是官方推出的。
为什么不选择它呢?
在Vue2.0推出后,Vue作者就在GitHub的Issues中说 ...
Vuex详解
PromisePromise 对象代表了未来将要发生的事件,用来传递异步操作的消息。
在CSDN找了一篇比较不错的博客:ES6 Promise用法小结
补充:缩写
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><script> // wrapped into // 网络请求: aaa -> 自己处理(10行) // 处理: aaa111 -> 自己处理(10行) ...
Vue Router详解
认识路由什么是路由路由(routing)就是通过互联的网络把信息从源地址传输到目的地址的活动。 — 维基百科
在生活中, 我们也有听说过路由的概念: 路由器。
路由器提供了两种机制: 路由和转发。
路由是决定数据包从源头到目的地的路径。
转发是将输入端的数据转移到合适的输出端。
路由中有一个非常重要的概念叫路由表。
路由表本质上就是一个映射表, 决定了数据包的指向。
后端路由阶段早期的网站开发,整个HTML页面是由服务器来渲染的,服务器直接生产渲染好且对应的HTML页面,返回给客户端进行展示。
但是一个网站这么多页面,服务器如何处理呢?
一个页面有自己对应的网址, 也就是URL。
URL会发送到服务器,服务器会通过正则对该URL进行匹配,并且最后交给一个Controller进行处理。
Controller进行各种处理, 最终生成HTML或者数据, 返回给前端展示。
这就完成了一个IO操作。
上面的这种操作,就是后端路由:
当我们页面中需要请求不同的路径内容时,交给服务器来进行处理,服务器渲染好整个页面,并且将页面返回给客户端。
这种情况下渲染好的页面,不需要单独加载任 ...