1. 程式人生 > >mybatis開啟二級快取和懶載入,類型別名,類都簡稱

mybatis開啟二級快取和懶載入,類型別名,類都簡稱

SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 是用resource屬性載入外部配置檔案 -->
	<properties resource="db.properties">
		<!-- 如果外部配置檔案有該屬性,則內部定義屬性被外部屬性覆蓋-->
		<property name="jdbc.password" value="root123"/>
	</properties>
	<!-- 配置設定 -->
	<settings>
		<!-- 如果要使用延遲載入,就必須配置這兩個屬性 -->
		<setting name="lazyLoadingEnabled" value="true"/>
		<setting name="aggressiveLazyLoading" value="false"/>
		<!-- 開啟全域性快取,二級快取 -->
		<setting name="cacheEnabled" value="true"/>
	</settings>
	<!-- 類型別名 -->
	<!-- 配置對映檔案中使用的類型別名 -->
	<typeAliases>
		<!-- 給型別 com.igeek.crm.pojo.User取別名user-->
		<typeAlias type="com.igeek.crm.pojo.User" alias="user"/>
		<!-- 配置一個包,讓該包中所有的類都是用簡稱 -->
		<package name="com.igeek.crm.pojo"/>
	</typeAliases>
	
	
		
	<!-- 和spring整合後 environments配置將廢除 -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事務管理 -->
			<transactionManager type="JDBC" />
			<!-- 資料庫連線池 -->
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}" />
				<property name="url"
					value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>
	
	
	<!-- 註冊對映檔案 -->
	<!-- 將對映檔案配置到mybatis的配置檔案中 -->
	<mappers>
		<!-- 
		<mapper resource="sqlmap/UserMapper.xml"/>
		 -->
		 <!--
		 <mapper class="com.igeek.crm.mapper.UserMapper"/>
		 -->
		 
		 <package name="com.igeek.crm.mapper"/>
	</mappers>
	
</configuration>

懶載入:

<!-- 配置設定 -->
    <settings>
        <!-- 如果要使用延遲載入,就必須配置這兩個屬性 -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>
<?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:名稱空間,用於隔離sql,還有一個很重要的作用,後面會講 -->
<mapper namespace="com.igeek.crm.mapper.UserMapper">
	<!-- 開啟二級快取 -->
	<cache/>
	<!-- 查詢語句 -->
	<select id="queryByQueryVo" parameterType="QueryVo" resultType="User">
		SELECT * FROM user WHERE username LIKE '%${user.username}%'
	</select>
	
	<!--  -->
	<select id="queryUserCount"  resultType="_int">
		SELECT COUNT(*) FROM user
	</select>
	
	
	<!-- 配置一個resultMap解決一對多個問題 -->
	<resultMap type="User" id="userOrderMap">
		<!-- 配置使用者主鍵 -->
		<id column="id" property="id"/>
		<!-- 配置普通屬性 -->
		<result column="username" property="username"/>
		<result column="birthday" property="birthday"/>
		<result column="sex" property="sex"/>
		<result column="address" property="address"/>
		
		<!-- 對映一對多關係(對映集合) -->
		<!-- javaType:配置集合型別 -->
		<!-- ofType:配置集合內部的資料型別 -->
		<collection property="orders" javaType="list" ofType="Order">
			<!-- 對映主鍵 -->
			<id column="oid" property="id"/>
			<!-- 對映普通屬性 -->
			<result column="number" property="number"/>
			<result column="createtime" property="createTime"/>
			<result column="note" property="note"/>
		</collection>
	</resultMap>
	<!-- 查詢所有的使用者以及他們的訂單 -->
	<select id="queryAllUserAndOrder" resultMap="userOrderMap">
	SELECT
	u.id,
	u.username,
	u.birthday,
	u.sex,
	u.address,
	o.id oid,
	o.number,
	o.createtime,
	o.note
FROM
	`user` u
LEFT JOIN `orders` o ON u.id = o.user_id;
	</select>
	
	<select flushCache="false" id="queryUserById" resultType="User" parameterType="int">
		select * from user where id = #{id}
	</select>
</mapper>

開啟二級快取:

 

在MyBatis中有flushCache、useCache這兩個配置屬性,分為下面幾種情況: (1)當為select語句時: flushCache預設為false,表示任何時候語句被呼叫,都不會去清空本地快取和二級快取。 useCache預設為true,表示會將本條語句的結果進行二級快取。 (2)當為insert、update、delete語句時: flushCache預設為true,表示任何時候語句被呼叫,都會導致本地快取和二級快取被清空。 useCache屬性在該情況下沒有。 上面的資訊我是從MyBatis官方文件中找到的,會發現當為select語句的時候,如果沒有去配置flushCache、useCache,那麼預設是啟用快取的,所以,如果有必要,那麼就需要人工修改配置,修改結果類似下面: <select id="save" parameterType="XXXXXEO" statementType="CALLABLE" flushCache="true" useCache="false">     ……

</select>

類都簡稱別名: