后端框架(1):Mybatis

什么是框架?

蓋高樓,框架結構。

框架結構就是高樓的主體,基礎功能。

把很多基礎功能已經實現了(封裝了)。

在基礎語言之上,對各種基礎功能進行封裝,方便開發者,提高開發效率。

mybatis:對jdbc進行封裝

spring:對整個java后端架構進行管理的

springweb:對servlet層進行封裝

springboot:對spring框架的搭建進行封裝

Mybatis

介紹:

????????mybatis原來是Apache下main的一個開源項目,名為ibatis

????????后轉移到谷歌旗下,改名為mybatis

????????mybatis是一個優秀的數據持久層框架(數據持久層:dao層 數據訪問層)

????????mybatis是對jdbc進行的封裝,避免了jdbc中手動設置參數,手動映射結果的操作

????????mybatis將jdbc中的接口進行封裝,提供了他自己的類和接口實現

????????mybatis可以使用xml配置和注解的方式,將數據庫中記錄自動映射到java對象中,是一種ORM實現(對象關系映射)將可以自動將數據映射到對象中的這種框架,也稱為orm框架

????????mybatis還提供了動態sql 和 數據緩存

mybatis搭建

Mybatis 中文官網 mybatis – MyBatis 3 | 簡介

1、創建一個maven項目

2、在pom.xml導入mabatis依賴的jar

? ? ? ??

<!--mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.2</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency>?

3、創建一個全局的mybatis配置文件

? ? ? ? 在main文件夾中的recources里面創建一個名為mybatis.xml文件

???????????????????????????????

? ? ? ? 在mybatis.xml文件中配置核心全局相關信息等操作

????????配置數據庫連接

?<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--配置數據庫連接相關信息--><environments default="development"><environment id="development"><transactionManager type="JDBC"/><!--type="POOLED" 使用數據庫連接池功能,默認創建10個連接對象,減少頻繁創建銷毀連接對象--><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://127.0.0.1:3306/ssmdb?serverTimezone=Asia/Shanghai"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments></configuration>??

4、創建數據庫,創建表,準備數據

? ? ? ? 在mysql中創建例如名為ssmdb的數據庫,在此庫中創建名為admin的表

5、創建一個訪問接口,定義方法

? ? ? ? 在java中先創建好每個層所需要的包

????????????????

? ? ? ? 然后在dao層中創建AdminDao的接口

public interface AdminDao {Admin findAdminById(int id);
}

6、創建接口對應的sql映射文件,編寫sql

? ? ? ? 依舊在recources里面先創建名為mappers的文件夾(里面都放著一些sql映射文件),在mappers里創建一個名為AdminMapper.xml文件并編寫sql

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
?
<mapper namespace = "com.ffyc.mabatispro.dao.AdminDao"><select id="findAdminById" parameterType="int" resultType="com.ffyc.mybatis.model.Admin">select * from admin where id = #{id}</select>
</mapper>

? ? ? ? 再在mybatis.xml文件中將AdminMapper.xml文件注冊配置

<!--注冊映射文件--><mappers><mapper resource="mappers/AdminMapper.xml"></mapper></mappers>

7、測試mybatis

單表查詢

????????創建一個test類

public class Test1 {public static void main(String[] args) throws IOException {//1.mybatis讀取配置文件Reader resourceAsReader = Resources.getResourceAsReader("mybatis.xml");//2.創建 SqlSessionFactory,負責創建SqlSession對象(連接數據庫的會話對象,類似Connection)//sqlSessFactory對象也是只需要創建一個,創建后不需要銷毀SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsReader);//3.創建SqlSession對象SqlSession sqlSession = sqlSessionFactory.openSession();//4.創建接口的代理對象AdminDao adminDao = sqlSession.getMapper(AdminDao.class);//5.調用Admin admin = adminDao.findAdminById(1);//讓代理對象幫我們調用映射文件在與此接口中相同名稱的方法System.out.println(admin);//6.關閉會話對象sqlSession.close();//關閉與數據庫的連接對象}
}

控制臺所展現的是實現了日志功能后的結果(后面有日志功能的配置)

? ? ? ? 7.1增加

????????在AdminDao中寫方法????????

void insertAdmin(Admin admin);

????????在AdminMapper.xml中寫sql映射語句

    <!--useGeneratedKeys="true" 返回自增主鍵keyProperty="id" 定義接收屬性keyColumn="id" 定義主鍵列-->
<insert id="insertAdmin" parameterType="Admin" useGeneratedKeys="true" keyProperty="id" keyColumn="id">insert into admin(account,password,gender) values (#{account},#{password},#{gender})</insert>
    @Testpublic void insert(){Admin admin = new Admin();admin.setAccount("ccc");admin.setPassword("123");admin.setGender("男");SqlSession sqlSession = MybatisUtil.getSqlSession();AdminDao adminDao = sqlSession.getMapper(AdminDao.class);adminDao.insertAdmin(admin);//保存數據后端,需要立刻拿到這條數據在數據庫的主鍵sqlSession.commit();sqlSession.close();}

@Test:單元測試,程序員使用的測試方式,以方法為單位進行測試 使用junit組件實現單元測試

????????在maven中配置junit組件

<!--junit--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>provided</scope></dependency>
sqlSession.commit();//提交數據庫事務,當我們的程序代碼執行沒有任何問題時,再向數據庫發送提交事務操作,數據庫真正執行sql,出現異常則不提交事務(新增,修改,刪除完畢后,都需要手動提交事務)/*數據庫事務:是數據庫的一種管理的機制,是對一次連接數據庫過程的管理保證一次操作中,執行的多條sql,要么都成功執行,要么都不執行提交事務    數據庫才會真正的在數據庫執行這一次操作中的多條sql*/

? ? ? ? 7.2刪除

void deleteAdmin(int id);
<delete id="deleteAdmin" parameterType="int">delete from admin where id = #{id}</delete>

? ? ? ? 7.3修改

void updateAdmin(Admin admin);
<update id="updateAdmin" parameterType="Admin">update admin set account=#{account},password=#{password} where id = #{id}</update>

? ? ? ? 7.4查找

Admin findAdminByAccount(String account);
<select id="findAdminByAccount" parameterType="string" resultType="Admin">select * from admin where account = #{account}</select>

搭建補充:

1、在idea中安裝mybatisX插件

? ? ? ? 在setting中找到MybatisX插件并下載下來,若沒顯示相關圖標重啟Idea即可

2、數據庫連接池

鏈接數據庫 每次訪問數據庫時候,創建一個Connection,用完關閉,但是訪問量大了之后,每次都要創建新的連接對象,用完關閉,比較耗時

使用數據庫連接池,在池(集合)中先創建一些連接對象

用戶訪問時,就直接在池中獲取一個連接對象

用完不銷毀,還回到池中

這樣就減少頻繁創建銷毀連接對象

<dataSource type="POOLED">
<!--type="POOLED" 使用數據庫連接池功能,默認創建10個連接對象,減少頻繁創建銷毀連接對象-->

3、配置日志功能

<!--配置日志功能-->
<settings><setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

4、為類配置別名

<!--為類配置別名-->
<typeAliases><!--<typeAlias type="com.ffyc.mybatispro.model.Admin" alias="Admin"></typeAlias>--><package name="com.ffyc.mybatispro.model"/>
</typeAliases>

對象映射

如果表中的類名與類中的屬性名完全相同,mybatis會自動將查詢結果封裝 到POJO對象中.

如果java中使用標準駝峰命名,數據庫中使用下劃線連接命名,可以開始全局 設置實現自動轉換

<!--設置駝峰命名自動映射--><setting name="mapUnderscoreToCamelCase" value="true"/>

#{}:是占位符,是采用預編譯方式向sql中傳值,可以防止sql注入,如果我們往sql中傳值,就使用#{}

${}:是將內容直接拼接到sql語句中,一般不用于向sql中傳值,用于向sql中動態傳遞列名

#{}與${}之間的區別:? ??

1、底層實現不同

????????#{} 采用預編譯方式,防止sql注入,更加安全

????????${} 采用字符串拼接,直接將值拼接到sql中

2、使用場景不同

????????#{} 一般我們用于向sql中的列傳值

????????${} 一般用于向sql動態傳遞列名

????????????????例如:排序時,order by 后面的列名是可以改變

? ? ? ? ? ? ? ? ? ? ? ? ? ?select時,后面的列名也可以自由選擇

List<Admin> findAdmins1(@Param("Column") String Column);
<!--${}的實用案例--><select id="findAdmins1" resultType="Admin" parameterType="string">select * from admin order by ${Column} desc</select>
@Testpublic void find3 (){SqlSession sqlSession = MybatisUtil.getSqlSession();AdminDao adminDao = sqlSession.getMapper(AdminDao.class);adminDao.findAdmins1("id");//${}的用法sqlSession.commit();sqlSession.close();}

???????????????????? ??

多表查詢

關聯查詢(一對一)

???????? 以學生和專業為例

? ? ? ? 方式一:直接多表關聯查詢

(1)當查詢一個學生和他所在的專業時(返回的為一個學生對象)

	<!--關聯查詢方式1:直接多表關聯查詢出我們需要的數據(一對一)--><select id="findStudentById" resultMap="studentMap">selects.id,s.num,s.name,s.gender,m.name mnamefrom student s inner join major m on s.majorid = m.id where s.id = #{id}</select>
<!--對關聯查詢到的學生信息進行自定義映射封裝--><resultMap id="studentMap" type="student"><id column="id" property="id"></id><result column="num" property="num"></result><result column="name" property="name"></result><result column="gender" property="gender"></result><!--映射關聯數據  專業名稱  首先會創建一個Major對象,然后將專業名稱封裝到Major對象,最后將Major對象封裝到Student對象中去--><association property="major" javaType="Major"><result column="mname" property="name"></result></association></resultMap>

????????????????

(2)查詢所有學生(返回的為多個學生對象,應創建一個學生類集合存放)可以共用resultMap

<select id="findStudents" resultMap="studentMap">selects.id,s.num,s.name,s.gender,m.name mnamefrom student s inner join major m on s.majorid = m.id</select>

????????????????

? ? ? ? 方式二:嵌套查詢
<!--關聯查詢方式2:嵌套查詢  先查詢主表(學生表)(一對一)--><select id="findStudentById1" resultMap="studentMap1">select id,num,name,gender,majorid from student where id = #{id}</select><!--嵌套查詢學生關聯的專業--><select id="findMajorById" resultType="Major">select name from major where id = #{majorid}</select>
	<resultMap id="studentMap1" type="Student"><id column="id" property="id"></id><result column="num" property="num"></result><result column="name" property="name"></result><result column="gender" property="gender"></result><!--封裝關聯表數據--><association property="major" javaType="Major" select="findMajorById" column="majorid"></association></resultMap>

????????? ? ??

在一對一查詢時,resultMap中要用到<association>標簽用于想要關聯的表上

????????<association>中:property=""? 表示所要映射到的哪個成員變量上

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? javaType=""? 表示所映射的成員變量的數據類型

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? select=""? 表示映射的成員變量的查詢語句

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? column=""? 表示映射的成員變量要以上一個查詢的某一列數據作為查詢條件

關聯查詢(一對多)

? ? ? ? 方式一:直接多表關聯查詢

? ? ? ? (1)查詢一個專業時,可以將查詢到的多個學生封裝到一個集合中

<select id="findMajorById" resultMap="majorMap">selectm.id,m.name,s.num,s.name snamefrom major m inner join student s on m.id = s.majorid where m.id = #{id}</select>
<resultMap id="majorMap" type="Major"><id column="id" property="id"></id><result column="name" property="name"></result><!--將查詢關聯到的多個結果封裝到集合--><collection property="students" javaType="List" ofType="Student"><result column="num" property="num"></result><result column="sname" property="name"></result></collection></resultMap>

????????????????????????

? ? ? ? (2)查詢所有專業和每個專業的學生

? ? ? ? 有些專業目前還沒有學生,所以關聯要用left join

<select id="findMajors" resultMap="majorMap">selectm.id,m.name,s.num,s.name snamefrom major m left join student s on m.id = s.majorid</select>

????????????????????????

????????方式二:分成兩次查詢
<select id="findMajors1" resultMap="majorMap1">select id,name from major</select><select id="findStudents" resultType="Student">select num,name from student where majorid = #{id}</select>
<resultMap id="majorMap1" type="Major"><id column="id" property="id"></id><result column="name" property="name"></result><collection property="students" javaType="List" ofType="Student" select="findStudents" column="id"></collection></resultMap>

在一對多查詢時,resultMap中要用到<collection>標簽用于想要關聯的表上

????????<collection>標簽中:property=""? 表示所要映射到的哪個成員變量上

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??javaType=""??表示映射的成員變量的類型

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??ofType=""? 表示映射的成員變量的類型里的數據類型

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??select=""? 表示映射的成員變量的查詢語句

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? column=""? 表示映射的成員變量要以上一個查詢的某一列數據作為查詢條件

動態SQL問題

? ? ? ? 以前在寫sql查詢語句時,難免會遇到一些多個條件一起查詢的時候,當我們將每個條件都輸入時才會出現一條結果。但如果在其中一個條件不成立時,就要修改sql語句,非常痛苦!

? ? ? ? 在之前的動態sql語句中,例如:(借助Mybatis去展示原始動態sql問題)

<!--原始動態sql-->
<select id="teachers" resultType="Teacher">select * from teacherwhere <if test="num!=null">num = #{num}</if><if test="name!=null">and name = #{name}</if><if test="gender!=null">and gender = #{gender}</if></select>

當其中一個條件不成立或者多個條件不成立就會出現以下結果:

你的sql語句參差不齊,要么多關鍵字,要么關鍵字之間無sql語句

在之前對動態sql語句解決的辦法就是在where后面自己加一個判斷條件,讓它永遠成立,保證不管條件有沒有成立,sql語句優先保證無誤

<!--以前解決動態sql問題的解法--><select id="teachers" resultType="Teacher">select * from teacherwhere 1=1<if test="num!=null">num = #{num}</if><if test="name!=null">and name = #{name}</if><if test="gender!=null">and gender = #{gender}</if></select>

現在,在Mybatis里就增加了多種標簽用于解決動態SQL問題

? ? ? ? 1、if標簽

????????????????test屬性條件成立 執行if標簽體,不成立就不執行? ??

<select id="teachers" resultType="Teacher">select * from teacherwhere 1=1<if test="num!=null">num = #{num}</if><if test="name!=null">and name = #{name}</if><if test="gender!=null">and gender = #{gender}</if></select>

? ? ? ? 2、where標簽??

????????????????當where標簽 if語句有條件成立時,就會動態添加where關鍵字 還可以刪除where后面緊跟著的關鍵字,例如and、or

<select id="teachers" resultType="Teacher">select * from teacher<where><if test="num!=null">num = #{num}</if><if test="name!=null">and name = #{name}</if><if test="gender!=null">and gender = #{gender}</if></where></select>

? ? ? ? 3、trim標簽

????????????????當條件判斷有成立時,可以自定義前綴關鍵字和后綴關鍵字

????????????????????????prefix="" 自定義關鍵字

????????????????????????prefixOverrides="" 覆蓋指定的關鍵字

<select id="teachers" resultType="Teacher">select * from teacher<trim prefix="where" prefixOverrides="and|or"><if test="num!=null">num = #{num}</if><if test="name!=null">name = #{name}</if><if test="gender!=null">gender = #{gender}</if></trim></select>

? ? ? ? 4、foreach標簽

<select id="findTeacher" resultType="Teacher">select<foreach item="col" collection="list" separator=",">${col}</foreach>from teacher</select>

? ? ? ? <foreach>標簽中:item=""? 表示col變量存儲遍歷到當前的值

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?collection=""? 表示遍歷集合類型

?特殊字符的轉義

????????在編寫XML文件時,有些內容可能不想讓解析引擎解析執行,而是當作原始內容處理。

????????遇到此種情況,可以把這些內容放在CDATA區里,對于CDATA區域內的內容,XML解析程序不會處理,而是直接原封不動的輸出。

語法:<![CDATA[ 內容 ]]><![CDATA[<itcast><br/></itcast>]]>

????????對于一些單個字符,若想顯示其原始樣式,也可以使用轉義的形式予以處理。

特殊字符替代符號
&&amp;
<&lt;
>&gt;
"&quot;
,&apos;

緩存? ??

????????數據緩存 讓數據離我們的執行程序更近。讓程序能夠更快速的獲取到數據

????????手機緩存,瀏覽器緩存......cpu緩存等等

???有緩存,查詢下的查詢流程
? ?先從緩存中查詢,緩存中如果沒有,去數據庫查詢,查詢到后把數據放到緩存中,下次直接從緩存中獲取

mybatis一級緩存

? ? mybatis一級緩存,默認是SqlSession級別的,在同一個SqlSession中查詢到數據先緩存到SqlSession對象中
? ??第二次查詢數據時,先從SqlSession中查詢,如果有直接返回,沒有,再去查詢數據庫

一級緩存生命周期:

? ? 開始于SqlSession創建

? ? 結束于SqlSession關閉。如果期間執行了新增、修改、刪除操作也會清空當前SqlSession對象中的緩存數據

mybatis二級緩存

? ? 二級緩存是SqlSessionFactory級別的,可以讓多個SqlSession共享數據

????mybatis默認沒有開啟二級緩存,使用時需要配置開啟

? ? 如果開啟了二級緩存,當SqlSession關閉時,會將一級緩存中的數據存儲到二級緩存中。
? ? 其他的SqlSession就可以查詢二級緩存之前SqlSession查詢的數據

? ??二級緩存的配置:

? ? ? ? 1、在mybatis.xml配置文件中設置二級緩存的開關

<!--全局二級緩存開關--><setting name="cacheEnabled" value="true"/>

? ? ? ? 2、在對應的模型類里去實現 Serializable 接口

import java.io.Serializable;public class Teacher implements Serializable

? ? ? ? 3、在SQL 映射文件中添加一行:

<cache></cache>
<!--映射語句文件中的所有 select 語句的結果將會被緩存。映射語句文件中的所有 insert、update 和 delete 語句會刷新緩存。-->

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/81614.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/81614.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/81614.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu20.04系統搭建k8s1.28集群-docker作為容器運行時

ubuntu系統搭建 ubuntu-22.04.5-desktop-amd64.iso映像文件--->實際卻是20.4focal版本。 【安裝過程沒有特別指出的默認回車下一步】 【用戶和密碼設置】 【網絡連接】 【在vmware上安裝的話&#xff0c;網絡配置如下】【在vm里配置選擇nat或者橋接即可】 【國內源配置】&…

軟件I2C

軟件I2C 注意&#xff1a; SDA&#xff08;串行數據線&#xff09;和SCL&#xff08;串行時鐘線&#xff09;都是雙向I/O線&#xff0c;接口電路為開漏輸出。需通過上拉電阻接電源VCC。 軟件I2C說明 說明&#xff0c;有的單片機沒有硬件I2C的功能&#xff0c;或者因為電路設計…

C++性能測試工具——Vtune的使用

一、Intel Vtune的安裝 在前面初步認識了一下幾個性能的測試工具&#xff0c;本篇重點介紹一下Intel VTune Profiler&#xff0c;VTune是一個強大的性能分析工具&#xff0c;它屬于Intel oneAPI工具包中工具的一種。VTune的安裝只介紹在Linux平臺下的場景&#xff08;Windows安…

互聯網大廠Java求職面試:優惠券服務架構設計與AI增強實踐-6

互聯網大廠Java求職面試&#xff1a;優惠券服務架構設計與AI增強實踐-6 場景設定&#xff1a;技術總監張總坐在會議室里&#xff0c;鄭薪苦帶著自信的微笑走了進來。今天他們要圍繞優惠券服務的架構設計及如何結合AI進行增強展開討論。 第一輪面試&#xff1a;基礎架構設計 …

nginx模塊使用、過濾器模塊以及handler模塊

一、如何使用nginx的模塊 1.ngx_code.c: #include "ngx_config.h" #include "ngx_conf_file.h" #include "nginx.h" #include "ngx_core.h" #include "ngx_string.h" #include "ngx_palloc.h" #include "n…

【Odoo】Pycharm導入運行Odoo15

【Odoo】Pycharm導入運行Odoo15 前置準備1. Odoo-15項目下載解壓2. PsrtgreSQL數據庫 項目導入運行1. 項目導入2. 設置項目內虛擬環境3. 下載項目中依賴4. 修改配置文件odoo.conf 運行Pycharm快捷運行 前置準備 1. Odoo-15項目下載解壓 將下載好的項目解壓到開發目錄下 2. …

網絡安全-等級保護(等保) 2-5 GB/T 25070—2019《信息安全技術 網絡安全等級保護安全設計技術要求》-2019-05-10發布【現行】

################################################################################ GB/T 22239-2019 《信息安全技術 網絡安全等級保護基礎要求》包含安全物理環境、安全通信網絡、安全區域邊界、安全計算環境、安全管理中心、安全管理制度、安全管理機構、安全管理人員、安…

【SpringBoot】??整合飛書群機器人發送消息

&#x1f4a5;&#x1f4a5;????歡迎閱讀本文章????&#x1f4a5;&#x1f4a5; &#x1f3c6;本篇文章閱讀大約耗時3分鐘。 ??motto&#xff1a;不積跬步、無以千里 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目錄如下&#xff1a;&#x1f381;&#x1f381;&am…

我的多條件查詢

背景&#xff1a;2個表&#xff0c;是一對多的關系&#xff0c;一個實時視頻幀可以出現多個檢測結果 要求&#xff0c;可以根據&#xff0c;ids&#xff0c;起始時間&#xff0c;識別出的鳥的種類&#xff0c;來進行刪除。 出現的問題&#xff0c; 一致性沒有實現&#xff1a…

關于網站提交搜索引擎

發布于Eucalyptus-blog 一、前言 將網站提交給搜索引擎是為了讓搜索引擎更早地了解、索引和顯示您的網站內容。以下是一些提交網站給搜索引擎的理由&#xff1a; 提高可見性&#xff1a;通過將您的網站提交給搜索引擎&#xff0c;可以提高您的網站在搜索結果中出現的機會。當用…

【Oracle專欄】擴容導致數據文件 dbf 丟失,實操

Oracle相關文檔,希望互相學習,共同進步 風123456789~-CSDN博客 1.背景 同事檢查擴容情況,發現客戶擴容后數據盤后,盤中原有文件丟失,再檢查發現數據庫沒有啟動。通過檢查發現數據盤中丟失的是oracle的 dbf 表空間文件。數據庫無法啟動。 檢查情況:1)沒有rman備份 …

負載均衡—會話保持技術詳解

一、會話保持的定義 會話保持&#xff08;Session Persistence&#xff09;是一種負載均衡策略&#xff0c;其核心機制是確保來自同一客戶端的連續請求&#xff0c;在特定周期內被定向到同一臺后端服務器進行處理。這種機制通過記錄和識別客戶端的特定標識信息&#xff0c;打破…

CSRF攻擊 + 觀測iframe加載時間利用時間響應差異側信道攻擊 -- reelfreaks DefCamp 2024

參考: https://0x90r00t.com/2024/09/30/3708/ 題目信息 有些事情最好還是保持低調。當然&#xff0c;除非你是個真正的怪胎。 注意&#xff1a;該網站通過HTTPS提供服務 標志格式&#xff1a;DCTF&#xff5b;&#xff5d;題目實現了一個類似視頻網站的東西 在其提供的數據庫中…

JS逆向-某易云音樂下載器

文章目錄 介紹下載鏈接Robots文件搜索功能JS逆向**函數a&#xff1a;生成隨機字符串****函數b&#xff1a;AES-CBC加密****函數c&#xff1a;RSA公鑰加密** 歌曲下載總結 介紹 在某易云音樂中&#xff0c;很多歌曲聽是免費的&#xff0c;但下載需要VIP&#xff0c;此程序旨在“…

黑馬k8s(十)

1.Pod生命周期-鉤子函數 2.Pod生命周期-容器探測 因為沒有hello.txt文件 查看詳情&#xff1a; 修改為查看命令&#xff1a; 查看一下詳情&#xff1a; 因為只有一個80端口&#xff0c;沒有8080&#xff0c;所以會重啟 查看詳情&#xff1a; 修改成80&#xff1a; 因為沒有…

每日算法刷題Day9 5.17:leetcode定長滑動窗口3道題,用時1h

9. 1652.拆炸彈(簡單&#xff0c;學習) 1652. 拆炸彈 - 力扣&#xff08;LeetCode&#xff09; 思想 為了獲得正確的密碼&#xff0c;你需要替換掉每一個數字。所有數字會 同時 被替換。 如果 k > 0 &#xff0c;將第 i 個數字用 接下來 k 個數字之和替換。如果 k < 0…

Java IO及Netty框架學習小結

Netty netty官網: Netty 什么是Netty&#xff1f; Netty 是 一個異步事件驅動的網絡應用程序框架&#xff0c;用于快速開發可維護的高性能協議服務器和客戶端。Netty 是一個 NIO 客戶端服務器框架&#xff0c;可以快速輕松地開發網絡應用程序&#xff08;例如協議服務器和客…

計算機網絡筆記(二十七)——4.9多協議標簽交換MPLS

4.9.1MPLS的工作原理 一、MPLS基本工作原理 MPLS&#xff08;Multiprotocol Label Switching&#xff09;是一種介于數據鏈路層和網絡層之間的轉發技術&#xff0c;通過固定長度的標簽進行高速數據轉發。其核心特點是通過預建立的標簽交換路徑&#xff08;Label Switching Pa…

AI 賦能 Copula 建模:大語言模型驅動的相關性分析革新

技術點目錄 R及Python語言及相關性研究初步二元Copula理論與實踐&#xff08;一&#xff09;二元Copula理論與實踐&#xff08;二&#xff09;【R語言為主】Copula函數的統計檢驗與選擇【R語言為主】高維數據與Vine Copula 【R語言】正則Vine Copula&#xff08;一&#xff09;…

【洛谷P3386】二分圖最大匹配之Kuhn算法/匈牙利算法:直觀理解

題目&#xff1a;洛谷P3386 【模板】二分圖最大匹配 &#x1f955; 匈牙利算法本來是針對帶權圖最大匹配的&#xff0c;這里由于題目只是求最大匹配的邊數&#xff0c;所以我們也只考慮無權的情況。 &#x1f680; 本文旨在服務于看了別的關于匈牙利算法的文章但不甚理解的童…