1. 程式人生 > >springboot + mybatis + poi實現報表匯出

springboot + mybatis + poi實現報表匯出

話不多說,直接上程式碼

資料庫表如下

程式碼結構如下

controller

package com.yuanyuan.smp.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.yuanyuan.smp.entity.User;
import com.yuanyuan.smp.service.IUserService;
import com.yuanyuan.smp.utils.FileUtil;

@RestController
public class UserController {
	
	@Autowired
	private IUserService userService;
	
	@RequestMapping("/")
	public String hello() {
		return "hello";
	}
	
	@RequestMapping("/exportExcel")
	public void exportExcel(HttpServletRequest request, HttpServletResponse response) {
		List<User> userList = userService.selectAll();
		// 建立工作簿
		HSSFWorkbook workbook = new HSSFWorkbook();
		// 建立表
		HSSFSheet sheet = workbook.createSheet("使用者資訊");
		// 建立行
		HSSFRow row = sheet.createRow(0);
		// 建立單元格樣式
		HSSFCellStyle cellStyle = workbook.createCellStyle();
		// 表頭
		String[] head = {"姓名", "年齡"};
		HSSFCell cell;
		// 設定表頭
		for(int iHead=0; iHead<head.length; iHead++) {
	    	cell = row.createCell(iHead);
	    	cell.setCellValue(head[iHead]);
	    	cell.setCellStyle(cellStyle);
	    }
		 // 設定表格內容
	    for(int iBody=0; iBody<userList.size(); iBody++) {
	    	row = sheet.createRow(iBody+1);
	    	User u = userList.get(iBody);
	    	String[] userArray = new String[2];
	    	userArray[0]=u.getName();
	    	userArray[1]=u.getAge() + "";
	    	for(int iArray=0; iArray<userArray.length; iArray++) {
	    		row.createCell(iArray).setCellValue(userArray[iArray]);
	        } 	
	    }
	    // 生成Excel檔案
	    FileUtil.createFile(response, workbook); 
	}
	
}

實體類

package com.yuanyuan.smp.entity;

import java.io.Serializable;

public class User implements Serializable{
    /**
	 * 
	 */
	private static final long serialVersionUID = 2895782870082326368L;

	private Integer userId;

    private String name;
    
    private Integer age;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}
    
}

mapper

package com.yuanyuan.smp.mapper;

import java.util.List;

import com.yuanyuan.smp.entity.User;

public interface UserMapper {

    List<User> selectAll();

}

mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yuanyuan.smp.mapper.UserMapper" >
  <resultMap id="BaseResultMap" type="com.yuanyuan.smp.entity.User" >
    <id column="user_id" property="userId" jdbcType="INTEGER" />
    <result column="name" property="name" jdbcType="VARCHAR" />
    <result column="age" property="age" jdbcType="INTEGER" />
  </resultMap>
  <sql id="Base_Column_List" >
    user_id, name, age
  </sql>
  <select id="selectAll" resultMap="BaseResultMap" >
    select 
    <include refid="Base_Column_List" />
    from user
  </select>
</mapper>

Service

package com.yuanyuan.smp.service;

import java.util.List;

import com.yuanyuan.smp.entity.User;

public interface IUserService {
	
	List<User> selectAll();

}
package com.yuanyuan.smp.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.yuanyuan.smp.entity.User;
import com.yuanyuan.smp.mapper.UserMapper;

@Service
public class UserService implements IUserService {
	
	@Autowired
	private UserMapper userMapper;

	@Override
	public List<User> selectAll() {
		return userMapper.selectAll();
	}

}

utils

package com.yuanyuan.smp.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class FileUtil {
	public static void createFile(HttpServletResponse response, HSSFWorkbook workbook) {
		// 設定檔名
	    String fileName ="使用者資訊";
	    try {
	    	// 捕獲記憶體緩衝區的資料,轉換成位元組陣列
	    	ByteArrayOutputStream out = new ByteArrayOutputStream();
	    	workbook.write(out);
	    	// 獲取記憶體緩衝中的資料
	    	byte[] content = out.toByteArray();
	    	// 將位元組陣列轉化為輸入流
	    	InputStream in = new ByteArrayInputStream(content);
	    	//通過呼叫reset()方法可以重新定位。         	
	    	response.reset();
	        // 如果檔名是英文名不需要加編碼格式,如果是中文名需要新增"iso-8859-1"防止亂碼
	        response.setHeader("Content-Disposition", "attachment; filename=" + new String((fileName + ".xls").getBytes(), "iso-8859-1"));
	        response.addHeader("Content-Length", "" + content.length);
	        response.setContentType("application/vnd.ms-excel;charset=UTF-8");       	
	        ServletOutputStream outputStream = response.getOutputStream();
	        BufferedInputStream bis = new BufferedInputStream(in);
	        BufferedOutputStream bos = new BufferedOutputStream(outputStream);    
	        byte[] buff = new byte[8192];
	        int bytesRead;
	        while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
	            bos.write(buff, 0, bytesRead);
	        }
	        bis.close();
	        bos.close();
	        outputStream.flush();
	        outputStream.close();
	    } catch (IOException e) {
	    	e.printStackTrace();
	    }
	}

}

啟動類

package com.yuanyuan.smp;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan(basePackages= {"com.yuanyuan.smp.mapper"})
public class SmpApplication {
	
	public static void main(String[] args) {
		SpringApplication.run(SmpApplication.class, args);
	}

}

application.yml

server:
    port: 8088
    context-path: /
    tomcat:
        uri-encoding: UTF-8
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8&allowMultiQueries=true
        username: root
        password: root
mybatis:
    mapper-locations: com.yuanyuan.smp.mapper/*.xml

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.yuanyuan.smp</groupId>
  <artifactId>springboot-mybaits-poi</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
    <relativePath/>
  </parent>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
  </properties>
  
  <dependencies>
        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
        <!-- spring boot jdbc -->
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- spring boot web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.29</version>
        </dependency>
        <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.32</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.15</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
               <artifactId>poi-ooxml</artifactId>
               <version>3.15</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

相關推薦

springboot + mybatis + poi實現報表匯出

話不多說,直接上程式碼 資料庫表如下 程式碼結構如下 controller package com.yuanyuan.smp.controller; import java.util.List; import javax.servlet.http.Ht

springboot使用poi進行報表匯出小demo

1.新增依賴 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifac

Springboot/SpringMVC+POI 實現Excel匯出功能(點選下載方式實現

@RequestMapping("/download") public void downstudents(HttpServletRequest request, HttpServletResponse response,@RequestParam String startTime, @Reques

SpringBoot整合POI實現檔案匯出Excel,匯入Excel更新Mysql資料庫資料

        上傳功能 轉載自https://blog.csdn.net/xyy1028/article/details/79054749原創寫的非常好,但是每個人都有自己的業務邏輯;所以在研究了一點之後,打上註釋,方便新手理解,同時也方便自己記憶;專案目錄applicat

Springboot+mybatis+poi輸出報表

在Springboot專案中,結合mybatis訪問資料庫,使用poi將需要的資料整理成報表資料輸出。 一、引入pom檔案依賴 <parent> <groupId>org.springframework.boot</group

SpringBoot整合poi實現Excel的 匯入/匯出

新增依賴 <!-- excel匯出工具 --> <dependency> <groupId>org.apache.poi</groupId>

SpringBoot+Mybatis+redis實現二級緩存

gap nal configure argument prope gets ssp tro 1.2 對於查詢比較多的項目可以考慮配置二級緩存,mybatis本身的二級緩存是緩存到本地,但是對於多個節點的項目來說,可能會出現數據不一致的問題,所以采用redis緩存,這樣二級緩

SpringBoot+MyBatis+Redis實現SSO單點登入系統(二)

SpringBoot+MyBatis+Redis實現SSO單點登入系統(二)   三、程式碼 配置檔案配置資料庫,redis等相關的資訊。 # See http://docs.spring.io/spring-boot/docs/current/reference/html

SpringBoot+MyBatis+Redis實現SSO單點登入系統(一)

SpringBoot+MyBatis+Redis實現SSO單點登入系統(一)   一、SSO系統概述        SSO英文全稱Single Sign On,單點登入。SSO是在多個應用系統中,使用者只需要

springboot+mybatis實現以及 Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required問題的解決

廢話不多說,直接上步驟 前期準備 建表: CREATE TABLE book(id int primary key auto_increment ,bookId bigint,bookName varchar(200)) 插入資料: insert into book

Springboot+mybatis+MySQL實現簡單的多表查詢

Springboot+mybatis+MySQL實現簡單的多表查詢 直接進入正題 1.首先我們新建一個數據庫,再建兩個表 tbl_employee表建表SQL語句 CREATE TABLE `tbl_employee` ( `id` int(200) NOT NULL AUT

微信小程式+SpringBoot+mybatis+MySQL實現簡單的登入

微信小程式+SpringBoot+mybatis+MySQL實現簡單的登入 當下微信小程式和springboot都是比較火的。今天我們來用springboot和微信小程式來實現簡單的登入。 1.首先來完成微信小程式端,新建一個微信小程式。 如果不會的可以檢視我的上一篇文章開發微信小程式簡

使用 freemark 實現 報表匯出

使用 freemark 實現 報表匯出 使用 freemark 實現 報表匯出 1 準備 excel 模板 2 Controller 寫法 3 相關工具類 3.0

Java使用Apache的poi實現Excel匯出(日常總結)

一.導包org.apache.poi <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version&

springboot+mybatis+druid實現多資料來源配置,支援註解和xml兩種sql書寫方式

https://github.com/cheegoday/springboot-demo-djg 要點: 一、依次建立以下幾個Bean 資料來源:DataSource session工廠:SqlSessionFactory 執行緒安全session:Sql

(六)springboot + mybatis plus實現多表聯查分頁3.X版本

註明 : 上兩篇文章我們講解了springboot+mybatis-plus對於單表的CRUD和條件構造器的使用方法,但是對於我們的實戰專案中多表聯查也是經常會出現的。今天我們就來說下怎麼在springboot+MP模式下實現多表聯查並分頁。 MP推薦使用的是

springboot+mybatis+springmvc實現資料庫增加資料,除錯時service實現類中mapper物件為空

問題:service實現類裡面執行到Mapper.save(Entity)時,捕捉到空指標異常 通過除錯,發現Mapper為空 解決途徑: 在瀏覽多個回答後,在論壇裡面看到有人回答說,controller層的方法中new 了*ServiceImpl()導致,如下圖 解決方法:註釋掉該條

SpringBoot+mybatis+pagehelper實現分頁:resultType="map"

1)       在pom.xml中新增pagehelper相關依賴:pagehelper使用第一步2)       application.properties配置檔案:第10行可去掉3)      

Java利用POI實現匯入匯出Excel表格示例程式碼

介紹Jakarta POI 是一套用於訪問微軟格式文件的Java API。Jakarta POI有很多元件組成,其中有用於操作Excel格式檔案的HSSF和用於操作Word的HWPF,在各種元件中目前只有用於操作Excel的HSSF相對成熟。官方主頁http://poi.ap

JAVA 使用 POI實現資料匯出到Excel

前言:    人生中第一次釋出部落格,怎麼說還是有點緊張的。希望各位看官多多支援~~~!引入:    就在上個禮拜,專案中有一個需求就是把一些資料匯出到Excel中,並且要求Excel要按照規定的內容和排版顯示匯出來的資料。    當時看到這個需求內心還是有點小壓力的,畢竟剛