若依表连接查询并导出excel

2021/10/25 周一
更新:

今天需要新增别其他关联表里的字段,发现并不用这么复杂,不需要建Pushamount类,直接在domain里加上pushamount属性,resultMap里加

<result column="pushamount" property="pushamount"/> 

就好了。

当时应该是有别的问题,我以为是这个地方不能直接写,所以就在这里花了很多时间去改,现在发现是没有必要的,但既然能实现,博客也是一种记录,就留着吧。


以下是原博客:

2021/10/15 周五
本人菜鸟一枚,也是刚刚开始进行基于若依的二次开发,如果有错误或者更好的实现方法,欢迎在评论区交流,十分感谢!

需求:需要从两张表中查数据并导出到excel

没有用若依代码生成的主子表查询模板,直接把两张表生成的单表模板代码,并做了一些其他改动。

1. domain

首先,主表和子表的实体类都是从若依代码中拿过来的

主表对应的实体类CarPayreflist,在其中加入了两个属性:

/** 业务推动额对象 */
@Excel(name = "业务推动额对象")
private Pushamount pushamountObject;

/** 业务推动额 */
@Excel(name = "业务推动额", width = 11)
private BigDecimal pushamount;

Pushamount即子表的实体类,pushamount属性就是子表中我需要的字段

2. mapper

Mapper只用了主表的Mapper,在其xml文件的resultMap里用association标签连接子表:

<association property="pushamountObject" javaType="com.clpc.un.project.system.download.domain.Pushamount">
    <result column="policyno" property="policyno"/>
    <result column="pushamount" property="pushamount"/>
    <result column="qwyforminsid" property="qwyforminsid"/>
    <result column="updatetime" property="updatetime"/>
    <result column="taxedpremium" property="taxedpremium"/>
    <result column="disrate" property="disrate"/>
</association>

然后是自定义了一个sql查询,主表左连接子表(根据业务需求加了过滤条件)

<select id="selectCarPayreflist" parameterType="CarPayreflist" resultMap="CarPayreflistResult">
    select a.*, b.`pushamount`
    from un_list_car_payreflist a
    left join app_carpolicy_pushamount b on a.`policyno` = b.`policyno`
    <where>
        <if test="level2comcode != null  and level2comcode != ''"> and level2comcode = #{level2comcode}</if>
        <if test="datadate != null "> and datadate = date_format(#{datadate},'%Y-%m-%d')</if>
    </where>
</select>

Mapper接口里添加对应的方法:

public List<CarPayreflist> selectCarPayreflist(CarPayreflist carPayreflist);
3. service

Service接口和实现类,同样的,添加这个方法

public List<CarPayreflist> selectCarPayreflist(CarPayreflist carPayreflist);
public List<CarPayreflist> selectCarPayreflist(CarPayreflist carPayreflist)
{
    return carPayreflistMapper.selectCarPayreflist(carPayreflist);
}
4. controller

Controller类就直接在自己的业务逻辑需要的地方调用selectCarPayreflist(CarPayreflist carPayreflist)方法就可以了

List<CarPayreflist> list carListDownloadService.selectCarPayreflist(carPayreflist);
5. 重点:如何取到子表字段

初步完成之后测试,导出的excel中能有Pushamount对象了,但是其中的pushamount业务推动额好像并没有取到

解决办法是,在主表实体类CarPayreflist中,去掉pushamount属性的set方法,直接在Pushamount对象赋值之后跟着赋值
在这里插入图片描述
(还需要注意的是,重写的toString()方法里,不要忘记添加自己新增的这两个属性)

这样就能取到了
在这里插入图片描述
之后不需要将Pushamount对象导出的话,在主表实体类里,把它的@Excel注解去掉。

Logo

快速构建 Web 应用程序

更多推荐