2006-京淘Day02-3

2020-09-24 11:01:46

1.SpringBoot 高階用法

1.1 為屬性賦值操作

1.1.1 業務需求說明

說明: 當程式中出現了頻繁變化的資料時,如果採用人為的方式進行修改並且變異打包則導致程式碼的耦合性較高.不便於維護.所以能否為屬性動態賦值.
在這裡插入圖片描述

1.1.2 關於YML檔案說明

# YML檔案語法
    #  1. key:(空格)  value
    #  2. key與key之間有層級的縮排關係.
server:
  port: 8090

# 屬性賦值操作,編輯屬性時注意字首.  只要springboot啟動該資料就會被寫入記憶體中 key-value格式
redis:
  host: 192.168.126.130
  port: 6379

1.1.3 為屬性賦值操作

//動態獲取ip和埠資料
//@ResponseBody    作用1: 將物件轉化為JSON  作用2: 如果返回值是String型別,則返回字串本身
//                 作用3:  一般使用者端發起ajax請求時,採用該註解返回資料, 將不會執行檢視解析器操作
@RestController
public class RedisController {

    @Value("${redis.host}") //spel表示式
    private String  host;   // = "192.168.126.130";      private String  host;   // = "192.168.126.130";
    @Value("${redis.port}")
    private Integer port;   // = 6379;

    @RequestMapping("/getMsg")
    public String getMsg(){

        return host + ":" + port;
    }
}

1.2 指定組態檔為屬性賦值

說明: 由於YML組態檔中的資料一般都是系統級別的資料,所以一般的業務資料都會寫到properties的組態檔中.

1.2.1 編輯properties組態檔

在這裡插入圖片描述

1.2.2 編輯RedisController

package com.jt.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

//動態獲取ip和埠資料
//@ResponseBody    作用1: 將物件轉化為JSON  作用2: 如果返回值是String型別,則返回字串本身
//                 作用3:  一般使用者端發起ajax請求時,採用該註解返回資料, 將不會執行檢視解析器操作
@RestController
//動態的匯入pro組態檔,交給spring容器進行載入.
@PropertySource("classpath:/properties/redis.properties")
public class RedisController {

    @Value("${redis.host}") //spel表示式
    private String  host;   // = "192.168.126.130";      private String  host;   // = "192.168.126.130";
    @Value("${redis.port}")
    private Integer port;   // = 6379;

    @Value("${pro.redis.host}")
    private String  proHost;
    @Value("${pro.redis.port}")
    private Integer proPort;

    //指定properties檔案進行賦值操作.
    @RequestMapping("/getMsg")
    public String getMsg(){
        //從yml組態檔中動態獲取
        return host + ":" + port;
    }

    @RequestMapping("/getPro")
    public String getPro(){

        return proHost + ":" + proPort;
    }
}

1.3 環境切換

業務說明:由於開發時都是連結公司自己的資料庫/伺服器等.把這個環境稱之為"開發環境."
當開發完成之後需要進行上線部署,則需要連結"生產環境"
如果頻繁的切換環境,則導致專案由於修改錯誤,導致問題的發生.
專案優化: 能否提供一種策略.簡化上述操作的開發過程.

#第一份組態檔,用來指定預設的環境標識
spring:
  profiles:
    active: prod

---
# YML檔案語法
    #  1. key:(空格)  value
    #  2. key與key之間有層級的縮排關係.

#指定環境的名稱
spring:
  profiles: dev
server:
  port: 8090

# 屬性賦值操作,編輯屬性時注意字首.  只要springboot啟動該資料就會被寫入記憶體中 key-value格式
redis:
  host: 192.168.126.129
  port: 6379

# 1.需要將環境一分為二
---
spring:
  profiles:  prod
server:
  port: 9000

# 屬性賦值操作,編輯屬性時注意字首.  只要springboot啟動該資料就會被寫入記憶體中 key-value格式
redis:
  host: 111.111.111.111
  port: 7000

1.4 關於lombok說明

1.4.1 新增jar包

  <!--引入外掛lombok 自動的set/get/構造方法外掛  -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

1.4.2 lombok案例

在這裡插入圖片描述

1.4.3 問題

說明:如果需要使用lombok工具就必須提前安裝外掛.如果在上線的時候Linux系統中,是否需要提前安裝lombok外掛?? 不需要安裝.
在這裡插入圖片描述
原因: lombok外掛在編譯器有效. 將.java檔案編譯為.class檔案時lombok會動態的新增get/set/toString…等方法.新增到.class檔案中.
Linux上線部署時執行的時.jar檔案 .jar包含的檔案(.class檔案)

1.4.4 知識小結

1.SpringBoot 開箱即用原理;
2.屬性賦值的操作 @Value("${}")
3.動態匯入資原始檔 @PropertySource(「classpath:/properties/redis.properties」)
4.環境的切換 —, spring.profiles: dev ,預設的選項
5.lombok常用操作

2.SpringBoot整合Mybatis

2.1 新建專案

在這裡插入圖片描述
暫時只需要勾選webjar包即可

2.2 匯入jt.sql的資料庫

2.2.1 準備資料庫工具

在這裡插入圖片描述

2.2.2 連結資料庫

在這裡插入圖片描述
在這裡插入圖片描述

2.2.3 新增jar包檔案

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.jt</groupId>
	<artifactId>springboot_demo2_mybatis</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springboot_demo2_mybatis</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			<exclusions>
				<exclusion>
					<groupId>org.junit.vintage</groupId>
					<artifactId>junit-vintage-engine</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<!--引入外掛lombok 自動的set/get/構造方法外掛  -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>

		<!--引入資料庫驅動 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>

		<!--springBoot資料庫連線  -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

		<!--spring整合mybatis  暫時  -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

2.2.4 編輯POJO物件

@Data
@Accessors(chain = true)
public class User implements Serializable {
    private Integer Id;
    private String name;
    private Integer age;
    private String sex;
}

2.2.5 編輯UserDao介面

@Mapper //將介面交給Spring管理
public interface UserDao {

    //查詢user表的所有的記錄
    @Select("select * from user")
    List<User> findAll();

}

2.2.6 編輯測試類

package com.jt;

import com.jt.dao.UserDao;
import com.jt.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class SpringbootDemo2MybatisApplicationTests {

	@Autowired
	private UserDao userDao;

	@Test
	public void testFind(){

		List<User> userList = userDao.findAll();
		System.out.println(userList);
	}
}

2.3 關於YML檔案設定資訊

2.3.1 關於資料庫url說明

1.時區設定
serverTimezone=GMT%2B8 %2B= +號
2.編碼格式設定
useUnicode=true&characterEncoding=utf8
3.是否自動的重新連結
autoReconnect=true
4.是否允許批次操作
allowMultiQueries=true

2.3.2 關於Mybatis設定說明

mybatis:
  #定義別名包
  type-aliases-package: com.jt.pojo    可以簡化mapper對映檔案的編輯
  #載入user標籤的mapper檔案
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #開啟駝峰對映
  configuration:
    map-underscore-to-camel-case: true
<!--
		前提:   Mybatis進行對映時必須滿足屬性名稱一致
		業務說明::  	user_id   user_name
			物件:	userId   userName

		解決方案:  開啟mybatis駝峰規則對映
		原理:
			欄位名稱user_id~~~去除"_"~~~userid
			~~~~首字母大寫userId~~~~~屬性userId
			只要名稱一致,則可以自動對映.
		注意事項:  如果開啟駝峰規則,則必須滿足要求.: 物件的屬性user_id 與欄位user_id能否對映?  不能對映

	-->

2.3.3 關於Mapper註解優化說明

由於每個介面都需要新增Mapper註解導致程式碼繁瑣.可以採用包掃描的方式動態匯入 程式碼如下

@SpringBootApplication
@MapperScan("com.jt.dao") //主要告訴mapper的包路徑,會自動的完成包掃描
public class SpringbootDemo2MybatisApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootDemo2MybatisApplication.class, args);
	}

}

3 Mybatis-plus介紹

3.1 ORM

物件關係對映(英語:Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程式設計技術,用於實現面向物件程式語言裡不同型別系統的資料之間的轉換。從效果上說,它其實是建立了一個可在程式語言裡使用的「虛擬物件資料庫」。如今已有很多免費和付費的ORM產品,而有些程式設計師更傾向於建立自己的ORM工具。
實質: 物件與資料庫中表完成對映
分析:
1. 物件與表一一對映.
2. 物件中的屬性與表中的欄位一一對映.
實質: 以物件的方式運算元據庫.

說明 : Mybatis滿足ORM物件對映的要求,但是Mybatis是一種半自動化的ORM對映框架
案例1: Mybatis進行資料庫查詢時,是否可以直接轉化為物件,供使用者使用呢 true 表與物件完成對映.
案例2: Mybatis在進行資料庫更新操作時,能否利用物件直接操作呢??? false 不可以.需要自己手寫sql.

3.2 MP介紹

MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。

3.3 MP特性

無侵入:只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑
損耗小:啟動即會自動注入基本 CURD,效能基本無失真耗,直接物件導向操作
強大的 CRUD 操作:內建通用 Mapper、通用 Service,僅僅通過少量設定即可實現單表大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求
支援 Lambda 形式呼叫:通過 Lambda 表示式,方便的編寫各類查詢條件,無需再擔心欄位寫錯
支援主鍵自動生成:支援多達 4 種主鍵策略(內含分散式唯一 ID 生成器 - Sequence),可自由設定,完美解決主鍵問題
支援 ActiveRecord 模式:支援 ActiveRecord 形式呼叫,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
支援自定義全域性通用操作:支援全域性通用方法注入( Write once, use anywhere )
內建程式碼生成器:採用程式碼或者 Maven 外掛可快速生成 Mapper 、 Model 、 Service 、 Controller 層程式碼,支援模板引擎,更有超多自定義設定等您來使用
內建分頁外掛:基於 MyBatis 物理分頁,開發者無需關心具體操作,設定好外掛之後,寫分頁等同於普通 List 查詢
分頁外掛支援多種資料庫:支援 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多種資料庫
內建效能分析外掛:可輸出 Sql 語句以及其執行時間,建議開發測試時啟用該功能,能快速揪出慢查詢
內建全域性攔截外掛:提供全表 delete 、 update 操作智慧分析阻斷,也可自定義攔截規則,預防誤操作

3.4 MP入門案例

3.4.1 引入jar包

	<!--spring整合mybatis-plus -->
		<dependency>
			<groupId>com.baomidou</groupId>
			<artifactId>mybatis-plus-boot-starter</artifactId>
			<version>3.2.0</version>
		</dependency>

3.4.2 編輯POJO物件

@Data
@Accessors(chain = true)
@TableName  //("user")      //1.將物件與表 進行一對一關聯
public class User implements Serializable {
    @TableId(type = IdType.AUTO)    //主鍵的資訊  設定自增
    private Integer Id;
    //@TableField(value = "name")     //如果欄位名稱與屬性的名稱一致(包含駝峰規則),可以省略不寫
    private String name;
    private Integer age;
    private String sex;
}

3.4.3 編輯Mapper介面

在這裡插入圖片描述

3.4.4修改YML對映檔案

在這裡插入圖片描述

3.4.5 入門案例測試

@Test
	public void testSelect01(){

		List<User> userList = userDao.selectList(null);
		System.out.println(userList);
	}