SpringBoot基础-word导出
引言
在我们做项目的时候会需要把数据库中的数据导出到word当中,这篇博客使用FreeMarker实现了word的导出。以下面word为例实现word的导出。
主要步骤如下:
创建数据库
创建student_word表,用来存储学生信息
CREATE TABLE `student_word` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL COMMENT '姓名',`number` varchar(255) DEFAULT NULL COMMENT '编号',`img_url` varchar(255) DEFAULT NULL COMMENT '头像路径',PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生信息';创建score表,用来存储成绩
CREATE TABLE `score` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`location` int(255) DEFAULT NULL COMMENT '位置1各科成绩,2总成绩',`name` varchar(255) DEFAULT NULL COMMENT '课程名称',`value` decimal(10,2) DEFAULT NULL COMMENT '得分',`student_word_id` bigint(20) DEFAULT NULL COMMENT '学生id',PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
创建SpringBoot项目
导入依赖
1.8 UTF-8 UTF-8 2.3.7.RELEASE 2.5 1.3.3 4.1.2 org.apache.poi poi-ooxml 4.1.2 commons-io commons-io ${commons.io.version} commons-fileupload commons-fileupload ${commons.fileupload.version} org.springframework.boot spring-boot-starter-freemarker org.springframework.boot spring-boot-starter-jdbc org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-web com.alibaba fastjson 1.2.72 com.baomidou mybatis-plus-boot-starter 3.4.2 org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.4 org.springframework.boot spring-boot-devtools runtime true mysql mysql-connector-java runtime org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine org.springframework.boot spring-boot-starter-logging * * test ch.qos.logback logback-classic 配置application.yml
mybatis:mapper-locations: classpath:/mybatis/**/*.xmltype-aliases-package: com.example.note.domainmap-underscore-to-camel-case: true mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpltypeAliasesPackage: com.example.note.domain #存放实体类的目录路径mapperLocations: classpath:mybatis/**/*.xml# 全局配置id自增 =>global-config:db-config:id-type: autoserver:port: 8080 spring:application:name: note-backdatasource:driver-class-name: com.mysql.cj.jdbc.Drivername: defaultDataSourcepassword: '123456789'url: jdbc:mysql://localhost:3306/note?serverTimezone=UTCusername: 'root'freemarker:cache: falsecharset: utf-8expose-request-attributes: trueexpose-session-attributes: truesuffix: .ftltemplate-loader-path: classpath:/webapp/
编写项目
创建实体类
package com.example.noteback.studentword.domain;import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data;@Data @TableName("student_word") public class Student {private Long id;private String name;private String number;private String imgUrl; }@Data @TableName("score") public class Score {private Long id;private Integer location;private String name;private Double value;private Long studentWordId; }创建Mapper接口
package com.example.noteback.studentword.mapper;import com.example.noteback.studentword.domain.Score; import com.example.noteback.studentword.domain.Student; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param;import java.util.List;@Mapper public interface StudentWordMapper {public Student getStudentById(@Param("id")Long id);public ListgetStudentsScoreListByStudentId(@Param("studentId")Long studentId); } 创建StudentWordMapper.xml
创建Service接口
package com.example.noteback.studentword.service;import com.example.noteback.studentword.domain.Score; import com.example.noteback.studentword.domain.Student; import org.apache.ibatis.annotations.Param;import java.util.List;public interface IStudentWordService {public Student getStudentById(Long id);public ListgetStudentsScoreListByStudentId(Long studentId); } 创建ServiceImpl类
package com.example.noteback.studentword.service.impl;import com.example.noteback.studentword.domain.Score; import com.example.noteback.studentword.domain.Student; import com.example.noteback.studentword.mapper.StudentWordMapper; import com.example.noteback.studentword.service.IStudentWordService; import org.springframework.beans.factory.annotation.Autowired;import java.util.List;public class StudentWordServiceImpl implements IStudentWordService {@Autowiredprivate StudentWordMapper studentWordMapper;@Overridepublic Student getStudentById(Long id) {return this.studentWordMapper.getStudentById(id);}@Overridepublic ListgetStudentsScoreListByStudentId(Long studentId) {return this.studentWordMapper.getStudentsScoreListByStudentId(studentId);} }
word导出
这步骤很简单,因为我们要使用FreeMarker进行,所以我们先得把word转成FreeMarker辨别出来的格式:
第一步,word打开我们要转的文件,另存为xml格式
第二部修改后缀为ftl,存放到resource目录下
上述步骤结束之后,正式开始编写word导出方法
package com.example.noteback.studentword.controller;import com.example.noteback.studentword.domain.Score; import com.example.noteback.studentword.domain.Student; import com.example.noteback.studentword.service.impl.StudentWordServiceImpl; import freemarker.template.Configuration; import freemarker.template.Template; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import sun.misc.BASE64Encoder;import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;@RestController @RequestMapping("studentWord") public class StudentWordController {@Autowiredprivate StudentWordServiceImpl studentWordService;@GetMapping("word")public HttpServletResponse word(@RequestParam("studentId") Long id,HttpServletResponse response) throws Exception {/** 初始化配置文件 **/Configuration configuration = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);/** 设置编码 **/configuration.setDefaultEncoding("utf-8");/** 我的ftl文件是放在D盘的**/String fileDirectory = "E:\\DATA\\IDEA-2022\\note\\note-back\\src\\main\\resources\\word\\";/** 加载文件 **/configuration.setDirectoryForTemplateLoading(new File(fileDirectory));/** 加载模板 **/Template template = configuration.getTemplate("student.ftl");/** 准备数据 **/MapdataMap = new HashMap<>();//学生信息Student student = this.studentWordService.getStudentById(id);dataMap.put("number", student.getNumber());dataMap.put("name", student.getName());dataMap.put("img", getImageStr(student.getImgUrl()));//得分List scoreList = this.studentWordService.getStudentsScoreListByStudentId(id);//非总分List 编辑student.ftl模板
源码
gitee公开仓库
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!



