开发常见场景之 CVS 文件导出



/* -- 依赖 --*/
    <dependency>
        <groupId>net.sourceforge.javacsv</groupId>
        <artifactId>javacsv</artifactId>
        <version>2.0</version>
    </dependency>

/*--entity domain--*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity //1
@NamedQuery(name="Person.withNameAndAddressQuery2",query = "select p from Person p where p.name = ?1 and p.address = ?2")
public class Person implements Serializable {

    private static final long serialVersionUID = 5918727834473026681L;

    @Id //2
    @GeneratedValue //3
    private Long id;

    private String name;

    private Integer age;

    private String address;

}

/* -- Controller --*/
@RestController
@RequestMapping("/person")
public class PersonController {
    
    @GetMapping("/cvs")
    public void expStream() throws IOException {
        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder
            .getRequestAttributes()).getResponse();
            
        response.setContentType("application/csv");
        response.setHeader("Content-Disposition", "attachment; filename=personList.csv");
        personService.getCvs(response);
    } 
}
/*--- Service  Interface and impl---*/
public interface PersonService {

    void getCvs(HttpServletResponse response) throws IOException;
}

@Service
public class PersonServiceImpl implements PersonService {

    @Autowired
    private PersonRepository personRepository;

    @Override
    public void getCvs(HttpServletResponse response) {

        List<Person> list = personRepository.findAll();

        String[] header = new String[]{"姓名", "地址", "年龄"};
        ServletOutputStream out = null;
        CsvWriter csvWriter = null;
        Integer sum = 0;
        try {
            out = response.getOutputStream();
            csvWriter = new CsvWriter(out, ',', Charset.forName("UTF-8"));
            /*-- 写入表头 --*/
            csvWriter.writeRecord(header);
            for (Person p : list) {
                csvWriter.write(withString(p.getName()));
                csvWriter.write(withString(p.getAddress()));
                Integer age = p.getAge();
                csvWriter.write(withString(p.getAge()));
                sum += age;
                /*-- 换行 --*/
                csvWriter.endRecord();
            }
            /*-- 汇总 --*/
            csvWriter.write("");
            csvWriter.write("");
            csvWriter.write(withString(sum));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            csvWriter.close();
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

    /**
     * 属性转环为String类型.
     *
     * @param obj
     * @return String
     */
    private String withString(Object obj) {
        if (obj == null) {
            return "";
        }
        if (String.class.isInstance(obj)) {
            return (String) obj;
        }
        if (Date.class.isInstance(obj)) {
            DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return format.format((Date) obj);
        }
        return obj + "";
    }
}

/*-- dao --*/

@SuppressWarnings("unused")
public interface PersonRepository extends BaseDao<Person, Long> {

}



SQL 脚本

/*
Navicat MySQL Data Transfer

Source Server         : ocpCloud
Source Server Version : 50724
Source Host           : 192.168.13.129:3306
Source Database       : test

Target Server Type    : MYSQL
Target Server Version : 50724
File Encoding         : 65001

Date: 2019-02-26 14:30:32
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for person
-- ----------------------------
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `address` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of person
-- ----------------------------
INSERT INTO `person` VALUES ('1', '北京', '20', '小天');
INSERT INTO `person` VALUES ('2', '北京', '20', '熊大');
INSERT INTO `person` VALUES ('3', '北京', '20', '熊二');
INSERT INTO `person` VALUES ('4', '长白山', '20', '熊大');
INSERT INTO `person` VALUES ('6', '上海', '19', '江小白');
INSERT INTO `person` VALUES ('7', '合肥', '32', '黄飞鸿');
INSERT INTO `person` VALUES ('8', '北京', '31', '江小鱼');
INSERT INTO `person` VALUES ('9', '上海', '30', '王老五');
INSERT INTO `person` VALUES ('10', '南京', '29', '黄世仁');
INSERT INTO `person` VALUES ('11', '武汉', '28', '马可波罗');
INSERT INTO `person` VALUES ('12', '合肥', '27', '戚继光');
INSERT INTO `person` VALUES ('13', '合肥', '32', '江大大');
INSERT INTO `person` VALUES ('14', '北京', '31', '熊大');
INSERT INTO `person` VALUES ('15', '上海', '30', '熊二');
INSERT INTO `person` VALUES ('16', '南京', '29', '喜洋洋');
INSERT INTO `person` VALUES ('17', '武汉', '28', '德玛西亚');
INSERT INTO `person` VALUES ('18', '合肥', '27', '土豪');
INSERT INTO `person` VALUES ('19', '合肥', '32', '努尔哈赤');
INSERT INTO `person` VALUES ('20', '北京', '31', '李白');
INSERT INTO `person` VALUES ('21', '上海', '30', '宋江');
INSERT INTO `person` VALUES ('22', '南京', '29', '刘德华');
INSERT INTO `person` VALUES ('23', '武汉', '28', '张曼玉');
INSERT INTO `person` VALUES ('24', '合肥', '27', '乔峰');

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值