本篇文章是續《如何使用VS Code編寫Spring Boot》 以後,結合本身.net經驗搗鼓的小demo,一個簡單的CRUD,對於習慣了VS操做模式的.net人員很是方便,強大的智能提示,簡單又幹淨,一塊兒開啓愉快的java編程之旅吧。html
一.環境搭建java
請移步《如何使用VS Code編寫Spring Boot》 ,當頁面輸出Hello World 就算成功啦git
二.熟悉Spring註解,跟路由github
Spring真的是將註解用到了極致,能一個註解搞定的東西,歷來不羅嗦,熟練的使用這些註解不但減輕了代碼工做量,並且可讀性更高,這裏直接放圖了,我也是用到哪些百度哪些web
路由方面直接在註解裏定義就能夠了,比較方便, 在.net裏mvc,webapi 均可以全局配置,我想java應該也能夠的,這裏就不糾結了spring
三.加個過濾器,方便之後記錄日誌,驗證權限什麼的數據庫
百度了一下,這個就直接抄了,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() { //註銷 } }
寫好過濾器後,再把過濾加載進去,這裏也是直接抄,大體能夠看明白觸發條件,加載的過濾器名稱,猜想應該能夠加載多個過濾器,之後能夠根據業務分開寫不一樣的過濾器了api
@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,完成簡單的CURDmybatis
如今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