mybatis-plus

在碰到多表联查

方法一

不用xml的查询,直接在mapper.java里边的方法通过@Select注解的形式

@Select("select b.id, b.bus_num, b.name, b.create_time, b.end_time, b.staff_id,b.linkman, b.phone, b.status, b.update_time, " +
        "b.is_speak, b.is_video, b.team_num, b.day_num, b.channel_num, b.product_id, b.menu, b.mobile_type, b.industry_id, " +
        "b.server, p.name as product_name , s.name as server_name from intercom_business b " +
        "left join intercom_product p on p.id = b.product_id " +
        "left join intercom_server s on s.id = b.server")
public List<IntercomBusinessVo> selectAllBusinessList(IntercomBusiness intercomBusiness);

之后Vo类继承,只需要添加productName跟serverName这2个字段即可。然后就可以查询了。

但是这里只能查全部,不能where,如果需要where的话,特别是那种动态的where就很复杂。



方法二

沿用上边的Vo子类。

在xml中,重新新建一个resultMap,以及一个新的查询id

这个是原来的
<resultMap type="IntercomBusiness" id="IntercomBusinessResult">
    <result property="id"    column="id"    />
    <result property="busNum"    column="bus_num"    />
    <result property="name"    column="name"    />
    <result property="createTime"    column="create_time"  jdbcType="BIGINT" typeHandler="com.duijiang.typehandler.Long2DateHandler"  />
    <result property="endTime"    column="end_time"    />
    <result property="staffId"    column="staff_id"    />
    <result property="linkman"    column="linkman"    />
    <result property="phone"    column="phone"    />
    <result property="status"    column="status"    />
    <result property="updateTime"    column="update_time" jdbcType="BIGINT" typeHandler="com.duijiang.typehandler.Long2DateHandler"   />
    <result property="isSpeak"    column="is_speak"    />
    <result property="isVideo"    column="is_video"    />
    <result property="teamNum"    column="team_num"    />
    <result property="dayNum"    column="day_num"    />
    <result property="channelNum"    column="channel_num"    />
    <result property="productId"    column="product_id"    />
    <result property="menu"    column="menu"    />
    <result property="mobileType"    column="mobile_type"    />
    <result property="industryId"    column="industry_id"    />
    <result property="server"    column="server"    />
</resultMap>


这个是新的
<resultMap type="com.duijiang.domain.vo.IntercomBusinessVo" id="IntercomBusinessVoResult">
    <result property="id"    column="id"    />
    <result property="busNum"    column="bus_num"    />
    <result property="name"    column="name"    />
    <result property="createTime"    column="create_time"  jdbcType="CHAR" typeHandler="com.duijiang.typehandler.String2DateHandler"  />
    <result property="endTime"    column="end_time" jdbcType="CHAR" typeHandler="com.duijiang.typehandler.String2DateHandler"     />
    <result property="staffId"    column="staff_id"    />
    <result property="linkman"    column="linkman"    />
    <result property="phone"    column="phone"    />
    <result property="status"    column="status"    />
    <result property="updateTime"    column="update_time" jdbcType="INTEGER" typeHandler="com.duijiang.typehandler.Long2DateHandler"   />
    <result property="isSpeak"    column="is_speak"    />
    <result property="isVideo"    column="is_video"    />
    <result property="teamNum"    column="team_num"    />
    <result property="dayNum"    column="day_num"    />
    <result property="channelNum"    column="channel_num"    />
    <result property="productId"    column="product_id"    />
    <result property="menu"    column="menu"    />
    <result property="mobileType"    column="mobile_type"    />
    <result property="industryId"    column="industry_id"    />
    <result property="server"    column="server"    />
    <result property="productName"    column="product_Name"    />
    <result property="serverName"    column="server_name"    />

</resultMap>


这个就是新的查询方法
<select id="selectAllBusinessList" parameterType="IntercomBusiness" resultMap="IntercomBusinessVoResult">

    select b.id, b.bus_num, b.name, b.create_time, b.end_time, b.staff_id,b.linkman, b.phone, b.status, b.update_time, b.is_speak, b.is_video, b.team_num, b.day_num, b.channel_num, b.product_id, b.menu, b.mobile_type, b.industry_id, b.server, p.name as product_name, s.name as server_name
    from intercom_business b left join intercom_product p on p.id = b.product_id left join intercom_server s on s.id = b.server
    <where>
        <if test="busNum != null  and busNum != ''"> and bus_num like concat('%', #{busNum}, '%')</if>
        <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
        <if test="params.beginEndTime != null and params.beginEndTime != '' and params.endEndTime != null and params.endEndTime != ''"> and end_time between #{params.beginEndTime} and #{params.endEndTime}</if>
        <if test="staffId != null "> and staff_id = #{staffId}</if>
        <if test="linkman != null  and linkman != ''"> and linkman like concat('%', #{linkman}, '%')</if>
        <if test="phone != null  and phone != ''"> and phone like concat('%', #{phone}, '%')</if>
        <if test="status != null "> and status = #{status}</if>
        <if test="isSpeak != null "> and is_speak = #{isSpeak}</if>
        <if test="isVideo != null "> and is_video = #{isVideo}</if>
        <if test="teamNum != null "> and team_num = #{teamNum}</if>
        <if test="dayNum != null "> and day_num = #{dayNum}</if>
        <if test="channelNum != null "> and channel_num = #{channelNum}</if>
        <if test="productId != null "> and product_id = #{productId}</if>
        <if test="menu != null  and menu != ''"> and menu = #{menu}</if>
        <if test="mobileType != null "> and mobile_type = #{mobileType}</if>
        <if test="industryId != null "> and industry_id = #{industryId}</if>
        <if test="server != null "> and server = #{server}</if>
    </where>
</select>


当出现单条查询时,其实也可以用all的方法。只需要传入对于的where就行了

Powered By Z-BlogPHP 1.7.4

Copyright 粤ICP备2024347557号 Rights Reserved.