1. SpringBoot高級用法
1.1 關于組態檔說明
1.1.1 properties檔案說明
1.語法 1. key=value 結構
2.pro中的屬性-值默認條件下都是String型別 不需要添加引號
1.1.2 YML檔案說明
#語法
# 1. 資料結構 key: value 使用:(空格)鏈接
# 2. YML檔案中有檔案父子級結構 采用縮進的方式實作.
server:
port: 8090
1.2 為屬性賦值
1.2.1 業務需求
有時需要動態的獲取屬性的值,如果直接寫到代碼中需要重新打包編譯,代碼的耦合性較高.
能否利用組態檔的方式,動態的為屬性賦值?
1.2.2 YML方式為屬性賦值
1).編輯YML組態檔
#語法
# 1. 資料結構 key: value 使用:(空格)鏈接
# 2. YML檔案中有檔案父子級結構 采用縮進的方式實作.
server:
port: 8090
# 為Redis設定屬性和屬性值
redis.host: 127.0.0.1
redis.port: 6379
2).為屬性賦值
package com.jt.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RedisController {
/**
* 當程式啟動時,會自動的加載YML組態檔,將資料保存到Spring的內部.
* 之后通過${key}(spel運算式)進行資料的取值.
*/
@Value("${redis.host}")
private String host; // = "127.0.0.1";
@Value("${redis.port}")
private int port; // = 6379;
@RequestMapping("/getNode")
public String getNode(){
return host + ":" + port;
}
}
1.2.3 指定組態檔為屬性賦值
1).定義properties檔案

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;
@RestController
//指定組態檔進行加載
@PropertySource("classpath:/properties/redis.properties")
public class RedisController {
/**
* 當程式啟動時,會自動的加載YML組態檔,將資料保存到Spring的內部.
* 之后通過${key}(spel運算式)進行資料的取值.
* 1.通過YML方式賦值
*
*/
@Value("${redis.host}")
private String host; // = "127.0.0.1";
@Value("${redis.port}")
private int port; // = 6379;
//2.通過pro方式賦值
@Value("${redis2.host}")
private String host2;
@Value("${redis2.port}")
private int port2;
@RequestMapping("/getNode")
public String getNode(){
return "YML取值方式"+host + ":" + port+"| " +
"pro取值方式:"+host2+":"+port2;
}
}
1.2.4 如果YML和Properties屬性重名以誰為準?
答: YML方式為準, 注意事項:屬性最好不要重復.
1.3 環境切換
1.3.1 業務需求
如果小李進入外包公司,需要頻繁切換不同的作業地點.由于公司的環境配置非常繁瑣,每次切換小李都需要修改大量的組態檔,問: 能否優化?
1.3.1 實作多環境配置
#挑選執行環境 SpringCloud微服務配置 N多個YML組態檔 配置中心
spring:
profiles:
active : test
--- #環境分割線
#語法
# 1. 資料結構 key: value 使用:(空格)鏈接
# 2. YML檔案中有檔案父子級結構 采用縮進的方式實作.
#定義環境名稱 2.4.0版本需要如下的格式
spring:
config:
activate:
on-profile: test
server:
port: 8090
# 為Redis設定屬性和屬性值
redis.host: 127.0.0.1
redis.port: 6379
# 通過---方式實作YML環境的分割
---
spring:
profiles: prod #2.4.0以下的寫法
server:
port: 9000
# 為Redis設定屬性和屬性值
redis.host: 192.168.1.1
redis.port: 7000
1.4 熱部署配置
弊端: IDEA啟動時特別耗費記憶體,如果配置了熱部署,則卡上加卡 (自己決定)
1.4.1 添加jar包
<!--支持熱部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
1.4.2 IDEA配置
組合鍵: ctrl + alt+shift + /

1.5 關于LOMBOK復習
1.5.1 添加jar包
<!--引入插件lombok 自動的set/get/構造方法插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
1.5.3 面試問題
問:如果專案需要在Linux系統中運行,問系統是否需要提前安裝LomBok插件?
A.需要 B.不需要
答案: B 不需要
原因: LOMBOK插件在編譯期有效. 由.java檔案編譯為.class檔案時生效.

1.5 SpringBoot整合Mybatis
1.5.1 匯入jar包
<!--添加資料庫驅動包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--springBoot整合jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--springBoot整合mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
1.5.2 編輯YML組態檔
1).關于URL說明
serverTimezone=GMT%2B8& %2B=+ 設定時區
useUnicode=true&characterEncoding=utf8& 設定字符集編碼格式
autoReconnect=true& 如果鏈接中斷是否自動重連
allowMultiQueries=true 是否允許批量操作.
2).YML檔案配置
server:
port: 8090
servlet:
context-path: / #專案根目錄發布
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
username: root
password: root
# Spring整合Mybatis配置
mybatis:
type-aliases-package: com.jt.pojo
mapper-locations: classpath:/mybatis/mappers/*.xml
#開啟駝峰映射
configuration:
map-underscore-to-camel-case: true
1.5.3 編輯Mapper.xml組態檔
<?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">
<!--namespace 唯一確定Mapper介面的 一定不能重復-->
<mapper namespace="com.jt.mapper.UserMapper">
<!--定義別名包 type-aliases-package: com.jt.pojo
在程式執行時,如果定義了別名包則會自動的拼接路徑
resultType="com.jt.pojo.User"
規則: 1.如果根據別名找不到則根據自己的定義查詢型別
-->
<select id="findAll" resultType="User">
select * from user
</select>
<!--
開啟駝峰映射規則的說明
說明:屬性user_id 根據駝峰命名規則應該叫userId
例子:
1.user表: user_id user_name user_age
2.User物件: userId, userName userAge 駝峰命名規則
只要開啟駝峰映射規則,則Mybatis會自動的完成映射.
原理:
user_id(欄位) ~~~去除中間的"_"線之后首字母大寫 userId
將資料映射給屬性userId(屬性)
注意事項:一旦開啟駝峰映射規則,則必須按照要求來寫.
-->
</mapper>
1.5.4 入門案例測驗
package com.jt;
import com.jt.mapper.UserMapper;
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 SpringbootDemo2ApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void testMybatis01(){
List<User> userList = userMapper.findAll();
System.out.println(userList);
}
}
2.MybatisPlus
2.1 ORM思想介紹
物件關系映射(英語:Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程式設計技術,用于實作面向物件編程語言里不同型別系統的資料之間的轉換,從效果上說,它其實是創建了一個可在編程語言里使用的“虛擬物件資料庫”,如今已有很多免費和付費的ORM產品,而有些程式員更傾向于創建自己的ORM工具,
核心: 采用物件的方式操作資料庫.
思考:
userMapper.insert(user物件) ~~~~~剩余的入庫sql由框架自動完成!!!
2.2 MybatisPlus介紹
2.2.1 介紹
MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具,在 MyBatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生,


2.2.2 引入jar包
<!--SpringBoot整合MybatisPlus mybatis和plus jar包沖突的-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
2.2.3 編輯POJO物件

2.2.4 Mapper介面繼承

2.2.5 修改YML配置
server:
port: 8090
servlet:
context-path: / #專案根目錄發布
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
username: root
password: root
# Spring整合Mybatis-plus配置
mybatis-plus:
type-aliases-package: com.jt.pojo
mapper-locations: classpath:/mybatis/mappers/*.xml
#開啟駝峰映射
configuration:
map-underscore-to-camel-case: true
2.2.6 入門案例測驗

2.3MybatisPlus作業原理
ORM: 以物件的方式操作資料表
Sql:
1. 資料庫只能識別Sql陳述句. 不能識別物件
2. 如果每天都寫特別簡單的Sql 沒有任何價值.
核心原理:
1. 利用注解去標識物件與表的映射關系 @TableName(“表名稱”) 欄位與屬性的映射
2. 將公共的介面方法進行抽取,抽取到公共介面中,如果需要使用只需繼承即可. 注意事項:泛型問題
3. 操作物件時需要有專門的API實作物件與Sql的轉化.最終交給Mybatis去執行.
例子: userMapper.insert(user物件)
Sql : insert into 表名(欄位1,欄位2,欄位3…) values(值1,值2,值3…)
2.4 MybatisPlus入門案例
2.4.1 添加日志列印

2.4.2 入門案例
package com.jt;
import com.baomidou.mybatisplus.core.conditions.query.Query;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@SpringBootTest //寫測驗類時如果需要從容器中動態的獲取物件時使用
class SpringbootDemo2ApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void testMybatis01(){
List<User> userList = userMapper.findAll();
System.out.println(userList);
}
@Test
public void testSelectList(){
//查詢所有的資料
List<User> userList = userMapper.selectList(null);
System.out.println(userList);
}
/**
* 1.查詢用戶資料
* 1.1 根據id=51號資料
* Sql: select * from user where id=51
*/
@Test
public void select01(){
User user = userMapper.selectById(51) ; //根據主鍵查詢
System.out.println(user);
}
/**
* 2. name="王昭君"的用戶
* Sql: select * from user where name="xxx"
* 條件構造器:主要作用動態拼接where條件的
* 特殊符號:
* 1. = eq, 2. > gt , 3. < lt
* >= ge <=le
*/
@Test
public void select02(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "王昭君");
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println(userList);
}
/**
* 查詢性別為男性,要求按照年齡降序排列
* Sql: select * from user where sex="男" order by age desc
*/
@Test
public void select03(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("sex", "男")
.orderByDesc("age");
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println(userList);
}
/**
* 查詢name中包含 "精"用戶,按照年齡升序排序
* Sql: select * from user where name like "%精%" order by age asc
* "%精"
* "精%"
*/
@Test
public void select04(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "精")
.orderByAsc("age");
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println(userList);
}
/**
* 查詢age>=18 and age<100 and sex=男性用戶
* 默認的邏輯運算子and
*/
@Test
public void select05(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between("age", 18, 100)
.eq("sex", "男");
/*queryWrapper.ge("age", 18)
.lt("age", 100)
.eq("sex", "男");*/
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println(userList);
}
/**
* 查詢id= 1,3,5,6,7的用戶
* 查詢name="黑熊精/白龍驢/大喬"
*/
@Test
public void select06(){
Integer[] ids = {1,3,5,6,7};
List idList = Arrays.asList(ids); //轉化時需要使用包裝型別
List<User> userList = userMapper.selectBatchIds(idList);
System.out.println(userList);
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.in("name", "黑熊精","白龍驢","大喬");
List<User> userList2 = userMapper.selectList(queryWrapper);
System.out.println(userList2);
}
/**
* 查詢 id,name 全部用戶資訊
*/
@Test
public void select07(){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("id","name");
List<User> userList = userMapper.selectList(queryWrapper);
System.out.println(userList);
List<Map<String,Object>> userMap = userMapper.selectMaps(queryWrapper);
System.out.println(userMap);
}
@Test
public void insert(){
User user = new User();
user.setId(null).setName("嫦娥5號")
.setAge(5).setSex("女");
userMapper.insert(user);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/227845.html
標籤:java
