若依表连接查询并导出excel
若依表连接查询并导出excel2021/10/15 周五本人菜鸟一枚,也是刚刚开始进行基于若依的二次开发,如果有错误或者更好得实现方法,欢迎在评论区交流,十分感谢!需求:需要从两张表中查数据并导出到excel没有用若依代码生成的主子表查询模板,直接把两张表生成的单表模板代码,并做了一些其他改动。1. domain首先,主表和子表的实体类都是从若依代码中拿过来的主表对应的实体类CarPayrefli
若依表连接查询并导出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注解去掉。
更多推荐
所有评论(0)