一、减少查询返回数据量
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/n/135860.html
微信扫一扫
支付宝扫一扫