如何使用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 ...
随机推荐
- C++机器学习古典材料
Caffe :高速神经网络架构 住址:https://github.com/BVLC/caffe CCV :以C语言为核心的现代计算机视觉库 地址:https://github.com/liuliu/ ...
- Android--数据持久化存储概述
Android数据持久化存储共有四种方式,分别是文件存储.SharedPreferences.Sqlite数据库和ContentProvider.在本篇幅中只介绍前面三种存储方式,因为ContentP ...
- 使用MVVM DataTemplate在WPF XAML视图之间切换
原文 使用MVVM DataTemplate在WPF XAML视图之间切换 更新:这个技术的改进版本,一个不创建视图,可以在以下链接找到: http://www.technical-recipes.c ...
- 使用WPF将图片转变为灰度并加上水印并保存为文件
原文:使用WPF将图片转变为灰度并加上水印并保存为文件 运行效果: (上图中左下角为原图的缩小显示,By:Johnson为TextBlock)保存的结果图片:上图的"Test Words.& ...
- 微软输入法TSF SampleIME 代码浅说
原文:微软输入法TSF SampleIME 代码浅说 微软提供了一个简单的TSF拼音输入法的示例SampleIME,主要的问题是:不支持数字键选候选字,不能自动上屏,没有联想功能.在笔者开发动态输入法 ...
- Get and Post(Unity3D六个发展)
猴子原创,欢迎转载. 转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢! 原文地址: http://www.cocos2dev.com/?p=565 unity3d中的www ...
- Linux 下非 root 用户安装 theano(配置 GPU)
非 root 用户,安装 Python 第三方的包,尤其像 theano,存在大量的依赖项,存在的主要问题,是安装各个包时的权限问题.所幸,存在这样一个集成工具,叫 anaconda,其已经内置了许多 ...
- WPF中Polyline拐角的bug
原文:WPF中Polyline拐角的bug Polyline绘制折线在小角度(比如几度)的时候会出现不连续的现象,形成拐角的两条线段中有一段会超出,角度越小越明显. 问题如下图 ...
- WebService它Soap头验证进入
1.创建一个新的类.如"AuthHeaderUser",在传承"System.Web.Services.Protocols.SoapHeader"类别 2.新W ...
- python_matplotlib cannot import name _thread on mac
最后的2行错误信息是 from six.moves import _thread ImportError: cannot import name _thread 1 2 发现是six出现了问题,用pi ...