主頁 > 資料庫 > Mybatis的基礎學習

Mybatis的基礎學習

2021-03-07 14:39:02 資料庫

一、Mybatis的框架介紹

  • 核心組態檔
    • properties屬性
    • typeAliases型別別名的設定
    • environments 環境配置
    • 添加映射檔案
    • plugings分頁插件的使用
  • 類的映射檔案
    • namespace命名空間
    • 增刪改查的sql標簽
    • ResultMap的使用
    • 資料添加后回傳主鍵selectKey
    • sql片段
    • Mybatis的動態sql
      • if where標簽
      • choose標簽
      • set標簽
      • trim標簽
      • foreach標簽
    • Mybatis的延遲加載
    • mybatis的快取機制
      • 一級快取
      • 二級快取
  • Mybatis的核心API介紹
    • Resources
    • SqlSessionFactoryBuilder
    • SqlSessionFactroy
    • SqlSession
  • 基于介面代理方式實作開發
  • Mybatis的多表聯合查詢
    • 關聯查詢
      • 多對一查詢
      • 一對多查詢
      • 多對多查詢
    • 嵌套查詢
      • 多對一查詢
      • 一對多
      • 多對多
  • Mybatis的注解
    • 常用的注解

  • Mybatis是一個持久層的框架、也是一個半自動的ORM(object relational mapping)框架

核心組態檔

properties屬性

可以創建一個properties檔案,將驅動、url、用戶名和密碼存放在其中

db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql:///資料庫的名稱
db.username=用戶名
db.password=密碼

好處:我們切換資料的時候只需要更改properties檔案中的配置即可
核心組態檔參考properties的方法

<properties resource="db.properties">

typeAliases型別別名的設定

當我們正常使用映射檔案的時候,要求resultType必須要寫全名稱,若我們在核心組態檔中設定別名,就可以簡寫

<!--當映射檔案中出現person就表示是com.jiale.beans.Person的物件-->
<typeAliases>
	<typeAlias type="com.jiale.beans.Person" alias="Person">
</typeAliases>

注意:別名可以忽略大小寫
若專案中的別名有很多,需要配置很多的別名,可以通過package的方式來配置

<!--表示當前包下的所有物體類都配置了別名,別名的名稱是類名-->
<typeAliases>
	<package name="com.jiale.beans">
</typeAliases>

environments 環境配置

配置資料庫中的連接環境

<!--在配置的多個環境中,默認使用哪一個-->
<environments  default="development">
	<!--單個環境的唯一標識,和default中的必須寫一樣的-->
	<environment id="development">
		<!--事務管理,當前的連接是否使用事務-->
		<transactionManager  type="JDBC"/>
		<!--dateSource資料源 連接資料庫的基礎設定-->
		<dateSource type="POOLED">
			<property name="driver" value="${db.driver}"/>
			<property name="url" value="${db.url}"/>
			<property name="username" value="${db.username}"/>
			<property name="password" value="${db.password}"/>
		</dateSource>
	</environment>
</environments>
  1. transcationManager配置事務管理,目前可以配置兩個引數
    JDBC:使用jdbc的事務管理,也意味著開啟了事務
    MANAGED:不使用事務,mybatis不使用事務,適合mybatis和其他框架、插件配合使用,其他框架來做事務管理
  2. dateSource 資料源屬性 type屬性
    POOLED:直接使用jdbc的連接池,但是使用連接池的概念,插件連接后,將連接放入到容器中來使用
    UNPOOLED:不使用連接池的概念,每次訪問都是新建一個連接
    JNDI:使用第三方的連接池 c3p0 dbcp

添加映射檔案

<mappers>
	<mapper resource="PersnMapper.xml">
</mappers>

plugings分頁插件的使用

1.添加依賴
2.核心組態檔中添加設定

<!--配置第三方的插件-->
<plugins>
	<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

3.正常查詢的時候添加分頁設定

//添加分頁設定
PageHelper.startPage(2,4);//當前的頁數為2,每頁的條數為4

4.可以使用分頁提供的工具類
pageNum:當前的頁數 pageSize:每頁的條數 size:當前頁的條數 prePage:上一頁的頁碼
nextPage:下一頁的頁碼 isFirstPage:是不是第一頁 isLastPage:是不是最后一頁 total:資料的總條數

類的映射檔案

namespace命名空間

<mapper namespace="">

增刪改查的sql標簽

<insert id="addPerson" parameterType="com.jiale.beans.Person">
	insert into person (name,sex,age) values(#{name},#{sex},#{age})
</insert>
<select id="getPerById" parameterType="int" resultType="com.jiale.beans.Person">
	select * from person where id=#{id}
</select >

每個增刪改查都有一個id,作為當前sql陳述句的唯一標識
parameterType:表示當前sql傳入的引數,如果傳入的引數是物件,必須要寫全名稱
resultType:只能在select標簽中使用,表示查詢后回傳的結果去映射的那個物件,如果回傳的是多個資料,mybatis會自動封裝為list集合,我們需要配置的是list集合的泛型型別

ResultMap的使用

使用前提:創建的物件和資料庫表不能自動映射(物件的屬性和資料庫中的名稱不一樣),可以通過手動的方法來實作

<!--自定義映射結果集 id的唯一標識  type 將結果映射到那個類中-->
<resultMapid="baseUser" type="User">
	<!--配置標簽有兩個id和result,效果是一樣的-->
	<!--每個標簽中都可以設定property物件的屬性和column資料庫的列-->
	<id property="id" column="id"/>
	<result property="name" column="uname"/>
	<result property="age" column="uage"/>
</resultMap>
<!--使用resultMap,必須是使用手動映射-->
<select id="getPerById" parameterType="int" resultType="baseUser">
	select * from person where id=#{id}
</select >

資料添加后回傳主鍵selectKey

<insert id="addPerson" parameterType="com.jiale.beans.Person">
	<!--在添加陳述句后執行對應的查詢,將查詢的結果賦值到id中-->
	<selectKey order="AFTER" keyProperty="id" resultType="int">
		SELECT LAST_INSERT_ID()
	</selectKey >
	insert into person (name,sex,age) values(#{name},#{sex},#{age})
</insert>

sql片段

類似于java中的封裝,將重復出現的sql陳述句封裝到sql片段中,在標簽內進行呼叫

<!--添加一個sql片段將重復的SQL進行封裝-->
<sql id="selectColumn">
	select id,name,sex,age from person
</sql>

<!--呼叫-->
<include refid="selectColumn">

Mybatis的動態sql

if where標簽

if:if條件如果成立,sql就執行,如果使用多個使用and和or連接
where:判斷where標簽內是否有sql陳述句,有就添加,沒有就不添加,可去掉sql最前面的and或or

select * from person
	<where>
		<if test="name != null and name != ''">
			and name like concat("%",concat(#{name},"%"))
		</if>
		<if test="sex!= null and sex!= ''">
			and sex = #{sex}
		</if>
		<if test="hobby != null and hobby != ''">
			and hobby= #{hobby}
		</if>
	</where>

choose標簽

一套判斷,該判斷里面只有一個判斷是正確的

select * from person
	<choose>
		<when test="name != null and name != ''">
			where name like concat("%",concat(#{name},"%"))
		</when>
		<when test="sex!= null and sex!= ''">
			where sex = #{sex}
		</when>
		<when test="hobby != null and hobby != ''">
			where hobby= #{hobby}
		</when>
		<otherwise>
			where age = 28
		</otherwise>
	</choose>

set標簽

自動在標簽的sql陳述句前面添加set,自動去掉后面的

update person
	<set>
		<if test="name != null and name != ''">
			and name like concat("%",concat(#{name},"%"))
		</if>
		<if test="sex!= null and sex!= ''">
			and sex = #{sex}
		</if>
		<if test="hobby != null and hobby != ''">
			and hobby= #{hobby}
		</if>
	</set>
	<where>
		 <if test="id != null and id != ''">
			and id= #{id}
		</if>
	</where>

使用set標簽的優點:避免了傳遞物件沒有屬性,在資料庫中將對應的引數修改為null的情況

trim標簽

去掉SQL陳述句的前后空格,還有個特殊的屬性
prefix:添加前綴 suffix:添加后綴 prefixOverrides:去掉前綴 suffixOverrides:去掉后綴

select * from person
		<trim prefix="where" prefixOverrides="and">
		<where>
			<if test="name != null and name != ''">
				and name like concat("%",concat(#{name},"%"))
			</if>
			<if test="sex!= null and sex!= ''">
				and sex = #{sex}
			</if>
			<if test="hobby != null and hobby != ''">
				and hobby= #{hobby}
			</if>
		</where>

foreach標簽

遍歷標簽,如果傳遞的資料是個陣列或者集合,才會使用遍歷標簽
標簽的屬性:
collection:需要遍歷的集合 item:表示迭代后每個物件的名稱 open:在遍歷開始前sql陳述句前面添加的內容
close:在遍歷開始后sql陳述句前面添加的內容 separator:在遍歷的程序中每次遍歷中間添加的內容

insert into person (name,sex,age)
	<foreach collection="list" item="per" open="values(" close=")" separator="),(">
		#{per.name},#{per.sex},#{per.age}
	</foreach>

Mybatis的延遲加載

1.延遲加載的概述
只能在嵌套回圈里面使用,延遲加載也叫懶加載、按需加載
在資料使用的情況下去加載資料,不使用就不加載,mybatis默認是關閉的,在正常使用中,如果加載的資料是大量的資料,加載的時候就會發生延遲,降低用戶的使用體驗,延遲加載根據具體的使用情況來決定是否使用
2.延遲加載的實作
(1)匯入依賴cglib
(2)區域延遲加載:fetchType=“lazy”
區域延遲加載的配置:必須在所有的association和collection標簽中添加fetchType,如果不添加就沒有延遲加載,會將所有的資料都查詢
(3)全域延遲加載
在核心組態檔中設定

<settings>
	<!--開啟全域的延遲加載-->
	<setting name="lazyLodingEnabled" value="true"/>
	<!--將讀取任意屬性就加載所有資料關閉-->
	<setting name="aggressiveLazyLoading" value="false"/>
</settings>

全域延遲加載的配置簡單,但是不能精確的定義延遲加載具體的使用

mybatis的快取機制

查詢的時候,同一個查詢執行多次,浪費資料庫的資源,在mybatis中可以使用查詢快取,查詢的結果放入記憶體中,下一次查詢直接獲取
如果要使用快取,需要將物件做序列化的操作

一級快取

sqlsession級別的快取,默認是開啟的
快取的資料什么時候清理
1.關閉sqlsession的時候
2.執行對應的刪改陳述句

二級快取

sqlsessionFactory級別的快取,sqlsessionFactory在專案運行的時候創建,在專案關閉的時候銷毀,二級快取是默認關閉的,二級快取是分塊的,根據命名空間區分的,
開啟二級快取,物體類必須序列化們沒有序列化會報例外
implements Serializeable
在核心組態檔的settings里面設定

<!--開啟二級快取-->
<setting name="cacheEnabled" value="true">

在映射檔案中配置

<!--開啟當前映射檔案的二級快取-->
<cache/>

二級快取是一般專案優化最常用的一種

Mybatis的核心API介紹

Resources

作用:讀取一個檔案將檔案轉化為位元組流檔案

//讀取核心組態檔,轉化為一個流物件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");

SqlSessionFactoryBuilder

作用:將讀取到的流物件創建一個sqlsession工廠

//創建一個sqlsession工廠
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);

SqlSessionFactroy

作用:生產sqlsession物件

//生產sqlsession物件
SqlSession sqlSession = factory.openSession();

SqlSession

作用:可以呼叫五個方法來操作資料庫insert update delete selectOne selectList

int i = sqlSession.insert("namespace.方法",p);

在執行增刪改方法的時候使用commit方法,提交事務
還可以呼叫一個close方法 關閉sqlsesion

基于介面代理方式實作開發

優點:呼叫方法的入參都是由自己定義的,回傳值型別包括是否增刪改查的方法都是自己判斷的
1.介面的開發規則
在映射檔案中,namespace必須是介面的全名稱
介面中的方法名必須和映射檔案中標簽的id一致
介面中的方法對應的入參必須和映射檔案中標簽中的parameterType一致
介面中的方法對應的回傳值必須要和映射檔案標簽中的resultType型別一樣(如果回傳的是集合,映射檔案配置的是泛型的型別,介面要配置list
2.配置calss實作介面的開發
介面必須和映射檔案的名字一樣
介面必須和映射檔案在同一個目錄下,在resouces中創建和介面同名的檔案夾來存放,

<mappers>
	<!--通過calss來配置-->
	<mapper calss="con.jiale.mapper.Test"/>
</mappers>
<mappers>
	<!--表示該包下的所有介面都配置了calss-->
	<package name="con.jiale.mapper"/>
</mappers>

Mybatis的多表聯合查詢

關聯查詢

一次性將所有表的資料都查詢出來

多對一查詢

在dog類中添加一個person 表示多對一的關系
映射檔案的配置

<mapper namespace="com,jiale.mapper.DogMapper">
	<!--自定義結果集  需要將person的資料進行匹配-->
	<resultMap id="baseDog" type="Dog">
		<id property="did" column="did"/>
		<result property="dname" column="dname"/>
		<result property="color" column="color"/>
		<!--專門設定多對一的標簽 association-->
		<association property="per" javaType="Person">
			<id property="id" column="id"/>
			<result property="name" column="name"/>
			<result property="sex" column="sex"/>
			<result property="age" column="age"/>
		</association>
	</resultMap>

一對多查詢

在person中添加一個List集合,表示所有的dog
映射檔案的配置

<mapper namespace="com,jiale.mapper.DogMapper">
	<!--自定義結果集  需要將person的資料進行匹配-->
	<resultMap id="basePerson" type="Person">
		<id property="id" column="id"/>
		<result property="name" column="name"/>
		<result property="sex" column="sex"/>
		<result property="age" column="age"/>
		<!--專門設定一對多的標簽 collection  ofType:集合泛型的型別-->
		<collection property="dogs" javaType="Dog">
			<id property="did" column="did"/>
			<result property="dname" column="dname"/>
			<result property="color" column="color"/>
		</collection>
	</resultMap>

多對多查詢

創建學生類有List集合,表示一個學生對應多個中間表的課程
創建課程類有LIst集合,表示每個課程對應多個中間表的學生
創建中間表有學生和課程
映射檔案的配置

<!--自定義結果集  學生型別-->
<resultMap id="baseStudent" type="Student">
	<id property="sid" column="sid"/>
	<result property="sname" column="sname"/>
	<result property="ssex" column="ssex"/>
	<result property="sage" column="sage"/>
	<!--配置學生和中間表的一對多關系-->
	<collection property="sc" javaType="Dog">
		<id property="scid" column="scid"/>
		<result property="score" column="score"/>
	</collection>
	<!--配置中間表和課程之間的關系-->
		<association property="co" javaType="Course">
			<id property="cid" column="cid"/>
			<result property="cname" column="cname"/>
			<result property="ctime" column="ctime"/>
		</association>
</resultMap>

嵌套查詢

多對一查詢

根據顏色查詢Dog,并根據id查詢Person

<!--自定義結果集-->
<resultMap id="baseDog" type="Dog">
	<id property="did" column="did"/>
	<!--設定多對一的關聯關系  column:將第一次查詢結果的某個列的值放入第二次查詢中-->
	<!--select:查詢person表要找的方法-->
	<association property="per" javaType="Person" column="pid" select="findPerById">
</resultMap>
<!--根據顏色查詢Dog-->
<select id="findDogByColor" parameterType="String" resultMap="baseDog">
	select * from dog where color = #{color}
</select >
<!--根據pid查詢person-->
<select id="findPerById" parameterType="int" resultType="Person">
	select * from person where id= #{pid}
</select >

一對多

根據id查詢person,再根據pid查詢對應的dog

<!--自定義結果集-->
<resultMap id="basePerson" type="Person">
	<!--設定一對多的關聯關系-->
	<collection property="dogs" javaType="Dog" column="id" select="findDogByPid">
</resultMap>
<!--根據id查詢person-->
<select id="findPerById" parameterType="int" resultMap="basePerson">
	select * from person where id= #{pid}
</select >
<!--根據pid查詢dog-->
<select id="findDogById" parameterType="int" resultType="Dog">
	select * from dog where pid= #{id}
</select >

多對多

查詢大于某個課時時間的課程

<!--自定義課程結果集-->
<resultMap id="baseCourse" type="Course">
	<id property="cid" column="cid">
	<!--設定一對多的關聯關系-->
	<collection property="sc" javaType="SC" column="cid" select="findDogByPid">
</resultMap>
<!--根據課時查詢課程-->
<select id="findCourseByTime" parameterType="int" resultMap="baseCourse">
	select * from course where ctime &gt; #{time}
</select >
<!--自定義課程結果集-->
<resultMap id="baseSC" type="SC">
	<!--設定多對一的關聯關系-->
	<association property="st" javaType="Student" column="sid" select="findStudentBySid">
</resultMap>
<!--根據課程的cid查詢中間表的方法-->
<select id="findSCByCid" parameterType="int" resultMap="baseSC">
	select * from student_course where cid= #{cid}
</select >
<!--根據sid查詢學生的方法-->
<select id="findStudentBySid" parameterType="int" resultType="Student">
	select * from student where sid= #{sid}
</select >

Mybatis的注解

常用的注解

@insert @delete @update @select :curd
@results:和resultMap一樣,自定義結果集 @result:在results下面使用,做列和屬性的映射
@one :配置多對一映射 @many:配置一對多映射

@Insert("insert into person (name,sex,age) values (#{name},#{sex},#{age})")
//多對一
@Select("select * from dog where did = #{did}")
@Results({	
	@Result(property = "did",column="did"),
	@Result(property = "person",javaType="Person.calss"column="pid"),
	one = @One(select = "findPerById")
})
Dog findDogByDid(Integer did);
//一對多
@Select("select * from person where id= #{id}")
@Results({	
	@Result(property = "id",column="id"),
	@Result(property = "dogs",javaType="List.calss"column="id"),
	many= @Many(select = "findDogByPid")
})
Dog findPerById(Integer id);

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/267106.html

標籤:其他

上一篇:MySQL8 常用命令之DDL、DML陳述句、約束

下一篇:Mysql資料庫知識總結

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more