1. 程式人生 > 實用技巧 >mysql表設計

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

  1. 新增依賴

     <!--調整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>
    
  2. 建立dao層介面,Mybatis官方使用的是mapper而不是dao:cn.zcp.mapper.xxx.java

  3. 建立對映檔案:resources/mappers/xxx.xml

  4. 新增配置檔案
    # 資料來源配置(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 # 開啟駝峰式對映
    
  5. 修改啟動類:在類上添加註解@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(字串)