这篇文章主要介绍了Springboot怎么实现自动输出word文档功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

spring boot实现自动输出word文档功能

本文用到Apache POI组件
组件依赖在pom.xml文件中添加

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.0</version></dependency>

首先创建相关的实体类、编写需要用到的sql查询。

importlombok.Data;//选择题实体@DatapublicclassMultiQuestion{privateIntegerquestionId;privateStringsubject;privateStringsection;privateStringanswerA;privateStringanswerB;privateStringanswerC;privateStringanswerD;privateStringquestion;privateStringlevel;privateStringrightAnswer;privateStringanalysis;//题目解析privateIntegerscore;}

importlombok.Data;//填空题实体类@DatapublicclassFillQuestion{privateIntegerquestionId;privateStringsubject;privateStringquestion;privateStringanswer;privateIntegerscore;privateStringlevel;privateStringsection;privateStringanalysis;//题目解析}

importlombok.Data;//判断题实体类@DatapublicclassJudgeQuestion{privateIntegerquestionId;privateStringsubject;privateStringquestion;privateStringanswer;privateStringlevel;privateStringsection;privateIntegerscore;privateStringanalysis;//题目解析}

创建好要用到的实体类之后,利用mybatis写sql查询,可以分为两种:1、配置mapper.xml文件路径,在xml文件中编写sql语句。2、直接使用注解。本文使用方法为第二种。

@MapperpublicinterfaceMultiQuestionMapper{/***select*frommultiquestionswherequestionIdin(*selectquestionIdfrompapermanagewherequestionType=1andpaperId=1001*)*/@Select("select*frommulti_questionwherequestionIdin(selectquestionIdfrompaper_managewherequestionType=1andpaperId=#{paperId})")List<MultiQuestion>findByIdAndType(IntegerPaperId);@Select("select*frommulti_question")IPage<MultiQuestion>findAll(Pagepage);/***查询最后一条记录的questionId*@returnMultiQuestion*/@Select("selectquestionIdfrommulti_questionorderbyquestionIddesclimit1")MultiQuestionfindOnlyQuestionId();@Options(useGeneratedKeys=true,keyProperty="questionId")@Insert("insertintomulti_question(subject,question,answerA,answerB,answerC,answerD,rightAnswer,analysis,section,level)"+"values(#{subject},#{question},#{answerA},#{answerB},#{answerC},#{answerD},#{rightAnswer},#{analysis},#{section},#{level})")intadd(MultiQuestionmultiQuestion);@Select("selectquestionIdfrommulti_questionwheresubject=#{subject}orderbyrand()desclimit#{pageNo}")List<Integer>findBySubject(Stringsubject,IntegerpageNo);}

//填空题@MapperpublicinterfaceFillQuestionMapper{@Select("select*fromfill_questionwherequestionIdin(selectquestionIdfrompaper_managewherequestionType=2andpaperId=#{paperId})")List<FillQuestion>findByIdAndType(IntegerpaperId);@Select("select*fromfill_question")IPage<FillQuestion>findAll(Pagepage);/***查询最后一条questionId*@returnFillQuestion*/@Select("selectquestionIdfromfill_questionorderbyquestionIddesclimit1")FillQuestionfindOnlyQuestionId();@Options(useGeneratedKeys=true,keyProperty="questionId")@Insert("insertintofill_question(subject,question,answer,analysis,level,section)values"+"(#{subject,},#{question},#{answer},#{analysis},#{level},#{section})")intadd(FillQuestionfillQuestion);@Select("selectquestionIdfromfill_questionwheresubject=#{subject}orderbyrand()desclimit#{pageNo}")List<Integer>findBySubject(Stringsubject,IntegerpageNo);}

//判断题@MapperpublicinterfaceJudgeQuestionMapper{@Select("select*fromjudge_questionwherequestionIdin(selectquestionIdfrompaper_managewherequestionType=3andpaperId=#{paperId})")List<JudgeQuestion>findByIdAndType(IntegerpaperId);@Select("select*fromjudge_question")IPage<JudgeQuestion>findAll(Pagepage);/***查询最后一条记录的questionId*@returnJudgeQuestion*/@Select("selectquestionIdfromjudge_questionorderbyquestionIddesclimit1")JudgeQuestionfindOnlyQuestionId();@Insert("insertintojudge_question(subject,question,answer,analysis,level,section)values"+"(#{subject},#{question},#{answer},#{analysis},#{level},#{section})")intadd(JudgeQuestionjudgeQuestion);@Select("selectquestionIdfromjudge_questionwheresubject=#{subject}orderbyrand()desclimit#{pageNo}")List<Integer>findBySubject(Stringsubject,IntegerpageNo);}

写好mapper底层查询后,需要创建service及其实现类来调用mapper底层。例如:

publicinterfaceJudgeQuestionService{List<JudgeQuestion>findByIdAndType(IntegerpaperId);IPage<JudgeQuestion>findAll(Page<JudgeQuestion>page);JudgeQuestionfindOnlyQuestionId();intadd(JudgeQuestionjudgeQuestion);List<Integer>findBySubject(Stringsubject,IntegerpageNo);}

@ServicepublicclassJudgeQuestionServiceImplimplementsJudgeQuestionService{@AutowiredprivateJudgeQuestionMapperjudgeQuestionMapper;@OverridepublicList<JudgeQuestion>findByIdAndType(IntegerpaperId){returnjudgeQuestionMapper.findByIdAndType(paperId);}@OverridepublicIPage<JudgeQuestion>findAll(Page<JudgeQuestion>page){returnjudgeQuestionMapper.findAll(page);}@OverridepublicJudgeQuestionfindOnlyQuestionId(){returnjudgeQuestionMapper.findOnlyQuestionId();}@Overridepublicintadd(JudgeQuestionjudgeQuestion){returnjudgeQuestionMapper.add(judgeQuestion);}@OverridepublicList<Integer>findBySubject(Stringsubject,IntegerpageNo){returnjudgeQuestionMapper.findBySubject(subject,pageNo);}}

最后将输出文件方法写在controller层:

@RequestMapping("/exam/exportWord")publicvoidexportWord(intexamCode,HttpServletResponseresponse)throwsFileNotFoundException{//由于题目应于考试信息对应所以需要先查出考试信息后根据pageId来查找对应的组卷信息ExamManageres=examManageService.findById(examCode);intpaperId=res.getPaperId();List<MultiQuestion>multiQuestionRes=multiQuestionService.findByIdAndType(paperId);//选择题题库1List<FillQuestion>fillQuestionsRes=fillQuestionService.findByIdAndType(paperId);//填空题题库2List<JudgeQuestion>judgeQuestionRes=judgeQuestionService.findByIdAndType(paperId);//响应到客户端XWPFDocumentdocument=newXWPFDocument();//分页XWPFParagraphfirstParagraph=document.createParagraph();//格式化段落firstParagraph.getStyleID();XWPFRunrun=firstParagraph.createRun();inti=1;run.setText("一、选择题"+"");//换行for(MultiQuestionmultiQuestion:multiQuestionRes){Stringstr=multiQuestion.getQuestion();Stringstr1=multiQuestion.getAnswerA();Stringstr2=multiQuestion.getAnswerB();Stringstr3=multiQuestion.getAnswerC();Stringstr4=multiQuestion.getAnswerD();run.setText(i+"."+str+"");run.setText("A."+str1+"");run.setText("B."+str2+"");run.setText("C."+str3+"");run.setText("D."+str4+"");i++;}run.setText("二、填空题"+"");for(FillQuestionfillQuestion:fillQuestionsRes){Stringstr=fillQuestion.getQuestion();run.setText(i+"."+str+"");i++;}run.setText("三、判断题"+"");for(JudgeQuestionjudgeQuestion:judgeQuestionRes){Stringstr=judgeQuestion.getQuestion();run.setText(i+"."+str+"");i++;}document.createTOC();try{//设置相应头this.setResponseHeader(response,res.getSource()+"试卷.doc");//输出流OutputStreamos=response.getOutputStream();document.write(os);os.flush();os.close();}catch(Exceptione){e.printStackTrace();}}/***发送响应流方法*/privatevoidsetResponseHeader(HttpServletResponseresponse,StringfileName){try{try{fileName=URLEncoder.encode(fileName,"UTF-8");}catch(UnsupportedEncodingExceptione){e.printStackTrace();}response.setContentType("application/octet-stream;charset=UTF-8");response.setHeader("Content-Disposition","attachment;filename="+fileName);//遵守缓存规定response.addHeader("Pargam","no-cache");response.addHeader("Cache-Control","no-cache");}catch(Exceptionex){ex.printStackTrace();}}

感谢你能够认真阅读完这篇文章,希望小编分享的“Springboot怎么实现自动输出word文档功能”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!