有天上飛的概念,就要有落地的實現html
概念+代碼實現是本文的特色,教程將涵蓋完整的圖文教程,代碼案例java
每一個知識點配套自測面試題,學完技術自我測試mysql
本文初學向,因此但願文中全部的代碼案例都能敲一遍git
大哥大姐新年好,點贊轉發不要少程序員
**文本已收錄至GitHub開源倉庫 Lu_JavaNodes 碼雲倉庫地址Lu_JavaNodes ,**包含教程涉及全部思惟導圖,案例代碼和後續講解視頻,歡迎Star增磚添瓦。github
庚子鼠年,封村兒,在試過了睡覺,打麻將,作涼皮,作蛋糕以後,我不禁的陷入了對人生和社會的大思考web
兩年的開發經驗和三年的大數據講師經驗告訴我,是時候寫些什麼了,我也早以爲有寫些東西的必要了。我向來是不憚以最多的無聊揣測這個假期的,但我沒想到……(不能再往下了,再往下真就算抄襲了)面試
因而決定將本身的的畢生功力匯聚整理成冊,寫出《圖文教程》系列Java技術學習祕籍,本功法力求 『圖文並茂』 『簡單易懂』,概念和代碼實踐相結合,每一個知識點輔助以自測面試題,但願你們經過本系列教程可以快樂學Java,從練氣到飛昇。redis
本期選擇的技術是SpringBoot,SpringBoot 現現在已經是Java程序員的必備修煉功法,具有SpringBoot大成的開發功力,才能行走江湖,縱橫大廠小派而不懼需求。spring
在正式開始學習以前,先經過思惟導圖瞭解本教程的功法綱要
簡單說明,教程分爲基礎篇,進階篇和高級篇
基礎篇,本章力求簡單快速的掌握基本的SpringBoot使用,並應用到項目中
進階篇,學會SpringBoot更多的常見用法以及底層原理
高級篇,着重介紹SpringBoot的與各大場景的整合使用
環境要求
開發工具 IDEA 版本不限
maven3.x
jdk1.8
本教程採用SpringBoot 2.0.3.RELEASE
本文學習目標
認識SpringBoot
掌握 經過 SpringBoot 搭建web環境
掌握 SpringBoot + Mybatis + Mysql 實現增刪改爲的能力
掌握 SpringBoot 測試的使用
SpringBoot優勢不少,對提高開發速度有很大幫助,咱們經過配置文件說明一下SpringBoot的優秀。
回想往昔,在我剛畢業的時候,在一家跨境電商企業開發管理系統,這個項目採用的最傳統的SSM架構,在這個項目中充斥着大量的配置文件,什麼是大量呢?舉個栗子,以下圖
**上圖是什麼呢?**用SSM寫一個增刪改差的最少配置。
朋友萌,你萌想一想,功能代碼都沒開始寫,就要先寫這麼一堆配置,完了還不知道寫的對不對,再多想一想,若是你還要作權限管理,Redis,消息隊列,你還須要寫多少配置???這樣的開發效率 想死
不過不要慌,只要你學會了SpringBoot,經過SpringBoot 技術上面的配置文件 一個都不寫,一個都不寫,一個都不寫。
oh my god 這麼好的技術,不學就是虧啊!很少說,咱們一塊兒來學它 學它 學它。
Tips:本小節是SpringBoot的介紹和特色,若是想感覺SpringBoot的魅力,可跳過直接閱讀 第二章節 10分鐘用上SpringBoot
Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化Spring應用的初始搭建以及開發過程。
你能夠認爲:springboot(微框架) = springmvc(控制器) + spring(項目管理)
特色以下
簡介和特色不需特別在乎,在教程中會逐個詳細講解
本節開始第一個demo的編寫,準備好你的IDEA,SpringBoot 要來嘍。
demo需求
使用SpringBoot搭建 web 環境
建立UserController類,類中定義 getUser() 方法 該方法會以Json的方法返回一句話:SpringBoot 真香。
運行項目可以請求到該方法 並獲得響應數據
Tips:案例代碼 見 GitHub 和 碼雲倉庫
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.lu</groupId> <artifactId>boot-hello</artifactId> <version>1.0-SNAPSHOT</version> <!--繼承springboot的父項目--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> </parent> <dependencies> <!--引入springboot的web支持--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>
啓動類的位置
啓動類代碼以下
/** * 啓動類規則 * 1.啓動類位置:主包下面和子包同級 * 2.須要一個@SpringBootApplication */ @SpringBootApplication public class AppRun { public static void main(String[] args) { // 參數:啓動類類對象 主函數形參名 SpringApplication.run(AppRun.class,args); } }
Tips:經過配置文件能夠作端口號,項目名等
配置文件規則
配置文件名字必須叫application
配置文件的格式有三種
properties
yml
yaml
配置文件位置
配置文件內容
項目正確啓動 日誌以下
經過日誌 能夠知道 項目啓動在了8802 端口, 項目名(context path) 爲空
http://localhost:8802/getUser
恭喜你,我知道你確定已經完成了第一個demo的效果,可是估計會有些懵逼,咋就跑起來了呢?爲何沒用的Tomcat?pom文件配置的是啥?啓動類寫的又是啥?
朋友,不要慌,鹿老師一個個給你解釋。
爲何不須要Tomcat呢?這就是SpringBoot的優勢之一啊,能夠回憶一下簡介部分SpringBoot的特色。若是想不起來,不用翻找,貼心的鹿老師又寫了一遍
建立獨立的Spring應用程序
使用嵌入的Tomcat,應用無需打成war包
簡化Maven配置,starters自動配置和版本控制
大量自動配置,簡化開發
無需xml配置,開箱即用
之因此不須要 單獨安裝Tomcat 是由於SpringBoot使用嵌入的Tomcat,因此SpringBoot的項目直接就能夠運行起來。
簡化Maven配置,starters自動配置和版本控制
不使用SpringBoot搭建web環境,少說也要導入七八個依賴,可是若是沒有記錯的話,demo的開發只用到了一個依賴,有點不要太少,why?
先來講明 pom寫的第一個配置 parent 父項目
<!--繼承springboot的父項目--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> </parent>
這個配置項目是一種聲明,用來管理 SpringBoot 的應用的版本。
啥意思嘞?
朋友,回想一下,導入的依賴是啥?
<!--web相關依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
spring-boot-starter-web 就是咱們導入的第二個依賴,除了名字有點長之外,最特別的是沒有寫版本號,可是沒有影響依賴的下載,由於 spring-boot-starter-web 用的是 父項目 的版本號 2.0.3.RELEAS。
這就是 父項目的做用,之後咱們導入依賴默認是不須要寫版本號的。
版本號不寫了,可是 **爲何一個依賴就夠了?**由於啓動器
什麼是啓動器,看一下 spring-boot-starter-web 這個很長的名字,這個名字須要注意的是前三個單詞 spring-boot-starter 凡是以這三個字母開頭的依賴咱們都稱之爲 starters(啓動器)。
Spring Boot將全部的功能場景都抽取出來,作成一個個的starters(啓動器),只須要在項目裏面引入這些starter相關場景的全部依賴都會導入進來。要用什麼功能就導入什麼場景的啓動器。
舉個栗子: spring-boot-starter-web web場景啓動器 SpringBoot將全部web項目開發可以用的依賴都寫到了這個啓動器中,這樣導入啓動器就擁有了開發web項目須要用到的全部依賴。
綜上所述,同理:
/** * @SpringBootApplication 來標註一個主程序類,說明這是一個Spring Boot應用 */ @SpringBootApplication public class AppRun { public static void main(String[] args) { // Spring應用啓動起來 SpringApplication.run(HelloWorldMainApplication.class,args); } }
若是說咱們的項目是一個火箭的話,這個類的 main函數 就是火箭的發射按鈕,運行 main方法 就運行了項目。
Tips:關於啓動類的實現原理以及配置文件的更多用法,在進階篇詳細講解。
接着 demo 繼續往下寫 集成Mybatis
在mysql數據庫中 按照 sql 建立表
SET NAMES utf8; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for t_user -- ---------------------------- DROP TABLE IF EXISTS `t_user`; CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of t_user -- ---------------------------- BEGIN; INSERT INTO `t_user` VALUES (1, 'zhangsan', '123456'); INSERT INTO `t_user` VALUES (2, 'lisi', '123456'); COMMIT; SET FOREIGN_KEY_CHECKS = 1;
在boot-hello項目的com.lu.entity包中寫入實體類
public class User { private Integer id; private String username; private String password; //get set 方法省略.... }
<!-- SpringBoot 集成 Mybatis的 啓動器--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!-- 數據源--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.19</version> </dependency> <!-- mysql驅動--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency>
說明:因爲springboot整合mybatis啓動器中會默認依賴mybatis 所以不須要單獨引入mybati版本,不然會出現衝突
須要寫入兩種配置
#數據源配置 #指定驅動 spring.datasource.driver-class-name=com.mysql.jdbc.Driver #指定url spring.datasource.url=jdbc:mysql://localhost:3306/boot #指定用戶名 spring.datasource.username=root #指定密碼 spring.datasource.password=123456 #指定鏈接池類型 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource #Mybatis的配置 配置mapper文件的地址 mybatis.mapper-locations=classpath:mappers/*Mapper.xml
說明一下mapper-locations這個配置 如圖
public interface UserDao { List<User> findAll(); }
mapper文件內容
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.lu.dao.UserDao"> <select id="findAll" resultType="com.lu.entity.User"> select * from t_user </select> </mapper>
如今代碼寫完了,做爲一個擁有良好習慣的程序員,我應該測試一下dao接口中的查詢方法能不能正常使用,可是,貌似須要運行項目在controller中調用,才能測試。
no no no 其實不須要,SpringBoot 能夠 很是很是很是 方便的集成單元測試,接下來咱們就用 SpringBoot Test 來測試一下咱們的查詢方法。
<!-- 測試依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
測試類的位置
測試類內容
/** * @SpringBootTest(classes = {AppRun.class}) 參數爲啓動類的類對象 */ @RunWith(SpringRunner.class) @SpringBootTest(classes = {AppRun.class}) public class TestUserDao { @Autowired private UserDao userDao; /** * 測試查詢方法 */ @Test public void test1(){ List<User> all = userDao.findAll(); // 打印查詢結果 for (User user : all) { System.out.println(user); } } }
運行測試類 結果以下
恭喜你完成了本章的學習,恭喜你掌握了經過SpringBoot+Mybatis 實現增刪改爲的能力。爲你鼓掌!
讓咱們再次回顧本文的學習目標
要掌握SpringBoot更多的用法,請持續關注本系列教程。
下面體貼的我給朋友萌還準備了一些 自測面試題和項目案例,但願你可以成熱打鐵,將知識夯紮實。
什麼是 Spring Boot?
爲何要用 Spring Boot?
Spring Boot 須要獨立的容器運行嗎?
你如何理解 Spring Boot 中的 Starters?
SpringBoot 項目如何集成 Mybatis?
Tip:在個人計劃中,更新完 SpringBoot 圖文教程系列 以後 將會更新 SpringBoot微服務電商後臺管理系統實戰開發圖文教程
文後全部項目小案例的庫表均來自該項目,經過精心設計,環環相扣,經過小案例的鋪墊,後續能夠直接與 微服務實戰開發教程 無縫兼容
下面這張表是 商品類別表 建表語句
CREATE TABLE `tb_category` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '類目id', `name` varchar(20) NOT NULL COMMENT '類目名稱', `parent_id` bigint(20) NOT NULL COMMENT '父類目id,頂級類目填0', `is_parent` tinyint(1) NOT NULL COMMENT '是否爲父節點,0爲否,1爲是', `sort` int(4) NOT NULL COMMENT '排序指數,越小越靠前', PRIMARY KEY (`id`), KEY `key_parent_id` (`parent_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1424 DEFAULT CHARSET=utf8 COMMENT='商品類目表,類目和商品(spu)是一對多關係,類目與品牌是多對多關係';
由於商品分類會有層級關係,所以這裏咱們加入了parent_id
字段,對本表中的其它分類進行自關聯。
測試數據添加sql內容過多,若有須要請訪問碼雲倉庫或經過WX獲取
實現下面Service接口方法
public interface CategoryService { //根據父節點查詢下一級商品類目數據 List<Category> queryListByParent(Long pid); }
本人擁有兩年開發經驗和三年Java大數據教學經驗,曾幫助2000+學生成功就業和跳槽。
歡迎關注本人公衆號:鹿老師的Java筆記,將在長期更新Java技術圖文教程和視頻教程,Java學習經驗,Java面試經驗以及Java實戰開發經驗。
原文出處:https://www.cnblogs.com/bingyang-py/p/12298485.html