中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

淘寶上網(wǎng)站開(kāi)發(fā)退款網(wǎng)絡(luò)營(yíng)銷策劃的具體流程是

淘寶上網(wǎng)站開(kāi)發(fā)退款,網(wǎng)絡(luò)營(yíng)銷策劃的具體流程是,提示網(wǎng)站建設(shè)頁(yè)面,寧波新聞?lì)^條最新消息為了減少重復(fù)查詢給數(shù)據(jù)庫(kù)帶來(lái)的壓力,MyBatis提供了緩存機(jī)制,這種機(jī)制能夠緩存查詢的結(jié)果,避免重復(fù)的查詢。 MyBatis提供了兩種緩存方式: 一種為針對(duì)于SqlSession的緩存【默認(rèn)開(kāi)啟】 另一種為針對(duì)于全局的緩存【手動(dòng)開(kāi)啟】 一…

為了減少重復(fù)查詢給數(shù)據(jù)庫(kù)帶來(lái)的壓力,MyBatis提供了緩存機(jī)制,這種機(jī)制能夠緩存查詢的結(jié)果,避免重復(fù)的查詢。

MyBatis提供了兩種緩存方式:

一種為針對(duì)于SqlSession的緩存【默認(rèn)開(kāi)啟】

另一種為針對(duì)于全局的緩存【手動(dòng)開(kāi)啟】

一級(jí)緩存存在SqlSession對(duì)象中;二級(jí)緩存橫跨全部的SqlSession,對(duì)所有的查詢都生效。

?

一、一級(jí)緩存(本地緩存)

在沒(méi)有配置的情況下,MyBatis默認(rèn)開(kāi)啟一級(jí)緩存。

在實(shí)際開(kāi)發(fā)時(shí),使用同一個(gè)SqlSession對(duì)象調(diào)用同一個(gè)Mapper方法,往往只執(zhí)行一次SQL,這是因?yàn)?#xff0c;當(dāng)開(kāi)啟一級(jí)緩存時(shí),第一次查詢,MyBatis會(huì)將查詢結(jié)果放在緩存中,當(dāng)再次使用這個(gè)SqlSession進(jìn)行同一個(gè)查詢時(shí),如果數(shù)據(jù)庫(kù)的數(shù)據(jù)沒(méi)有被更改,則直接將緩存中的數(shù)據(jù)返回,不會(huì)再次發(fā)送SQL到數(shù)據(jù)庫(kù)。

?

1.用戶發(fā)送查詢請(qǐng)求給MyBatis,MyBatis接收到請(qǐng)求時(shí)創(chuàng)建一個(gè)SqlSession對(duì)象處理本次請(qǐng)求的數(shù)據(jù)庫(kù)操作,每個(gè)SqlSession對(duì)象有對(duì)應(yīng)的執(zhí)行器,執(zhí)行器在執(zhí)行SQL語(yǔ)句時(shí)會(huì)查詢Local Cache中是否存在此查詢的緩存,如果不存在,則執(zhí)行此次查詢,并將緩存放到Local Cache中;如果存在,則直接將此次查詢的緩存返回。

2.當(dāng)會(huì)話結(jié)束,即調(diào)用SqlSession的close()方法時(shí),會(huì)釋放此SqlSession中的所有緩存,并將此SqlSession禁用。如果想要清除緩存中的數(shù)據(jù),而不關(guān)閉SqlSession對(duì)象,可以調(diào)用SqlSession的clearCache()方法,此方法會(huì)清空該SqlSession一級(jí)緩存中的所有內(nèi)容。除此之外,當(dāng)SqlSession中執(zhí)行任何一個(gè)DML操作,即增加、刪除或更改操作時(shí),都將清空此SqlSession的一級(jí)緩存

在MyBatis中,對(duì)于兩次查詢,有以下四個(gè)條件來(lái)判定它們是否是完全相同的兩次查詢。 1)傳入的statementId是否相同 2)查詢時(shí)結(jié)果集范圍是否相同 3)查詢的最終SQL語(yǔ)句是否相同 4)傳遞給Statement的參數(shù)是否相同 當(dāng)這些判斷都相同時(shí),認(rèn)為這兩次查詢完全相同。

如果想要清除緩存中的數(shù)據(jù),而不關(guān)閉SqlSession對(duì)象,可以調(diào)用SqlSession的clearCache()方法,此方法會(huì)清空該SqlSession一級(jí)緩存中的所有內(nèi)容。除此之外,當(dāng)SqlSession中執(zhí)行任何一個(gè)DML操作,即增加、刪除或更改操作時(shí),都將清空此SqlSession的一級(jí)緩存

演示一級(jí)緩存的案例,實(shí)現(xiàn)步驟:

1、?添加MyBatis的依賴
    <properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><java.version>1.8</java.version></properties><dependencies><!-- mybatis的依賴 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.6</version></dependency><!-- mysql-connector-java 的依賴 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><!-- lombok 的依賴--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version><!--            <scope>provided</scope>--></dependency><!-- junit的依賴 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory><includes><include>**/*</include></includes></resource></resources></build>
2、添加MyBatis的核心配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--MyBatis的核心配置文件-->
<configuration><properties resource="jdbc.properties" /><settings><!--開(kāi)啟數(shù)據(jù)庫(kù)日志檢測(cè)--><setting name="logImpl" value="STDOUT_LOGGING"/></settings><!--類型別名--><typeAliases><package name="com.ambow.pojo" /></typeAliases><!--配置環(huán)境--><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><!--配置映射器--><mappers><!-- 4.將包內(nèi)的映射器接口實(shí)現(xiàn)全部注冊(cè)為映射器【推薦】 --><package name="com.ambow.dao" /></mappers>
</configuration>

核心配置文件,需要讀取的jdbc.properties文件:

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
username=root
password=root
3、創(chuàng)建POJO - 基于Lombok
package com.ambow.pojo;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dog {private int id;private String name;private int age;}
4、創(chuàng)建Mapper接口
//DogMapper.java
package com.ambow.dao;import com.ambow.pojo.Dog;public interface DogMapper {Dog selectDog();
}
5、創(chuàng)建Mapper映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!--DogMapper.xml-->
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--MyBatis接口開(kāi)發(fā),需要修改namespace-->
<mapper namespace="com.ambow.dao.DogMapper"><select id="selectDog" resultType="dog">SELECT * from dog where id = 1</select></mapper>
6、創(chuàng)建MybatisUtil工具類
package com.ambow.util;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class MyBatisUtil {//獲取SqlSessionpublic static SqlSession getSqlSesssion(){//獲取SqlSessionString resource = "mybatis-config.xml";InputStream inputStream = null;try {inputStream = Resources.getResourceAsStream(resource);} catch (IOException e) {e.printStackTrace();}//獲取SqlSessionFactory - 工廠對(duì)象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//        System.out.println(sqlSessionFactory);//獲取SqlSession - 連接對(duì)象SqlSession sqlSession = sqlSessionFactory.openSession();return sqlSession;}//關(guān)閉SqlSessionpublic static void closeSqlSession(SqlSession session){if (session != null) {session.close();}}}
7、測(cè)試一級(jí)緩存
package com.ambow.test;import com.ambow.dao.DogMapper;
import com.ambow.pojo.Dog;
import com.ambow.util.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;public class CacheTest {/*一級(jí)緩存:SqlSession級(jí)別的緩存,也就是說(shuō),同一個(gè)SqlSession共用一個(gè)緩存對(duì)象*/@Testpublic void test01(){//獲取SqlSessionSqlSession sqlSesssion01 = MyBatisUtil.getSqlSesssion();//第一次查詢 - id為1DogMapper dogMapper01 = sqlSesssion01.getMapper(DogMapper.class);Dog dog1 = dogMapper01.selectDog();System.out.println(dog1);//第二次查詢 - id為1DogMapper dogMapper02 = sqlSesssion01.getMapper(DogMapper.class);Dog dog2 = dogMapper02.selectDog();System.out.println(dog2);}/*一級(jí)緩存:兩個(gè)SqlSession對(duì)象,不會(huì)共用一個(gè)緩存對(duì)象*/@Testpublic void test02(){//獲取SqlSessionSqlSession sqlSesssion01 = MyBatisUtil.getSqlSesssion();SqlSession sqlSesssion02 = MyBatisUtil.getSqlSesssion();//第一次查詢 - id為1DogMapper dogMapper01 = sqlSesssion01.getMapper(DogMapper.class);Dog dog1 = dogMapper01.selectDog();System.out.println(dog1);//第二次查詢 - id為1DogMapper dogMapper02 = sqlSesssion02.getMapper(DogMapper.class);Dog dog2 = dogMapper02.selectDog();System.out.println(dog2);}/*一級(jí)緩存:SqlSession調(diào)用close()方法,緩存會(huì)被釋放*/@Testpublic void test03(){//獲取SqlSessionSqlSession sqlSesssion01 = MyBatisUtil.getSqlSesssion();//第一次查詢 - id為1DogMapper dogMapper01 = sqlSesssion01.getMapper(DogMapper.class);Dog dog1 = dogMapper01.selectDog();System.out.println(dog1);sqlSesssion01.close();//第二次查詢 - id為1DogMapper dogMapper02 = sqlSesssion01.getMapper(DogMapper.class);Dog dog2 = dogMapper02.selectDog();System.out.println(dog2);}/*一級(jí)緩存:調(diào)用SqlSession的clearCache()方法,可以釋放緩存*/@Testpublic void test04(){//獲取SqlSessionSqlSession sqlSesssion01 = MyBatisUtil.getSqlSesssion();//第一次查詢 - id為1DogMapper dogMapper01 = sqlSesssion01.getMapper(DogMapper.class);Dog dog1 = dogMapper01.selectDog();System.out.println(dog1);//清除緩存sqlSesssion01.clearCache();//第二次查詢 - id為1DogMapper dogMapper02 = sqlSesssion01.getMapper(DogMapper.class);Dog dog2 = dogMapper02.selectDog();System.out.println(dog2);}/*一級(jí)緩存:當(dāng)SqlSession中執(zhí)行任何一個(gè)DML操作,即增加、刪除或更改操作時(shí),都將清空此SqlSession的一級(jí)緩存*/@Testpublic void test05(){//獲取SqlSessionSqlSession sqlSesssion01 = MyBatisUtil.getSqlSesssion();//第一次查詢 - id為1DogMapper dogMapper01 = sqlSesssion01.getMapper(DogMapper.class);Dog dog1 = dogMapper01.selectDog();System.out.println(dog1);//執(zhí)行DML操作 - 數(shù)據(jù)更新int row = dogMapper01.updateDog();System.out.println("執(zhí)行了更新語(yǔ)句");//第二次查詢 - id為1DogMapper dogMapper02 = sqlSesssion01.getMapper(DogMapper.class);Dog dog2 = dogMapper02.selectDog();System.out.println(dog2);}
}

二、二級(jí)緩存(全局緩存)

MyBatis的二級(jí)緩存是Application級(jí)別的緩存,與一級(jí)緩存的原理類似。

不同的是,二級(jí)緩存的作用域擴(kuò)大到了每個(gè)命名空間,在同一個(gè)命名空間中的所有查詢都將被緩存。

MyBatis二級(jí)緩存的執(zhí)行流程:

1、MyBatis中的二級(jí)緩存默認(rèn)關(guān)閉,需要手動(dòng)開(kāi)啟,當(dāng)開(kāi)啟后,用戶發(fā)送有關(guān)數(shù)據(jù)庫(kù)操作的請(qǐng)求會(huì)被CacheExecutor攔截。

2、CacheExecutor攔截?cái)?shù)據(jù)庫(kù)操作后,到Configuration對(duì)象中查看對(duì)應(yīng)命名空間中的緩存,如果發(fā)現(xiàn)存在相同查詢的緩存,則直接返回該緩存;如果不存在,則進(jìn)入一級(jí)緩存中查找。

即先經(jīng)過(guò)二級(jí)緩存查找后,再?gòu)囊患?jí)緩存中尋找。

MyBatis在執(zhí)行到DML語(yǔ)句時(shí),會(huì)清空當(dāng)前命名空間中所有的緩存。此外,MyBatis開(kāi)啟二級(jí)緩存后可能會(huì)有臟讀問(wèn)題:按照開(kāi)發(fā)規(guī)范,每個(gè)類都有自己的命名空間,命名空間不允許有針對(duì)其他類的更改,但如果在B類的命名空間中對(duì)A類做出更改時(shí),B類命名空間中的二級(jí)緩存將會(huì)被清除,A類中的緩存不會(huì)被清除,當(dāng)A類命名空間中有針對(duì)于A類的查詢操作時(shí),就會(huì)尋找二級(jí)緩存中的舊數(shù)據(jù)并將其返回。 ?

演示案例

演示1:不開(kāi)啟二級(jí)緩存,一級(jí)緩存無(wú)法實(shí)現(xiàn)跨SqlSession之間的緩存。

演示2:開(kāi)啟二級(jí)緩存,可以實(shí)現(xiàn)跨SqlSession的緩存。

<!--設(shè)置 --><settings><!--緩存二級(jí)配置的全局開(kāi)關(guān)--><setting name="cacheEnabled" value="true" /><!--開(kāi)啟數(shù)據(jù)庫(kù)日志檢測(cè)--><setting name="logImpl" value="STDOUT_LOGGING"/></settings>

使用MyBatis的二級(jí)緩存,需要以下幾步:

  1. 在主配置文件中開(kāi)啟全局二級(jí)緩存配置

    <setting name="cacheEnabled" value="true">

  2. 在映射文件中加入<cache />標(biāo)簽

  3. 對(duì)應(yīng)的pojo需要實(shí)現(xiàn)序列化

  4. 注意:測(cè)試二級(jí)緩存需要commit提交,如果不提交是不會(huì)保存到二級(jí)緩存的

演示3:執(zhí)行DML操作后,二級(jí)緩存會(huì)清空。

演示4:在不規(guī)范開(kāi)發(fā)時(shí),二級(jí)緩存會(huì)出現(xiàn)臟讀情況。

  • 按照開(kāi)發(fā)規(guī)范,每個(gè)類都有自己的命名空間,命名空間不允許有針對(duì)其他類的更改,但如果在B類的命名空間中對(duì)A類做出更改時(shí),B類命名空間中的二級(jí)緩存將會(huì)被清除,A類中的緩存不會(huì)被清除,當(dāng)A類命名空間中有針對(duì)于A類的查詢操作時(shí),就會(huì)尋找二級(jí)緩存中的舊數(shù)據(jù)并將其返回。

http://www.risenshineclean.com/news/21455.html

相關(guān)文章:

  • 上海定制網(wǎng)站建設(shè)費(fèi)用在線磁力搜索神器
  • 泉州做網(wǎng)站開(kāi)發(fā)公司關(guān)聯(lián)詞有哪些關(guān)系
  • 政府網(wǎng)站群建設(shè) 采購(gòu)需求做百度關(guān)鍵詞排名的公司
  • 做餐飲在環(huán)保局網(wǎng)站備案靠譜的代運(yùn)營(yíng)公司
  • 電子設(shè)計(jì)大賽網(wǎng)站開(kāi)發(fā)百度怎么免費(fèi)推廣自己的產(chǎn)品
  • wordpress設(shè)置文章期限seo 公司
  • 四川手機(jī)響應(yīng)式網(wǎng)站建設(shè)推薦百度競(jìng)價(jià)推廣賬戶優(yōu)化
  • 傻瓜式建站平臺(tái)做引流的公司是正規(guī)的嗎
  • 網(wǎng)站變黑白代碼搜一搜排名點(diǎn)擊軟件
  • wordpress 文章評(píng)論數(shù)seo搜索引擎優(yōu)化價(jià)格
  • 學(xué)院網(wǎng)站建設(shè)管理規(guī)章制度下載百度app最新版到桌面
  • 光谷 網(wǎng)站建設(shè)公司競(jìng)價(jià)交易規(guī)則
  • 重慶做模塊網(wǎng)站seo網(wǎng)站優(yōu)化多少錢(qián)
  • 零基礎(chǔ)自己建網(wǎng)站開(kāi)發(fā)網(wǎng)站建設(shè)公司
  • 外國(guó)做的福利小視頻在線觀看網(wǎng)站淘寶網(wǎng)店的seo主要是什么
  • 時(shí)尚flash網(wǎng)站長(zhǎng)春網(wǎng)站優(yōu)化體驗(yàn)
  • 昆明網(wǎng)站開(kāi)發(fā)正規(guī)培訓(xùn)太原seo網(wǎng)絡(luò)優(yōu)化招聘網(wǎng)
  • wordpress新建會(huì)員主頁(yè)seo搜索優(yōu)化招聘
  • 福州高端品牌網(wǎng)站建設(shè)營(yíng)銷策劃案的模板
  • 微信小程序平臺(tái)入口seo是如何優(yōu)化
  • 樹(shù)莓派做網(wǎng)站服務(wù)器品牌營(yíng)銷推廣公司
  • 怎么做導(dǎo)購(gòu)網(wǎng)站八上數(shù)學(xué)優(yōu)化設(shè)計(jì)答案
  • 做論壇網(wǎng)站前段用什么框架好點(diǎn)seo臻系統(tǒng)
  • 當(dāng)前網(wǎng)站開(kāi)發(fā)什么語(yǔ)言找資源最好的是哪個(gè)軟件
  • 凡科網(wǎng)建站模板百度瀏覽器在線打開(kāi)
  • wordpress 微信主題下載win10優(yōu)化工具下載
  • 服務(wù)好的徐州網(wǎng)站建設(shè)汽車網(wǎng)絡(luò)營(yíng)銷策劃方案
  • 沈陽(yáng)創(chuàng)新網(wǎng)站建設(shè)報(bào)價(jià)長(zhǎng)沙網(wǎng)站優(yōu)化公司
  • 織夢(mèng)網(wǎng)站后臺(tái)管理拉新推廣一手接單平臺(tái)
  • 律師微網(wǎng)站建設(shè)如何做好網(wǎng)絡(luò)營(yíng)銷