如何使用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 ...
随机推荐
- Java8推出各种优惠(从英文文档翻译)
翻译了一天.最终把翻译任务的"Java 8全部的包介绍"翻译完了,收获也是很大,了解了Java8中全部包的作用,对Java8有了一个总体的了解,另外也是提高了自身的阅读能力. ht ...
- 简单几步教你实现移动硬盘PE、装win7/vista! 一盘在手,系统无忧!
第一步:格式化u盘成为ntfs格式.(以下同样适用于移动硬盘)提供两个方法:,方法一是格式化成fat32,再到命令提示符即俗称的dos窗口运行convert.方法二在xp下,点击u盘所在盘符,选择属性 ...
- Android framework召回(3)binder使用和IBinder BpRefbase IInterface INTERFACE 之间的关系
status_t AudioSystem::setStreamVolumeIndex(audio_stream_type_t stream, int index, audio_devices_t de ...
- 浅谈WPF中对控件的位图特效(WPF Bitmap Effects)
原文:浅谈WPF中对控件的位图特效(WPF Bitmap Effects) -------------------------------------------------------------- ...
- RTB业务知识2-Open-RTB全景
一个.前言 openrtb这是一套开源的竞价广告系统,来自IAB贡献,井. 有许多值太借鉴,提供sdk api接口文档介绍,整理了相关的资料.主要包含其生态图体系.业务流程和基本的对象模型和数据模型. ...
- C++ string的那些坑,C++ string功能补充(类型互转,分割,合并,瘦身) ,c++ string的内存本质(简单明了的一个测试)
1. size_type find_first_of( const basic_string &str, size_type index = 0 ); 查找在字符串中第一个与str中的某个字符 ...
- WPF: FishEyePanel/FanPanel - 自定义Panel
原文:WPF: FishEyePanel/FanPanel - 自定义Panel 原文来自CodeProject,主要介绍如何创建自定义的Panel,如同Grid和StackPanel. 1) Int ...
- 使用Struts2的iterator标签遍历复杂Map种类
1.建一个Webproject.加入Struts2支持. 2.创建两个实体类: a). Mother(母亲)的Java类. package struts.map.entity; import java ...
- CefSharp For WPF响应页面点击事件
初始化 <!--浏览器--> <cefSharpWPF:ChromiumWebBrowser Name="webBrowser" Grid.Row="0 ...
- MVC基架生成的 Details视图
@model MyMusicStore.Models.Album @{ ViewBag.Title = "Details"; } <h2>Details< ...