Mysql 休眠导出到csv

Mysql 休眠导出到csv,mysql,hibernate,hql,export-to-excel,export-to-csv,Mysql,Hibernate,Hql,Export To Excel,Export To Csv,我想将查询结果导出到excel或csv文件。 我正在使用hibernate struts。 是否有类似“输入输出文件”的查询可以直接将excel导出到指定位置? 在MySQL数据库中,“into-outfile”查询工作正常,但在hibernate中不起作用。 我尝试使用本机sql,但它给出了错误“无法执行批量操作查询”,无论如何,我无法解决这个问题。 我正在使用MySQL数据库。如果您正在编写web应用程序并使用spring,则可以通过将数据写入输出流来完成 public class CsvM

我想将查询结果导出到excel或csv文件。 我正在使用hibernate struts。 是否有类似“输入输出文件”的查询可以直接将excel导出到指定位置? 在MySQL数据库中,“into-outfile”查询工作正常,但在hibernate中不起作用。 我尝试使用本机sql,但它给出了错误“无法执行批量操作查询”,无论如何,我无法解决这个问题。
我正在使用MySQL数据库。

如果您正在编写web应用程序并使用spring,则可以通过将数据写入输出流来完成

public class CsvMessageConverter extends AbstractHttpMessageConverter<CsvResponse> {
   public static final MediaType MEDIA_TYPE = new MediaType("text", "csv", Charset.forName("UTF-8"));
   public CsvMessageConverter() {
       super(MEDIA_TYPE);
   }

   protected boolean supports(Class<?> clazz) {
       return CsvResponse.class.equals(clazz);
   }

   protected void writeInternal(CsvResponse response, HttpOutputMessage output) throws Exception {
       output.getHeaders().setContentType(MEDIA_TYPE);
       output.getHeaders().set("Content-Disposition", "attachment; filename=\"" + response.getFilename() + "\"");
       OutputStream out = output.getBody();

       CsvWriter writer = new CsvWriter(new OutputStreamWriter(out), '\u0009');
       List<YourPojo> allRecords = response.getRecords();
       for (int i = 1; i < allRecords.size(); i++) {
            YourPojo aReq = allRecords.get(i);
            writer.write(aReq.toString());
       }
       writer.close();
   }
}
编写一个简单的类来构造您的响应

public class CsvResponse {    
   private final String filename;
   private final List<YourPojo> records;

   public CsvResponse(List<YourPojo> records, String filename) {
       this.records = records;
       this.filename = filename;
   }
   public String getFilename() {
       return filename;
   }
   public List<YourPojo> getRecords() {
       return records;
   }
}
公共类CsvResponse{
私有最终字符串文件名;
私人最终名单记录;
公共CSVRResponse(列表记录、字符串文件名){
这个.记录=记录;
this.filename=文件名;
}
公共字符串getFilename(){
返回文件名;
}
公共列表记录(){
退货记录;
}
}
现在编写一个消息转换器,将它们写入输出流

public class CsvMessageConverter extends AbstractHttpMessageConverter<CsvResponse> {
   public static final MediaType MEDIA_TYPE = new MediaType("text", "csv", Charset.forName("UTF-8"));
   public CsvMessageConverter() {
       super(MEDIA_TYPE);
   }

   protected boolean supports(Class<?> clazz) {
       return CsvResponse.class.equals(clazz);
   }

   protected void writeInternal(CsvResponse response, HttpOutputMessage output) throws Exception {
       output.getHeaders().setContentType(MEDIA_TYPE);
       output.getHeaders().set("Content-Disposition", "attachment; filename=\"" + response.getFilename() + "\"");
       OutputStream out = output.getBody();

       CsvWriter writer = new CsvWriter(new OutputStreamWriter(out), '\u0009');
       List<YourPojo> allRecords = response.getRecords();
       for (int i = 1; i < allRecords.size(); i++) {
            YourPojo aReq = allRecords.get(i);
            writer.write(aReq.toString());
       }
       writer.close();
   }
}
公共类CsvMessageConverter扩展了AbstractHttpMessageConverter{
public static final MediaType MEDIA_TYPE=新的MediaType(“text”、“csv”、Charset.forName(“UTF-8”);
公共CsvMessageConverter(){
超级(媒体型);
}
受保护的布尔支持(类clazz){
返回CsvResponse.class.equals(clazz);
}
受保护的void writeInternal(CsvResponse响应,HttpOutputMessage输出)引发异常{
output.getHeaders().setContentType(媒体类型);
output.getHeaders().set(“内容处置”,“附件;文件名=\”+响应.getFilename()+”\”);
OutputStream out=output.getBody();
CsvWriter writer=新的CsvWriter(新的OutputStreamWriter(输出),'\u0009');
List allRecords=response.getRecords();
for(int i=1;i
将此消息转换器添加到应用程序上下文配置文件

<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <bean class="com.yourpackage.CsvMessageConverter"/>
    </mvc:message-converters>
</mvc:annotation-driven>

最后,控制器看起来像

@RequestMapping(value = "/csvData", method = RequestMethod.GET, produces="text/csv")
@ResponseBody
public CsvResponse getFullData(HttpSession session) throws IOException {
      // get data
      List<YourPojo> allRecords = yourService.getData();

      return new CsvResponse(allRecords, "yourData.csv");
}
@RequestMapping(value=“/csvData”,method=RequestMethod.GET,products=“text/csv”)
@应答器
公共CsvResponse getFullData(HttpSession会话)引发IOException{
//获取数据
List allRecords=yourService.getData();
返回新的CSVRResponse(所有记录,“yourData.csv”);
}
我发现了一种使用JAX-RS的类似方法


但底线是,如果您想以适当的方式将数据输入到输出流中,您必须使用REST机制,但如果您的唯一目标是将数据输入到文件中,那么您只需将数据输入列表,然后将其写入文件即可。

谢谢。我正在使用struts2,我是通过FileWriter完成的。我将查询结果集存储到列表中(转换为MyPojo),并使用for循环将数据写入到以逗号分隔的文件中。