前言
从大学开始接触 java 后台开发,到后来了解了更多的编程语言的开发。发现 java 的开发可以说是相较而言很复杂的了,光是 Spring MVC 的配置要是没有经历系统的学习,可能就能劝退一波了。所以衍生而来的是如 mybatis-generator 这类代码生成插件,即根据数据库表结构来生成相应的 po 层、dao 层、以及 dao 层的映射。相较而言是比较简便的使用了,但是每次还得写 service 层和 controller 层的一些基础代码。但是最近在公众号上发现一个更好用的 Spring Boot 的项目骨架。毕竟大佬给搭的骨架和我这种菜鸡搭的无论从代码结构或者简便性上来说都是没法比的哈哈。项目介绍地址为: https://mp.weixin.qq.com/s/Cb4dSVlhNqsHQRp_PECF1w 。github 地址为: https://github.com/lihengming/spring-boot-api-project-seed 。
通过使用大佬的项目骨架,一方面是代码逻辑、架构更优美,使用代码生成器生成代码后会创建 model、dao、service、web 等包。所以我们需要做的就是设计好表结构后,生成代码,然后编写控制器中的逻辑处理的代码即可。
使用步骤
第一步:新建一个 Spring 项目
第二步:到 github 上把项目下载下来
第三步:将需要的部分整合到我们的项目中
因为我想整合到原有的项目中,所以我把这个开源项目的中我需要的东西 copy 到我的项目中。当然也可以直接在这个开源项目上改,将包名啥的改成自己的即可。
第四步:修改部分内容
- pom.xml
去除导入 MySQL JDBC 驱动中的这一行
<scope>runtime</scope>
- MybatisConfigurer、WebMvcConfigurer
修改原有导入类的包名为当前正确的包名。
- ProjectConstant
修改 BASE_PACKAGE
- application-dev.properties
数据源配置,请修改为项目的实际配置
修改 com.mysql.jdbc.Driver为 com.mysql.cj.jdbc.Driver
- CodeGenerator
修改数据库配置、mysql 驱动、要生成代码的表名
第五步:生成代码
运行 CodeGenerator
第六步:愉快的写代码
注意这边 mybatis 的 dao 层用的接口是 core 中的。
使用过程中找下提供的接口即可。
统一API响应结果封装
对响应结果进行了封装,无论是成功或者其他状态,都会使接口更规范。
拦截器使用
- 接口签名认证拦截器(项目给出)
- 新增拦截器只需调用registry.addInterceptor,然后new一个HandlerInterceptorAdapter,并根据需求实现其中的preHandle方法(预处理)、postHandle方法(返回处理),afterCompletion方法(后处理)。
假设做一个登陆界面的拦截器。
registry.addInterceptor(new HandlerInterceptorAdapter() {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//验证请求的地址是否是登录地址 如果是继续往下执行
String uri=request.getRequestURI();
uri = uri.substring(uri.lastIndexOf("/")+1);
if(uri.equals("login")){
return true;
}
//验证session中是否有用户存在 如果有 继续执行
if(request.getSession().getAttribute("user")!=null){
return true;
}
//执行跳转到登录页面
response.sendRedirect(request.getContextPath()+"/main/login");
return false;
}
});
效果如下:
静态资源映射
项目骨架中没有加这个,如果是要开发web项目的话需要加一个静态资源的映射,并且修改拦截器的使用,避免拦截了静态资源
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//将访问/static/** 的路由映射到classpath:/static/ 目录下
registry.addResourceHandler("/static/**").addResourceLocations(ResourceUtils.CLASSPATH_URL_PREFIX+"/static/");
}
拦截器判断是否为访问静态资源
//判断请求是否为静态资源
int result = uri.indexOf("static/");
if(result != -1){
return true;
}