如何使用VS Code编写Spring Boot (第二弹)
本篇文章是续《如何使用VS Code编写Spring Boot》 之后,结合自己.net经验捣鼓的小demo,一个简单的CRUD,对于习惯了VS操作模式的.net人员非常方便,强大的智能提示,简单又干净,一起开启愉快的java编程之旅吧。
一.环境搭建
请移步《如何使用VS Code编写Spring Boot》 ,当页面输出Hello World 就算成功啦
二.熟悉Spring注解,跟路由
Spring真的是将注解用到了极致,能一个注解搞定的东西,从来不罗嗦,熟练的使用这些注解不但减轻了代码工作量,而且可读性更高,这里直接放图了,我也是用到哪些百度哪些

路由方面直接在注解里定义就可以了,比较方便, 在.net里mvc,webapi 都可以全局配置,我想java应该也可以的,这里就不纠结了
三.加个过滤器,方便以后记录日志,验证权限什么的
百度了一下,这个就直接抄了,Spring已经默认给实现了过滤器,大致执行流程是 初始化->action执行前->action执行后->注销过滤器
public class LogCostFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//初始化
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) servletRequest;
String requestURI = req.getRequestURI();
System.out.println("--------------------->过滤器开始:请求地址"+requestURI);
if(requestURI.contains("test")){
//重定向
servletRequest.getRequestDispatcher("/hello").forward(servletRequest, servletResponse);
}else{
filterChain.doFilter(servletRequest, servletResponse);
}
System.out.println("--------------------->过滤器结束:请求地址"+requestURI);
}
@Override
public void destroy() {
//注销
}
}

写好过滤器后,再把过滤加载进去,这里也是直接抄,大致可以看明白触发条件,加载的过滤器名称,猜测应该可以加载多个过滤器,以后可以根据业务分开写不同的过滤器了
@Configuration
public class FilterConfig { @Bean
public FilterRegistrationBean registFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new LogCostFilter());
registration.addUrlPatterns("/*");
registration.setName("LogCostFilter");
registration.setOrder(1);
return registration;
} }
四.整个ORM,完成简单的CURD
现在java里最流行的orm应该是mybatis了,我也想整合这个来着,但是需要点学习成本,为了求快,先整个简单的jpa,因为这个跟EF比较相似,上手也简单,这里放我遇到的一些坑
4.1不同包的数据类型不匹配

因为java里有很多时间类型,导错了包导致
4.2数据源类型错误

这里引用alibaba的数据源类型
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>
spring.datasource.type = com.alibaba.druid.pool.DruidDataSource
4.3扫描不到entity类

在程序启动时,手动加上要扫描实体类的包
@SpringBootApplication
@EntityScan("com.example.demo.entity") //就是这句
public class DemoApplication { public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
} }
4.4在花了一个下午的时间解决掉这些问题后,终于可以开心的使用jpa访问数据库了,但是奇葩的问题又来了,因为我表名是User, 操作的时候它自动给我创建了一个user表,并把数据插入了进去,懒得问人了,一群表面兄弟,直接百度

#区分表名大小写
spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
五.搭建一个简单的三层
完成了前面的步奏,可以直接在控制器里调用repository层,实现crud,但是这显然是不对的,我应该加个service层,哪怕是贫血的,这样业务可以集中处理,方便维护
在service层直接调用repository时遇到一个问题,一直语法报错,卡了很久,原来使用自定义的方法时,必须在repository里定义接口,不能直接拿JpaRepository的接口,简单的优化了一下,结构如图

项目已开源在github, 地址:https://github.com/wmowm/demo
如何使用VS Code编写Spring Boot (第二弹)的更多相关文章
- Spring Boot第二弹,配置文件怎么造?
持续原创输出,点击上方蓝字关注我吧 前言 自从用了Spring Boot,个人最喜欢的就是Spring Boot的配置文件了,和Spring比起,Spring Boot更加灵活,修改的某些配置也是更加 ...
- 基于VS Code创建Spring Boot项目开发REST API(一)
公司从.NET转向Java不仅仅是简单的代码变成Java,趁此机会对原有的架构和代码重构,融入新的概念和技术.目前通过前后端分离,将后端更多的微服务化.从.NET转向Java我们更多的是用Java开发 ...
- vs code 配置spring boot开发环境
一.环境变量 jdk环境变量一键设置 管理員运行 - 一支小白 - 博客园https://www.cnblogs.com/startnow/p/7416533.html 二.安装插件 1.Java E ...
- Ubuntu下使用VS Code创建Spring Boot工程
目的 我们将在Ubuntu桌面系统下,使用VS Code(Visual Studio Code)编辑器从零开始创建一个Spring Boot工程,并实现一个简单的RESTful风格接口.使用这套流程的 ...
- Spring Boot 第一弹,问候一下世界!!!
持续原创输出,点击上方蓝字关注我吧 目录 前言 什么是Spring Boot? 如何搭建一个Spring Boot项目? 第一个程序 Hello World 依赖解读 什么是配置文件? 什么是启动类? ...
- 使用MockMvc编写spring boot的controller的测试用例
springboot自带测试模块. 注解需要: @SpringApplicationConfiguration(classes = ComputeServiceApplication.class) 这 ...
- .NET程序员如何快入门Spring Boot
本篇文章将教你作为一个.NET程序员如何快入门Spring Boot.你不需要用Eclipse,也不需要用IDEA.已经习惯了VS,其他的IDE-- 但不得不说VS Code很厉害,一用就喜欢.微软给 ...
- .NET CORE与Spring Boot编写控制台程序应有的优雅姿势
本文分别说明.NET CORE与Spring Boot 编写控制台程序应有的“正确”方法,以便.NET程序员.JAVA程序员可以相互学习与加深了解,注意本文只介绍用法,不会刻意强调哪种语言或哪种框架写 ...
- Spring Boot的exit code
文章目录 Spring Boot的exit code 自定义Exit Codes ExitCodeGenerator ExitCodeExceptionMapper ExitCodeEvent Spr ...
随机推荐
- yii2.0保留CSS样式的引入
<link rel="stylesheet" href="http://cdn.staticfile.org/twitter-bootstrap/3.2.0/css ...
- C# 实现生成带二维码的专属微信公众号推广海报
原文:C# 实现生成带二维码的专属微信公众号推广海报 很多微信公众号中需要生成推广海报的功能,粉丝获得专属海报后可以分享到朋友圈或发给朋友,为公众号代言邀请好友即可获取奖励的.海报自带渠道二维码,粉丝 ...
- 科学的解决Http Token拦截器TokenInterceptor实现
1.写在前面 在做项目的时候,有时对接口要求比较严谨.先介绍下情况. 我这边Http 方式采用的是 OKhttp+Retrofit 后台一共分为三种token,分别是实名token(accessTok ...
- Linux性能测试 iostat命令
Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmstat等命令 来查看初步定位问题.其中iostat可以给我们提供丰富的IO状态数据.iostat 由 Red Hat ...
- ATS项目更新(4) 更新DLL到远程服务器
rem by jin tao rem upload dll to ta1bbn01 rem rem @echo off echo %time% set time1 = %,%%,%%,% rem ** ...
- C#.NET自定义报表数据打印
原文:C#.NET自定义报表数据打印 这是一个自定义的报表打印,是对PrintPreviewDialog的扩展和封装.PrintPreviewDialog是一个windows的打印预览控件,该类返回的 ...
- jquery 标签页
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- 活锁(livelock) 专题
活锁(livelock) 活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败. 活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于 ...
- Windows 10 UWP 部署
原文 http://youthlin.com/20151105.html 我们知道VS连接手机可以直接部署到手机里,但平板貌似无法这样干,平板与电脑连接没有丝毫反应……那么想看VS里写的uwp应 ...
- Android零基础入门第85节:Fragment使用起来非常简单
Fragment创建完成后并不能单独使用,还需要将Fragment加载到Activity中,在Activity中添加Fragment的方式有两种:静态加载和动态加载,接下来分别进行学习. 一.静态加载 ...