麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

mybatis延遲加載

2019-11-11 05:43:05
字體:
供稿:網(wǎng)友

問題出現(xiàn)

由于多表查詢相對于單表查詢是非常消耗時間的,所以就出現(xiàn)了延遲加載的方法,首先延遲加載,先從單表開始查詢,在查詢對應(yīng)多表的數(shù)據(jù),單表查詢速度比多表查詢塊,所以延遲加載是可以提升數(shù)據(jù)查詢速度。

延遲加載的實現(xiàn)

使用resultMap實現(xiàn)高級映射,也就是使用association或者collection

實現(xiàn)延遲加載需要開啟mybatis延遲加載的開關(guān),和關(guān)閉積極加載(也就是按需加載)lazyLoadingEnable:延遲加載開關(guān),默認關(guān)閉,所以想要延遲加載必須開啟。aggressiveLazyLoading:積極加載,默認開啟,所以需要關(guān)閉,關(guān)閉后就是按需求來進行加載。

Mybatis配置文件加入

<settings>	<!-- 打開延遲加載開關(guān) -->	<setting name="lazyLoadingEnabled" value="true"/>	<!-- 關(guān)閉積極加載,就是按需加載 -->	<setting name="aggressiveLazyLoading" value="false"/></settings>

代碼實例

UserVo.java就是我們需要獲取的user信息和food信息,直接查詢必然會出現(xiàn)多表查詢這里我們具體實現(xiàn)就是先加載user信息,而food信息進行延遲加載

package com.my.shiro.Entity;public class UserVo {		PRivate static final long serialVersionUID = 1L;	private String username;	private String passWord;	private String permission;		private Food food;	public String getUsername() {		return username;	}	public void setUsername(String username) {		this.username = username;	}	public String getPassword() {		return password;	}	public void setPassword(String password) {		this.password = password;	}	public String getPermission() {		return permission;	}	public void setPermission(String permission) {		this.permission = permission;	}	public Food getFood() {		return food;	}	public void setFood(Food food) {		this.food = food;	}	public static long getSerialversionuid() {		return serialVersionUID;	}	}

UserMapper.xml   resultMap實現(xiàn)延遲加載需要的配置

<resultMap id="LazyLoading" type="com.my.shiro.Entity.UserVo" >	    <id column="username" property="username" jdbcType="VARCHAR" />	    <result column="password" property="password" jdbcType="VARCHAR" />		<result column="permission" property="permission" jdbcType="VARCHAR" />				<!-- 用于延遲加載 			select中的statement的id:比如findpassword,如果不在同一個mapper中就應(yīng)該加上全限定名			colum關(guān)聯(lián)信息 -->		<association property="food" javaType="com.my.shiro.Entity.Food" 			select="com.my.shiro.Dao.FoodMapper.findFoodByUsername" 			column="username">		</association>		<!-- <collection property=""></collection> -->	</resultMap>  這里使用association實現(xiàn)延遲加載這里主要有4的屬性

property:這里的這個屬性對應(yīng)的是UserVo中的foodjavaType:延遲加載數(shù)據(jù)類型select:延遲加載需要使用的方法對應(yīng)的statement的id也就一個sql方法對應(yīng)的id,這里需要注意的是如果這個sql不再該mapper.xml中那么需要加上這個sql的namespacecolum:關(guān)聯(lián)信息,也就是我們通常多表關(guān)聯(lián)的信息

resultMap的使用

<select id="findUserAndFood" resultMap="LazyLoading">		select * from user;	</select>這里先會執(zhí)行select * from user 查詢到信息,再通過resultMap中配置的association來執(zhí)行findFoodByUsername對應(yīng)的sql,從而實現(xiàn)延遲加載findFoodByUsername

<select id="findFoodByUsername" parameterType="java.lang.String" resultType="com.my.shiro.Entity.Food">		select * 		from food 		where username = #{username}	</select>

這里的parameter可以看做resultMap中的association中的colum對應(yīng)的值,也就是關(guān)聯(lián)屬性在這里我遇到一個問題就是當parametreType為sting的時候不可以寫成下面的格式

<where>	 <if test="username != null and username != ''">	    	and username = #{username}	 </if></where>

其實上面sql可以看作,這里避免了多表之間的查詢

select username,password,(select price from food where username = user.username)price,(select name from food where username = user.username)namefrom user至于collection使用法大體上是相似的


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品亚洲欧美一级在线 | 亚洲欧美成aⅴ人在线观看 免费看欧美黑人毛片 | 日本特级a一片免费观看 | 国产精品视频一区二区三区四区五区 | 久久2019中文字幕 | 黄污网站在线观看 | 久久久久久久久91 | 日本在线视频免费 | 91精品国产91热久久久做人人 | 男女羞羞视频在线观看免费 | 毛片大全免费看 | 少妇一级淫片免费看 | 黄色男女视频 | 久久影院免费观看 | av在线免费看网址 | 日本黄色a视频 | 羞羞视频一区 | 国产精品99免费视频 | 国产精品久久久久久久久久久天堂 | 92自拍视频 | 蜜桃视频在线免费播放 | 一级毛片在线观看视频 | 99国产精品国产免费观看 | 久草手机在线 | 一区二区三区视频播放 | 国产一区二区久久精品 | 黄色免费av | 精品人人人人 | 久草干 | 久久久一区二区三区视频 | 国产精品久久久久久久av | 日韩一级免费毛片 | 亚洲成人国产综合 | 蜜桃网站在线 | 国产成人强伦免费视频网站 | 中文区永久区 | 成人福利视频在线 | 深夜免费福利视频 | 羞羞视频免费入口网站 | 国产91九色在线播放 | 国产日产精品一区四区介绍 |