這篇文章本是個人收費專欄裏的一篇文章,發現有不少人會付費閱讀這篇文章,所以決定將其免費分享出來,但願能夠將其擴散幫到更多想快速入門Java的開發人員。html
------------- 如下是正文----------------前端
前面三篇文章咱們已經聊完了如何快速入門 Android、iOS、Web 前端開發,本篇輪到最後一個端——Java 後端了。Java 後端有着很是龐大的生態圈,也涉及到不少複雜的問題,如分佈式事務、分佈式查詢、微服務、高併發、容災、容器化等等,涉及到的技術棧和框架就更多了。不過,咱們目前只是爲了快速入門,咱們只會學習最必要的那些知識,能支撐到咱們進行實際項目的開發便可。那麼,咱們須要學習的核心知識主要包括 Java、Servlet、JDBC、MySQL、Redis、Spring、MyBatis 等。Java 基礎部分在聊入門 Android開發時已經講過,這裏就不重複講了。java
先聊下 Java 後端的開發工具吧,我推薦使用 IntelliJ IDEA,這是被公認爲最好用的 Java 開發工具,熟悉 Android Studio 的 Android 開發人員對它應該不陌生,其強大的功能和特性能夠說是完虐 Eclipse 和 MyEclipse,尤爲我最喜歡它的智能代碼提示功能。IDEA 用熟了以後絕對大大提高開發效率,目前咱們公司開發人員也是全面轉向 IDEA 了。這裏我向你們推薦一套很詳細的中文專題教程,該教程在 github 上是開源的,也常常更新,如下是地址:mysql
若是英文比較好,建議仍是直接閱讀官方的幫助文檔:git
Servlet 是 Java Web 的底層技術,雖然如今由於有 Spring 框架,咱們已經不須要直接編寫 Servlet 了,但做爲底層技術,咱們仍是要了解其原理,這樣咱們才能更好地理解在其之上的 Spring 框架等。github
Servlet 其實就是 Server Applet —— 服務器小程序,即運行在服務器上的一個小程序,也是一個基於 Java 技術的 Web 組件。編寫一個 Servlet,實際上也是按照 Servlet 規範編寫一個 Java 類。只是這個 Java 類是不能獨立運行的,它並無 main 函數,它必須被部署到 Servlet 容器中,由容器來實例化和調用 Servlet 的方法。Servlet 容器也稱爲 Web 容器,目前主要就是 Tomcat 與 Jetty,二者各有優劣,Jetty 更知足公有云的分佈式環境的需求,而 Tomcat 更符合企業級環境。咱們大部分時候仍是處於開發企業級應用階段,所以,仍是優先選擇 Tomcat。web
目前 Servlet 規範已經演進到 4.0 版本,相比以前的版本,主要是新增了對 HTTP/2 的支持。另外,3.0 版本相比以前的 2.5 版本,最重要的則是新增了對 WebSocket 的支持,3.0 版本以前的 Servlet 只支持 HTTP 請求。那麼,對於目前的 Servlet 來講,須要學習哪些知識點呢?此次,我先把核心的知識點羅列出來,後面再來推薦一些相關的學習資源。redis
關於對 HTTP/2 的支持,目前還沒大範圍使用,相關資料也是很是少,能夠之後再瞭解。spring
接着,再來推薦一些學習資源。首推 Head First 的一本書**《Head First Servlets & JSP》**,仍是保持一向通俗易懂的做風,很是適合入門。不過,其中,第 7/8/9 三章關於 JSP 的內容能夠略過,畢竟 JSP 早已通過時不用了。第 14 章講模式部分則很是值得看,應該說是每一個人都必看,當你理解了裏面所講的內容後,纔有可能設計出一個更好的系統。sql
另外,個人 Servlet 入門書籍**《Servlet/JSP深刻詳解——基於Tomcat的Web開發》也是本不錯的入門書,只是太老舊已經停印了,因此在亞馬遜、京東、噹噹等都買不到了,要看只能到網上找電子版了。比較新的一本書叫《Servlet、JSP和Spring MVC學習指南》**,2016年末出版,不過我沒看過,不知道怎麼樣。
菜鳥有一套簡明教程,其實也是翻譯自國外的一套英文教程,也能夠簡單看看,有個基本認識。如下是地址:
視頻資源方面,我找到一份 Servlet 3.0 特性專題視頻,也分享給你們:
JDBC = Java DataBase Connectivity(Java 數據庫鏈接),是一套訪問數據庫的標準 Java API。經過調用這套 API,就能夠鏈接到數據庫,能夠執行 SQL 語句,對數據庫裏的數據進行處理。不過,JDBC API 只是一套規範接口,真正與數據庫進行鏈接的則是 JDBC 驅動程序,不一樣的數據庫採用不一樣的 JDBC 驅動程序。
和 Servlet 同樣,由於有更方便的框架,咱們也不直接使用 JDBC 的 API 進行數據庫編程了。不過,Hibernate 和 MyBatis 框架的底層仍是 JDBC,所以,咱們仍是要了解 JDBC 的基本原理,才能更快地上手 MyBatis 等框架。好在這部分的內容不多,因此咱們只須要投入不多時間就能夠掌握了。也找了一份在線的 JDBC 教程分享給你們,如下是地址:
JDBC 的核心接口和類就只有幾個:Driver、DriverManager、Connection、Statement、ResultSet、SQLException。要了解這幾個接口和類的用法,以及瞭解使用 JDBC 的流程,簡單來講就是五個步驟:
另外,也要了解下對事務的處理,包括事務的提交和回滾。以及瞭解如何對 SQL 進行批量處理。全部這些內容在上面的 JDBC 教程中都有講述,我就不展開說了。另外,我在上面介紹的**《Servlet/JSP深刻詳解——基於Tomcat的Web開發》**一書中也有一個章節專門講了 JDBC,也能夠看一看。
咱們知道,數據庫分爲關係型數據庫和非關係型數據庫兩大類。關係型數據庫主要就是 MySQL、Oracle、DB2、PostgreSQL 等,標準數據查詢語言 SQL 就是一種基於關係型數據庫的語言。非關係型數據庫也稱 NoSQL(Not only SQL),主要包括 Redis、MongoDB、HBase 等。現在,不少項目都會使用一種以上的數據庫,其中,Redis 能夠說是必選的。另外,MySQL 做爲最流行的關係型數據庫,開源並且入門簡單,所以咱們就先熟悉這兩個數據庫。
先介紹下關係型數據庫設計工具吧,非關係型數據庫好像沒什麼專門的設計工具就不介紹了。首先,Windows 下無疑 PowerDesigner 是最強大也是最流行的,惋惜的是它並無推出 Mac 版本。Mac 下我推薦使用 Navicat,既是好用的關係數據庫客戶端,也是不錯的數據庫建模工具,建模完成後能夠導出爲一個 SQL 文件,很方便。
對於 MySQL,目前咱們也還不須要去研究比較深刻的東西,好比存儲引擎、存儲過程、觸發器、事務隔離級別、分佈式事務、鎖機制等等,最初級的主要了解如下內容:
這些基礎方面的知識就不用推薦什麼學習資源了,網上隨便找一大把。不過,對於掌握這些基礎知識以後的深刻學習,我推薦兩本書:《高性能 MySQL》和《MySQL 技術內幕:InnoDB 存儲引擎》。另外,官方文檔也是必不可少的,只是內容比較多。
對於 Redis,由於是基於內存的,因此性能很是高,不少項目用它做緩存。雖然是一個 key - value 數據庫,但 value 能夠是字符串(String)、哈希(Map)、列表(List)、集合(Sets)、有序集合(Sorted Sets) 等類型。推薦一個菜鳥的簡明教程,能夠簡單入門:
書籍方面,推薦看**《Redis實戰》**,是一本很是不錯且廣受好評的入門書籍。
另外,Redis 的 Java 庫叫 Jedis,也要簡單瞭解下其用法。
Spring 發展到現在,已經成爲一個很龐大的生態圈,咱們所瞭解的 Spring Framework 只是整個 Spring 生態圈的一個核心項目,除此以外還有不少其餘項目,包括 Spring Boot、Spring Cloud、Spring Data、Spring For Android 等 20 多個項目,你能夠在 Spring 官網看到全部項目。不過,咱們入門只先了解兩個項目:Spring Boot 和 Spring Framework。其中,Spring Framework 是咱們要學習的核心框架,但也不是要了解這個項目的所有內容,只先了解一些基礎的東西,可以支撐到咱們進行入門級的開發就足夠了。
那麼,先來聊聊 Spring Framework,目前最新版本是 Spring Framework 5.0。Spring Framework 包含有20多個模塊,包括 spring-core、spring-aop、spring-beans、spring-context、spring-jdbc、spring-web、spring-webmvc、spring-websocket 等等,具體列表能夠查看 Spring Framework 的 Github 項目。不過,通常咱們不須要將全部模塊都引入到項目中,根據所需去引入便可。
學習 Spring Framework,有兩個核心設計思想是要掌握的,就是 控制反轉(Inversion of Control,簡稱 IoC) 和 面向切面編程(Aspect Oriented Programming,簡稱 AOP)。說到控制反轉,還有一個概念也要理解,叫 依賴注入(Dependency Injection,簡稱 DI),區別就是,控制反轉是一種設計思想,而依賴注入則是其中一種實現的方式,還有另外一個實現方式叫依賴查找(Dependency Lookup)。不過,大部分都是採用依賴注入,Spring 使用的也是依賴注入的方式。另外,Spring 核心還有一個控制反轉容器(IoC Container),主要就是經過配置文件以及利用反射在運行時建立所須要的實現類。要理解這幾個概念,推薦看知乎上的一個回答,深刻淺出,很是好理解:
AOP 一樣也是一種設計思想,主要是爲了分離出一些非業務邏輯的代碼,如日誌記錄、性能統計,安全控制,事務處理,異常處理等。在 Spring 底層是經過動態代理的方式實現了 AOP 的內部機制,另外,上層也支持 AspectJ 的註解方式。AOP 中還有幾個相關概念須要理解:Aspect、Joint point、Pointcut、Advice、Weave、Introduction、Target Object、AOP Proxy。那麼,爲了幫助你們理解 AOP 這些概念和原理,以及 Spring 中要如何使用 AOP,我找了兩篇文章分享給你們學習:
接着,再來了解下 Spring Boot,Spring Boot 可以簡化基於 Spring 的應用的搭建和開發,Spring Cloud 就是基於 Spring Boot 的。Spring Boot 從根本上來講就是一些庫的集合,這些庫的 artifactId 通常都是以 spring-boot-starter- 爲前綴。使用 Spring Boot 搭建項目也是很是簡單的,我就分享《Spring Cloud微服務實戰》一書的做者翟永超博客的兩篇文章給你們吧:
要相對系統地入門 Spring,我推薦評價最高的兩本書:《Spring實戰(第4版)》和《精通Spring 4.x:企業應用開發實戰》。兩本書都是基於 Spring 4 的,基於 Spring 5 的書籍尚未,不過這對於入門來講並沒什麼影響。另外,《精通Spring 4.x:企業應用開發實戰》這本書中還加了 Spring Boot 的章節。Spring Framework 的官方文檔也能夠看,內容畢竟是最新也是最詳細的,只是內容太多了,聽說有600多頁,因此一時半會是看不完的,通常也不推薦初學者直接看官方文檔,只建議對某些點理解得還不是很深的狀況下能夠去翻來看看,加深理解。Spring Boot 的官方文檔也是同樣。
前面咱們知道,Java 訪問數據庫的標準 API 是 JDBC,只是,直接使用 JDBC API 進行編碼操做數據庫的話,代碼很是繁瑣,可擴展性很是低,所以,纔會衍生出 Hibernate、MyBatis、SpringJDBC 等對 JDBC 進行了封裝的 ORM 框架,以簡化開發。那麼,爲何選擇 MyBatis,而不是 Hibernate 或 SpringJDBC 呢?主要是由於目前最流行的仍是 MyBatis,另外 MyBatis 也容易上手。
先來了解下 ORM 這個概念,ORM = Object Relational Mapping,稱爲對象關係映射,即業務實體對象和關係數據庫之間創建起一種映射關係,最簡單的映射關係就是:一個類對應一張數據表,類的每一個實例對應表中的一條記錄,類的每一個屬性則對應表的每一個字段。Hibernate 是一個標準的 ORM 框架,在實體類和數據庫之間創建了完整的映射關係,基本不須要開發人員本身寫 SQL,內部會自動生成 SQL 語句,所以,對於數據量很是大的應用,想要優化 SQL 語句就比較困難。MyBatis 則是一個半自動化的 ORM 框架,不一樣於 Hibernate 提供了從實體類到數據庫表的全套映射機制,SQL 是自動生成的;而 MyBatis 則只是在實體類和 SQL 之間創建映射關係,並不自動生成 SQL 語句,所以,開發人員是須要本身寫 SQL 的。這樣,對 SQL 進行優化則比較方便了。
要了解 MyBatis 的用法,直接看官方文檔便可,內容很少,且還有中文版本,如下是連接地址:
前面的內容很是多,要經過實戰項目將全部知識點所有串起來還真的比較難,主要是現在已經找不到項目會直接編寫 Servlet 和 JDBC 了,而這兩塊是 Java Web 的底層技術,必需要理解透徹。那麼,咱們只能拆開來學習,Servlet 和 JDBC 原生部分,建議就按照書籍上的 Demo 去練習,主要目的是要經過編碼對那些核心的知識點造成深入理解。Spring、MyBatis、數據庫這些,則能夠經過一些開源項目進行學習,我找到一個基於 Spring Boot 的不錯的學習項目,推薦給你們:
裏面的每一個小項目都很是簡單,建議重點看 springboot-mybatis-redis 這個小項目,最貼合咱們須要學習的內容。由於項目太簡單,建議對其進行擴展,好比,本身多增長一個表,並經過增長新的 REST 接口對其進行增刪改查;或者添加用戶註冊登陸功能,並使用過濾器對用戶做統一鑑權;或者再添加對 WebSocket 的支持。最好是將其擴展成一個相對完整的 Java Web 項目,好比作一個簡化的電商項目,不須要界面,只須要提供接口。當你能完成這個完整的 Java Web 項目以後,也算真正入門了。
若是用 Gradle 做爲構建工具,要如何配置?與 Android 的配置有何不一樣?SpringJDBC 要怎麼使用?與 MyBatis 比較如何?經過項目實戰去感覺這些知識點的差別吧。
掃描如下二維碼便可關注訂閱號。