ibatis中N+1问题

背景:User Role UserRole 3个表的关系

我现在的需求:查找出所有用户,并且把他的角色也显示出来

一个用户可以有多个角色,那么User: id,name, Role

1.User ResultMap

<!-- 注意groupBy属性 -->
<resultMap id="user-result-map" class="com.mmblue.entity.system.User" groupBy="id">
    <result property="id" column="USERID" nullValue="0"/>
    <result property="name" column="USERNAME" javaType="string" jdbcType="VARCHAR2" nullValue=""/>
    <result property="realName" column="REALNAME" javaType="string" jdbcType="VARCHAR2" nullValue=""/>
    <result property="password" column="PASSWORD" javaType="string" jdbcType="VARCHAR2" nullValue=""/>
    <result property="createTime" column="CREATETIME" javaType="string" jdbcType="VARCHAR2" nullValue=""/>
    <result property="enable" column="ISENABLE" javaType="int" jdbcType="INTEGER" nullValue="0"/>
    <!-- 解决N+1问题 -->
    <result property="roles" resultMap="role.roleMap"/>
    
    <!-- 重现N+1问题 
    <result property="roles" column="roleid" select="role.queryRoleForObject_id" />
    -->
</resultMap>

2.Role ResultMap

<resultMap id="roleMap" class="com.mmblue.entity.system.Role">
    <result property="id" column="ROLEID" nullValue="0"/>
    <result property="name" column="ROLENAME" nullValue=""/>
    <result property="desp" column="ROLEDESP" javaType="string" jdbcType="VARCHAR2" nullValue=""/>
    <result property="logTime" column="logtime" javaType="java.util.Date" jdbcType="date"/>
    <result property="statu" column="statu" nullValue="0"/>
</resultMap>


<select id="queryRoleForObject_id" resultMap="role.roleMap" parameterClass="long" >
    select ROLEID,ROLENAME,ROLEDESP,logtime,statu from myivr_trole where roleId = #id#
</select>

 

3.User SELECT

<sql id="sql_user_where">
    select
        u.userid,
        u.username,
        u.realname,
        u.password,
        u.createtime,
        u.isenable,
            r.roleid,
            r.rolename,
            r.roledesp,
            r.logtime,
            r.statu
    from 
    myivr_tuser u inner join myivr_tuser_role ur
    on u.userid = ur.user_id 
    inner join myivr_trole r on ur.role_id = r.roleid
    <dynamic prepend="where">
        <isNotEmpty property="id" prepend="and">
            u.USERID = #id#
        </isNotEmpty>
        <isNotEmpty property="enable" prepend="and">
            u.ISENABLE = #enable#
        </isNotEmpty>					
    </dynamic>
</sql>

讲解问题重现:

<result property="roles" column="roleid" select="role.queryRoleForObject_id" />

 

这里用了select 属性,可以理解为一个抓取策略,会根据roleid去发一条SQL抓取,但是我现在需求是查询所有的用户

那么对应的roleid会有多个,那么就会发多条SQL

 

解决问题:

其实我用内连接已经查询出了用户、角色的全部信息,我在

    <!-- 解决N+1问题 -->
    <result property="roles" resultMap="role.roleMap"/>

这个result中,再次关联一个resulMap然后用groupId去组合即可。

 

 

内容概要:《中文大模型基准测评2025年上半年报告》由SuperCLUE团队发布,详细评估了2025年上半年中文大模型的发展状况。报告涵盖了大模型的关键进展、国内外大模型全景图及差距、专项测评基准介绍等。通过SuperCLUE基准,对45个国内外代表性大模型进行了六大任务(数学推理、科学推理、代码生成、智能体Agent、精确指令遵循、幻觉控制)的综合测评。结果显示,海外模型如o3、o4-mini(high)在推理任务上表现突出,而国内模型如Doubao-Seed-1.6-thinking-250715在智能体Agent和幻觉控制任务上表现出色。此外,报告还分析了模型性价比、效能区间分布,并对代表性模型如Doubao-Seed-1.6-thinking-250715、DeepSeek-R1-0528、GLM-4.5等进行了详细介绍。整体来看,国内大模型在特定任务上已接近国际顶尖水平,但在综合推理能力上仍有提升空间。 适用人群:对大模型技术感兴趣的科研人员、工程师、产品经理及投资者。 使用场景及目标:①了解2025年上半年中文大模型的发展现状与趋势;②评估国内外大模型在不同任务上的表现差异;③为技术选型和性能优化提供参考依据。 其他说明:报告提供了详细的测评方法、评分标准及结果分析,确保评估的科学性和公正性。此外,SuperCLUE团队还发布了多个专项测评基准,涵盖多模态、文本、推理等多个领域,为业界提供全面的测评服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值