mysql表設計
SpringBoot 入門
概述
思想:約定大於配置
主要功能:
版本鎖定:SpringBoot在父工程中進行了大量常見依賴的版本鎖定
起步依賴:SpringBoot以功能化的方式將需要的依賴進行組裝,並且允許程式設計師以start的方式進行引入
自動配置:SpringBoot實現了大量依賴框架的預設配置項,程式設計師無須再進行自己配置
內建Tomcat:SpringBoot內建了一個tomcat,使用它開發的程式無需再進行tomcat部署,可直接執行
SpringBoot的啟動類
//注意啟動類的位置,要在cn.zcp下 @SpringBootApplication public class QuickStartApplication { public static void main(String[] args) { SpringApplication.run(QuickStartApplication.class, args); } }
配置檔案
配置檔案有三種格式:xxx.yml xxx.yaml xxx.properties 寫在resources下
SpringBoot啟動會依次載入:yml->yaml->properties 如果多個配置檔案同時存在,後面的覆蓋前面的
application.properties
# 設定服務埠
server.port=8081
# 設定訪問虛擬路徑
server.servlet.context-path=/zcp
application.yaml
# 大小寫敏感 # 使用縮排表示層級關係 # 縮排的空格數目不重要,但是相同層級的元素必須左側對齊 # 引數值和冒號之間必須有空格 server: port: 8081 servlet: context-path: /zcp 資料格式: # 純量:單個的、不可再分的值(包括字串字串、布林值、數值、Null、時間型別) username: 'jack' # 物件:鍵值對的集合,又稱為對映(mapping)/ 雜湊(hashes) / 字典(dictionary) user: username: '張三' password: '123' # 陣列:一組按次序排列的值,又稱為序列(sequence) / 列表(list) addressList: - '北京' - '上海' - '廣州'
讀取配置檔案
* 方式一: Environment(瞭解)
此物件是Spring框架提供的,用來表示整個應用執行時的環境,可以讀取配置檔案中的屬性值並逐個注入到Bean物件的對應屬性中
* 方式二: @Value (瞭解)
此註解是Spring框架提供的,用來讀取配置檔案中的屬性值並逐個注入到Bean物件的對應屬性中
* 方式三: @Configuration (推薦)
此註解是SpringBoot框架提供的,用來快速、方便地將配置檔案中的自定義屬性值批量注入到某個Bean物件的多個對應屬性中
整合Junit
<!--引入junit依賴啟動器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest public class MyTest { @Autowired private UserConfig userConfig; @Test public void test1(){ System.out.println(userConfig.getUsername()); System.out.println(userConfig.getPassword()); } }
整合SpringMVC
日誌輸出設定
# 日誌級別設定格式是
# 包名: 日誌級別(常用的級別有4個: debug info warn error)
logging:
level:
org.springframework: info
com.itheima: info
訪問靜態資源
//SpringBoot預設的靜態資源訪問路徑:常用"classpath:/static/"
public class ResourceProperties {
private static final String[] CLASSPATH_RESOURCE_LOCATIONS =
new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};
}
# 當然,如果想自定義位置也可以,使用下面格式即可
spring:
resources:
static-locations: classpath:/templates/
攔截器
自定義攔截器類:
實現HandlerInterceptor介面,重寫自己需要的方法,放入容器中
註冊攔截器:
自定義一個配置類,實現WebMvcConfigurer介面
通過addInterceptor方法註冊攔截器
addPathPatterns方法配置攔截路徑
excludePathPatterns方法配置排除攔截的路徑
整合Thymeleaf
Thymeleaf是一個用於展示頁面的模板引擎,類似於jsp,但是springboot推薦用Thymeleaf,因為其開發和執行效率比jsp要高。
<!--thymeleaf 起步依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
新增配置
Springboot預設使用的就是Thymeleaf檢視解析器,在執行頁面跳轉的時候,自動的從resources/templates資料夾中找到對應xxx.html頁面
因此我們僅僅需要將我們的頁面檔案放入對應的位置即可,如果想自定義模板的位置和格式可以使用下面的配置
spring:
thymeleaf:
prefix:classpath:/templates/ # 自定義字首
suffix:.html # 自定義字尾
語法
變數
ognl表示式獲取變數使用${ },和el表示式非常像,表示式寫在一個叫指令的標籤屬性當中th:text
<h1>
歡迎您:<span th:text="${user.name}">請登入</span>
</h1>
動靜結合
Thymeleaf所有的表示式都寫在指令中,在靜態環境下,瀏覽器會忽略掉這些指令,不會報錯
如果是在Thymeleaf環境下,th指令就會被識別和解析,而th:text的含義就是替換所在標籤中的文字內容
自定義變數
首先在 h2上 用 th:object="${user}"獲取user的值,並且儲存
然後,在h2內部的任意元素上,可以通過 *{屬性名}的方式,來獲取user中的屬性,這樣就省去了大量的user.字首了
方法
<!--ognl表示式中的方法呼叫-->
<h2 th:object="${user}">
<p>FirstName: <span th:text="*{name.split(' ')[0]}">Jack</span>.</p>
<p>LastName: <span th:text="*{name.split(' ')[1]}">Li</span>.</p>、
</h2>
Thymeleaf內建物件
#ctx 獲取Thymeleaf自己的Context物件
#requset 如果是web程式,可以獲取HttpServletRequest物件
#response 如果是web程式,可以獲取HttpServletReponse物件
#session 如果是web程式,可以獲取HttpSession物件
#servletContext 如果是web程式,可以獲取HttpServletContext物件
Thymeleaf提供的全域性物件:
#dates 處理java.util.date的工具物件
#calendars 處理java.util.calendar的工具物件
#numbers 用來對數字格式化的方法
#strings 用來處理字串的方法
#bools 用來判斷布林值的方法
#arrays 用來護理陣列的方法
#lists 用來處理List集合的方法
#sets 用來處理set集合的方法
#maps 用來處理map集合的方法
字面值
我們需要在指令中填寫基本型別如:字串、數值、布林等,並不希望被Thymeleaf解析為變數,這個時候稱為字面值。
- 字串字面值:使用一對'引用的內容就是字串字面值了
你正在觀看 template 的字串常量值.
- 數字字面值:數字不需要任何特殊語法, 寫的什麼就是什麼,而且可以直接進行算術運算
今年是 1900.
兩年後將會是 1902.
- 布林字面值:布林型別的字面值是true或false
你填的是true
這裡引用了一個th:if指令,跟vue中的v-if類似
拼接
普通拼接:
<span th:text="'歡迎您:' + ${user.name} + '!'"></span>
簡化拼接:
<span th:text="|歡迎您:${user.name}|"></span>
運算
${}內部的是通過OGNL表示式引擎解析的,外部的才是通過Thymeleaf的引擎解析,因此運算子儘量放在${}外進行。
算術運算子:+ - * / %
比較運算:>, <, >= and <= ,但是>, <不能直接使用,因為xml會解析為標籤,要使用別名。
三元運算:conditon ? then : else
預設值: 表示式 ?: 預設值
迴圈
th:each指令:
<tr th:each="user : ${users}">
<td th:text="${user.name}">Onions</td>
<td th:text="${user.age}">2.41</td>
</tr>
型別:
- Iterable,實現了Iterable介面的類
- Enumeration,列舉
- Interator,迭代器
- Map,遍歷得到的是Map.Entry
- Array,陣列及其它一切符合陣列結果的物件
邏輯判斷
th:if 或者 th:unless ,兩者的意思恰好相反。
以下情況被認定為true:
- 表示式值為true
- 表示式值為非0數值
- 表示式值為非0字元
- 表示式值為字串,但不是"false","no","off"
- 表示式不是布林、字串、數字、字元中的任何一種
switch
th:switch 和 th:case
<div th:switch="${user.role}">
<p th:case="'admin'">使用者是管理員</p>
<p th:case="'manager'">使用者是經理</p>
<p th:case="*">使用者是別的玩意兒</p>
</div>
js模板
在script標籤中通過th:inline="javascript"來宣告這是要特殊處理的js指令碼
語法:
const user = /*[[Thymeleaf表示式]]*/ "靜態環境下的預設值";
因為Thymeleaf被註釋起來,因此即便是靜態環境下, js程式碼也不會報錯,而是採用表示式後面跟著的預設值。
整合Mybatis
-
新增依賴
<!--調整mysql的版本--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <!--加入mybatis的啟動器,這是mybatis公司提供的--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version> </dependency>
-
建立dao層介面,Mybatis官方使用的是mapper而不是dao:cn.zcp.mapper.xxx.java
-
建立對映檔案:resources/mappers/xxx.xml
-
新增配置檔案
# 資料來源配置(springboot內建連線池物件HiKariCP)
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///springboot
username: root
password: root# mybatis簡單配置 mybatis: mapper-locations: classpath:mappers/** # 指定mapper對映檔案 type-aliases-package: com.itheima.domain # 指定實體別名 configuration: map-underscore-to-camel-case: true # 開啟駝峰式對映
-
修改啟動類:在類上添加註解@MapperScan("mapper介面路徑")
修改資料來源:springboot內建HiKariCP連線池,修改為druid
<!--druid依賴-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.15</version>
</dependency>
# 連線池配置(springboot內建連線池物件HiKariCP)
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///springboot
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
整合Redis
Spring為了讓開發者簡化Jedis的操作,提供了spring-data-redis框架,它對reids底層開發包(Jedis)進行了高度封裝,通過RedisTemplate物件實現了redis各種操作、異常處理及序列化,支援釋出訂閱等功能。
修改配置
spring:
redis:
host: localhost # 伺服器地址
port: 6379 # 埠
database: 0 # 使用庫的索引標識
實體類必須實現序列化介面Serializable
模板物件:RedisTemplate 序列化方式:JdkSerializationRedisSerializer 序列化效果:\xAC\xED\x00\x05t\x00\x05users(二進位制)
模板物件:StringRedisTemplate 序列化方式:StringRedisSerializer 序列化效果:zcp 123(字串)