开发者社区> 问答> 正文

如何向resultMap中的collection中配置的select传递条件 : 配置报错 

Mybatis 3.2.7 +Mysql 做一个小项目

现在需求是图书和作者多对多关系,配置了一个中间表 图书的resultMap中有一个作者的collection,现在有条件查询,需要根据作者查书,又涉及到分页。。

直接多表联合查询,因为图书和作者是多对多关系,有重复数据,分页做不好,就考虑用嵌套查询。嵌套查询作者的id不知道怎么传递给collection了,各位帮帮忙,看看有什么办法结局~谢谢。
附上源码:

 <resultMap id="BaseResultMap" type="cn.edu.bjut.zj.tims.entity.BookExtend" >     <id column="BOOKID" property="bookid" jdbcType="INTEGER" />

    <result column="TYPEID" property="typeid" jdbcType="INTEGER" />

    <result column="PUBLISHERID" property="publisherid" jdbcType="INTEGER" />

    <result column="BOOKNAME" property="bookname" jdbcType="VARCHAR" />

    <result column="NUM" property="num" jdbcType="INTEGER" />

    <result column="ISBN" property="isbn" jdbcType="VARCHAR" />

    <result column="PRICE" property="price" jdbcType="INTEGER" />

    <result column="PUBLISHERNAME" property="publishername" javaType="string" />

    <result column="TYPENAME" property="typename" javaType="string" />

    <result column="PRICE" property="price" jdbcType="INTEGER" />

    <collection property="alist" ofType="cn.edu.bjut.zj.tims.entity.Author" column={bookid=book_id,authorid=authorid}" select="queryAuthorByBookid"/>

  </resultMap>
<select id="queryAuthorByBookid" parameterType="java.util.HashMap" resultType="cn.edu.bjut.zj.tims.entity.Author">         SELECT t_abref.BOOKID,
            t_author.AUTHORID,
            t_author.AUTHORNAME         FROM t_author INNER JOIN t_abref ON t_author.AUTHORID = t_abref.AUTHORID         Where bookid=#{bookid} and t_author.AUTHORID, =#{authorid}   </select>
<select id="queryAllBook" parameterType="cn.edu.bjut.zj.tims.entity.BookVo" resultMap="BaseResultMap">   SELECT t.TYPENAME,
    p.PUBLISHERNAME,
    b.BOOKID book_id,
    b.TYPEID,
    b.PUBLISHERID,
    b.BOOKNAME,
    b.NUM,
    b.ISBN,
    b.PRICE FROM t_publisher p INNER JOIN t_book b ON p.PUBLISHERID = b.PUBLISHERID      INNER JOIN t_type t ON t.TYPEID = b.TYPEID          <where>                          <if test="typeid!=0">                 and b.TYPEID=#{typeid}             </if>             <if test="bookname!=null and bookname !=''">                 and bookname like #{bookname}             </if>                       </where>         <!--  Limit #{page.firstResult},#{page.maxResults} -->   </select>

展开
收起
kun坤 2020-06-03 14:43:34 1026 0
1 条回答
写回答
取消 提交回答
  • 兄弟,解决了吗?我现在也遇到这个问题了。######回复 @闫小军 : 换个方法吧######回复 @Eviltuzki : 我也同样的问题,有没有方法......######@Eviltuzki 嵌套查询是不是不能传页面上的参数?######@Eviltuzki 什么方法,说说,感谢。######换了个方法解决了。。######我也同样的问题,有没有方法...######主sql用

    SELECT tcs.id, tcs.key Key, IFNULL(#{code},'') Code from table 

    <collection property="tab" ofType="map" javaType="ArrayList" column="{Key=Key,Code=Code}" select="searchBykey">
     
    
     <select id="searchBykey" resultType="map" parameterType="java.util.Map">
            SELECT
                tcs.id,
                tp.name,
                tcs.remark,
                tcs.gmt_create gmtCreate,
                tcs.gmt_modified gmtModified,
                tcs.is_delete
            FROM
            t_custom_setting tcs
            LEFT JOIN t_setting ts ON tcs.setting_id = ts.id AND ts.is_delete = 0
            LEFT JOIN t_param tp on tp.value  = tcs.set_code and tp.obj = 'setting' and tp.is_delete = 0
            WHERE tcs.is_delete = 0
    				and tcs.set_key = #{Key}
             <if test="Code != '' and Code != null"> and tcs.set_code = #{Code}</if>
        </select>
     ######讲道理,Mybatis虽然支持这种关系查询,但是实际项目中最好别用,效率低
    2020-06-04 10:37:02
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spark SQL: Past, Present and Future 立即下载
Spark SQL:Past Present &Future 立即下载
低代码开发师(初级)实战教程 立即下载