如何使用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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM