mybatis開啟二級快取和懶載入,類型別名,類都簡稱
阿新 • • 發佈:2018-12-17
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>