說明: 當程式中出現了頻繁變化的資料時,如果採用人為的方式進行修改並且變異打包則導致程式碼的耦合性較高.不便於維護.所以能否為屬性動態賦值.
# YML檔案語法
# 1. key:(空格) value
# 2. key與key之間有層級的縮排關係.
server:
port: 8090
# 屬性賦值操作,編輯屬性時注意字首. 只要springboot啟動該資料就會被寫入記憶體中 key-value格式
redis:
host: 192.168.126.130
port: 6379
//動態獲取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;
}
}
說明: 由於YML組態檔中的資料一般都是系統級別的資料,所以一般的業務資料都會寫到properties的組態檔中.
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;
}
}
業務說明:由於開發時都是連結公司自己的資料庫/伺服器等.把這個環境稱之為"開發環境."
當開發完成之後需要進行上線部署,則需要連結"生產環境"
如果頻繁的切換環境,則導致專案由於修改錯誤,導致問題的發生.
專案優化: 能否提供一種策略.簡化上述操作的開發過程.
#第一份組態檔,用來指定預設的環境標識
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
<!--引入外掛lombok 自動的set/get/構造方法外掛 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
說明:如果需要使用lombok工具就必須提前安裝外掛.如果在上線的時候Linux系統中,是否需要提前安裝lombok外掛?? 不需要安裝.
原因: lombok外掛在編譯器有效. 將.java檔案編譯為.class檔案時lombok會動態的新增get/set/toString…等方法.新增到.class檔案中.
Linux上線部署時執行的時.jar檔案 .jar包含的檔案(.class檔案)
1.SpringBoot 開箱即用原理;
2.屬性賦值的操作 @Value("${}")
3.動態匯入資原始檔 @PropertySource(「classpath:/properties/redis.properties」)
4.環境的切換 —, spring.profiles: dev ,預設的選項
5.lombok常用操作
暫時只需要勾選webjar包即可
<?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>
@Data
@Accessors(chain = true)
public class User implements Serializable {
private Integer Id;
private String name;
private Integer age;
private String sex;
}
@Mapper //將介面交給Spring管理
public interface UserDao {
//查詢user表的所有的記錄
@Select("select * from user")
List<User> findAll();
}
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);
}
}
1.時區設定
serverTimezone=GMT%2B8 %2B= +號
2.編碼格式設定
useUnicode=true&characterEncoding=utf8
3.是否自動的重新連結
autoReconnect=true
4.是否允許批次操作
allowMultiQueries=true
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能否對映? 不能對映
-->
由於每個介面都需要新增Mapper註解導致程式碼繁瑣.可以採用包掃描的方式動態匯入 程式碼如下
@SpringBootApplication
@MapperScan("com.jt.dao") //主要告訴mapper的包路徑,會自動的完成包掃描
public class SpringbootDemo2MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDemo2MybatisApplication.class, args);
}
}
物件關係對映(英語:Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程式設計技術,用於實現面向物件程式語言裡不同型別系統的資料之間的轉換。從效果上說,它其實是建立了一個可在程式語言裡使用的「虛擬物件資料庫」。如今已有很多免費和付費的ORM產品,而有些程式設計師更傾向於建立自己的ORM工具。
實質: 物件與資料庫中表完成對映
分析:
1. 物件與表一一對映.
2. 物件中的屬性與表中的欄位一一對映.
實質: 以物件的方式運算元據庫.
說明 : Mybatis滿足ORM物件對映的要求,但是Mybatis是一種半自動化的ORM對映框架
案例1: Mybatis進行資料庫查詢時,是否可以直接轉化為物件,供使用者使用呢 true 表與物件完成對映.
案例2: Mybatis在進行資料庫更新操作時,能否利用物件直接操作呢??? false 不可以.需要自己手寫sql.
MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。
無侵入:只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑
損耗小:啟動即會自動注入基本 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 操作智慧分析阻斷,也可自定義攔截規則,預防誤操作
<!--spring整合mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
@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;
}
@Test
public void testSelect01(){
List<User> userList = userDao.selectList(null);
System.out.println(userList);
}