一、減少查詢返回數據量
1、在查詢語句中使用 resultMap
,只選取需要的列,減少返回的數據量。
<resultMap id="userMap" type="User"> <id property="id" column="user_id" /> <result property="name" column="user_name" /> <result property="age" column="user_age" /> </resultMap> <select id="getUserById" resultMap="userMap" parameterType="java.lang.Long"> SELECT user_id, user_name, user_age FROM user WHERE user_id=#{id} </select>
2、使用分頁查詢,限制返回數據量。
<select id="getUser" resultType="User"> SELECT user_id, user_name, user_age FROM user LIMIT #{pageNum}, #{pageSize} </select>
二、合理使用緩存
1、開啟二級緩存,使用緩存降低查詢次數。
<cache eviction="LRU" flushInterval="600000" size="512" readOnly="true"> </cache>
2、使用查詢緩存
<select id="getUser" resultType="User" useCache="true"> SELECT user_id, user_name, user_age FROM user WHERE user_id=#{id} </select>
三、使用動態 SQL
1、使用If標籤,根據不同的條件動態生成查詢語句。
<select id="getUser" parameterType="User" resultMap="userMap"> SELECT user_id, user_name, user_age FROM user WHERE 1=1 <if test="id != null"> AND user_id = #{id} </if> <if test="name != null"> AND user_name = #{name} </if> </select>
2、使用choose, when, otherwise標籤,根據不同情況生成對應查詢語句。
<select id="getUser" parameterType="User" resultMap="userMap"> SELECT user_id, user_name, user_age FROM user <where> <choose> <when test="id != null"> user_id = #{id} </when> <when test="name != null"> user_name = #{name} </when> <otherwise> 1=1 </otherwise> </choose> </where> </select>
四、性能調優
1、使用索引加速查詢,避免全表掃描。
ALTER TABLE user ADD INDEX user_id_index (user_id);
2、使用延遲載入,減少不必要的查詢。
<resultMap id="userMap" type="User"> <id property="id" column="user_id" /> <result property="name" column="user_name" /> <association property="dept" resultMap="deptMap" lazy="true" /> </resultMap> <select id="getUser" resultMap="userMap" parameterType="java.lang.Long"> SELECT user_id, user_name, dept_id FROM user WHERE user_id=#{id} </select> <resultMap id="deptMap" type="Dept"> <id property="id" column="dept_id" /> <result property="name" column="dept_name" /> </resultMap> <select id="getDeptById" resultMap="deptMap" parameterType="java.lang.Long"> SELECT dept_id, dept_name FROM dept WHERE dept_id=#{id} </select>
原創文章,作者:YUAL,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/135860.html