测试Mybatis批量查询和使用HashMap查询效率

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试Mybatis批量查询和使用HashMap查询效率相关的知识,希望对你有一定的参考价值。

参考技术A Mybaits批量查询  多次点击最终稳定在1.1秒左右

HashMap查询  多次点击最终稳定在3.7秒左右

Mybaits批量查询  多次点击最终稳定在2.5秒左右

HashMap查询  多次点击最终稳定在4.2秒左右

Mybaits批量查询  多次点击最终稳定在3.5秒左右

HashMap查询  多次点击最终稳定在4.4秒左右

Mybaits批量查询  多次点击最终稳定在4.5秒左右

HashMap查询  多次点击最终稳定在4.3秒左右

Mybaits批量查询  多次点击最终稳定在6秒左右

HashMap查询  多次点击最终稳定在4.1秒左右

后面数据就不测了,如果你某个项目需要这样一种业务场景,你需要在循环里拿到对应条件进行查询时,

你可以选择把条件都存到集合里,然后再进行Mybaits的批量查询,你也可以先将所有数据查询出来,塞进Map里,然后依次从Map里取出。当你需要的数据占总数据的40%以下时,使用Mybatis批量查询可能更好一些,当数据占比超过40%时,使用Map更好一些。

注:以上数据和结论仅供参考,本人心血来潮进行的一波测试,纯属娱乐!!!

Mybatis批处理(批量查询,更新,插入)

mybatis批量查询

 

注意这里的 in 和   <trim prefix="(" suffix=")"> 以及 in ( )的三种方式的(例1(推荐),例2,例3(推荐))等价使用

 例1:

1
List<UBaseMenu> findMenuName(List<String> valueList);
技术图片
<select id="findMenuName" resultType="java.lang.String" parameterType="java.util.List">
select menu_name
from menu
where menu_id in
<foreach collection="list" item="valueList" open="(" close=")" separator=",">
#{valueList}
</foreach>
</select>
技术图片

例2:

List<ReturnCodeEntity> selectByIds(@Param("ids") List<Long> ids);
技术图片
<select id="selectByIds" parameterType="java.util.List"
            resultType="com.paic.ocss.gateway.model.entity.ReturnCodeEntity">
        SELECT
        id,
        code,
        message,
        recommendation,
        status
        FROM openapi_return_code
        WHERE id in
        <trim prefix="(" suffix=")">
            <foreach collection="ids" index="index" item="id" separator=",">
                #{id}
            </foreach>
        </trim>
    </select> 
技术图片

 例3:

mapper接口代码:

public List<User> findUserListByIdList(List<Long> idList);    

xml代码:

技术图片
<select id="findUserListByIdList" parameterType="java.util.ArrayList" resultType="User">    
    select * from user user    
    <where>    
        user.ID in (    
          <foreach collection="list"  item="id" index="index" separator=",">   
             #{id}   
          </foreach>    
        )    
    </where>    
</select>   
技术图片

 

批量插入:

mapper.java

int addResource(List<Resource> ResourceList);

mapper.xml

技术图片
<insert id="addResource" parameterType="java.util.List">
insert into resource (object_id, res_id, res_detail_value, 
res_detail_name)
values
<foreach collection="list" item=" ResourceList " index="index" separator=",">
(#{ResourceList.objectId,jdbcType=VARCHAR},
#{ResourceList.resId,jdbcType=VARCHAR},
#{ResourceList.resDetailValue,jdbcType=VARCHAR},
#{ResourceList.resDetailName,jdbcType=VARCHAR}
)
</foreach>
</insert>
技术图片

 

批量更新:

mapper.java

int updateRoles(List<String> roleList);

mapper.xml

技术图片
<update id="updateRoles" parameterType="java.util.List">
update role
set enabled = ‘0‘
where role_id in <foreach collection="list" item="roleIds" index="index" open="(" separator="," close=")"> 
#{roleIds} 
</foreach>
</update>
 
技术图片

以上是关于测试Mybatis批量查询和使用HashMap查询效率的主要内容,如果未能解决你的问题,请参考以下文章

mybatis批量查询-插入-删除

MyBatis缓存看这一篇就够了(一级缓存+二级缓存+缓存失效+缓存配置+工作模式+测试)

Mybatis 的 foreach 批量模糊 like 查询及批量插入

Mybatis 的 foreach 批量模糊 like 查询及批量插入

Mybatis 的 foreach 批量模糊 like 查询及批量插入

Mybatis 的 foreach 批量模糊 like 查询及批量插入