Java 导出Excel

一、引入依赖

<dependency>
     <groupId>com.sargeraswang.util</groupId>
     <artifactId>excel-util</artifactId>
     <version>1.2.1</version>
 </dependency>

二、数据库中数据

1.创建表

CREATE TABLE `t_user` (
  `user_id` int NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `sex` tinyint(1) DEFAULT NULL,
  `mobile` varchar(45) NOT NULL,
  `mail` varchar(50) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1003 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

2.导入数据

三、编写实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class TUser implements Serializable {
    @ExcelCell(index = 0,defaultValue = "用户ID")
    private Integer userId;
    @ExcelCell(index = 1,defaultValue = "用户名")
    private String username;
    @ExcelCell(index = 2,defaultValue = "性别")
    private int sex;
    @ExcelCell(index = 3,defaultValue = "电话号")
    private String mobile;
    @ExcelCell(index = 4,defaultValue = "邮箱")
    private String mail;
    @ExcelCell(index = 5,defaultValue = "创建时间")
    private String createTime;
}

四、利用反射拿到TUser的属性

public List<Object[]> getFields(){
        List<Object[]> fields = new ArrayList<Object[]>();
        List<Field> tempFields = new ArrayList<>();
        tempFields.addAll(Arrays.asList(TUser.class.getDeclaredFields()));

        for(Field field:tempFields){
            if(field.isAnnotationPresent(ExcelCell.class)){
                ExcelCell excelCell = field.getAnnotation(ExcelCell.class);
                if(excelCell != null){
                    field.setAccessible(true);
                    fields.add(new Object[]{field,excelCell});
                }
            }
        }
        return fields;

    }

五、编写查询所有tuser代码

1.映射配置文件

<mapper namespace="com.hzz.mydemo.dao.TUserDao">
    <insert id="insertTuser" parameterType="com.hzz.mydemo.entities.TUser" useGeneratedKeys="true" keyProperty="userId">
        insert into t_user(username,sex,mobile,mail,create_time) values(#{username},#{sex},#{mobile},#{mail},#{createTime})
    </insert>
    <!--    <select id="queryAll" resultType="com.hzz.mydemo.entities.TUser">-->
<!--        select * from Blog where id = #{id}-->
<!--    </select>-->
    <select id="queryAllUser" resultType="com.hzz.mydemo.entities.TUser">
        select user_id,username,sex,mobile,mail,create_time  from t_user
    </select>
</mapper>

2.Dao层、service层和serviceImpl层

@Mapper
public interface TUserDao {

    public List<TUser> queryAllUser();

    public int insertTuser(TUser tuser);
}

public interface TUserService {
    public List<TUser> queryAllUser();
    public int insertUser(TUser tUser);
}

@Service
public class TUserServiceImpl implements TUserService {
    @Autowired
    private TUserDao tUserDao;
    @Override
    public List<TUser> queryAllUser() {

        return tUserDao.queryAllUser();
    }

    @Override
    public int insertUser(TUser tUser) {
        return tUserDao.insertTuser(tUser);
    }
}

六、导出数据代码

ExcelSheet<TUser> sheet = new ExcelSheet<>();
        sheet.setSheetName("tuser");

        List<TUser> tUsers = tUserService.queryAllUser();
        sheet.setDataset(tUsers);
        List<Object[]> fields = getFields();
        Map<String, String> map1 = new LinkedHashMap<>();
        if(CollectionUtils.isNotEmpty(fields)){
            fields.stream().forEach(objects -> {
                Field field = (Field) objects[0];
                ExcelCell excelCells = (ExcelCell) objects[1];
                map1.put(field.getName(), excelCells.defaultValue());
            });
        }
        
        sheet.setHeaders(map1);
        File f= new File("test2.xls");
        OutputStream out = new FileOutputStream(f);
        List<ExcelSheet<TUser>> sheetList = new ArrayList<>();
        sheetList.add(sheet);
        ExcelUtil.exportExcel(sheetList,out);

七、导出的Excel

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值