Jfinal 整合easypoi 对数据库数据通过excel 上传下载
2017-12-26 17:41
519 查看
之前的一个项目需要对数据库中的数据进行excel 上传下载。意思是 将数据库中的数据下载到本地excel 文件。然后上传是将本地的excel 文件 中的和数据库有关的数据进行上传到数据库中。在做项目的时候没有接触到easypoi 就是Jfinal 也是刚接触到。所以项目组让我实现这个功能我也是查了很多资料,不过不是很尽人意。下面我将详细的将之前写的一个demo 分享。喜欢就赞,不喜勿喷。
链接:easypoi 官方教程:easypoi
其实我是感觉在做项目的时候看的很乱,不是那么的明晰,或许是因为我的理解能力有限。
就我理解,不管是上传或者是下载原理是一样,easypoi 为啥叫easypoi,其实easy 在于它已经给我封装了两个工具类ExcelExportUtil和ExcelImportUtil 其中的方法就是下载和上传的固定方法。只要你按照它定义的方式就可以了。定义的方式包括(一个 模块,就是你数据的定义格式,或许不理解看下面),按照你的格式,会下载 对应的excel 文件。当然在你上传的时候excel 也需要定义成你自己定义的格式。
废话不说了。
(1)创建一个maven项目,将依赖加入。(这里我直接把我的pom.xml 文件全部粘上来)
/**
* 常量配置
*/
@Override
public void configConstant(Constants constants) {
loadPropertyFile("config.properties");
constants.setViewType(ViewType.FREE_MARKER);
constants.setDevMode(true);//设置开发模式 可以进行将输出框 是否输出日志
constants.setBaseDownloadPath("down");
/* constants.setBaseDownloadPath("");//设置文件下载的默认文件路径
constants.setBaseUploadPath("");//设置文化上传的默认文件路径
constants.setBaseViewPath("");//设置路由视图的默认路径
constants.setEncoding("utf-8");//设置默认 编码格式
constants.setError404View("");//设置 404 错误的默认路径
constants.setError401View("");//设置401 错误的默认路径
constants.setFreeMarkerTemplateUpdateDelay(0);//设置freemarker 的默认更新时间
constants.setFreeMarkerViewExtension("");//设置freemark 的·默认后缀,默认为.html
constants.setMaxPostSize(1024*1024*10);//设置最大的post 请求,一般限制文件的上传
constants.setTokenCache(null);//可用于防止二次提交*/
}
/**
*
*/
@Override
public void configHandler(Handlers arg0) {
// TODO Auto-generated method stub
}
@Override
public void configInterceptor(Interceptors arg0) {
// TODO Auto-generated method stub
}
/**
* 路由配置
*/
@Override
public void configRoute(Routes routes) {
routes.add(new FrontRout());
//然后就可以通过 /hello/ helloController中的方法名进行访问,但是helloController中
//必须有index 方法,如果访问不存在的方法名的时候 会默认访问index
routes.add("test",TestController.class,"/");// 第三个参数 进行指明了 view 模板渲染的路径,如果controller 中函数 访问
//视图的话,没有加路径就只是加了个文件的名称那么 可能·就无法进行访问
}
@Override
public void configPlugin(Plugins arg0) {
C3p0Plugin c3p0=new C3p0Plugin(getProperty("jdbcUrl"),
getProperty("user"),
getProperty("password"));
arg0.add(c3p0);
ActiveRecordPlugin activeRecord=new ActiveRecordPlugin(c3p0);
activeRecord.addMapping("users",Users.class).setShowSql(Boolean.parseBoolean(getProperty("showSql")));
// activeRecord.addMapping("student",Student.class).setShowSql(Boolean.parseBoolean(getProperty("showSql")));
arg0.add(activeRecord);
}
public static void main(String[] args) {
JFinal.start("src/main/webapp", 8080, "/", 5);
}定义路由:
public class FrontRout extends Routes{
@Override
public void config() {
add("/hello",HelloController.class);
}
定义数据映射
至此环境搭好了
然后定义模板
public class User {
@Excel(name = "userName", needMerge = true)
private String userName;
@Excel(name = "password", needMerge = true)
private String password;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}这里的userName 和password 是你定义的样式,这样在下载的时候标题就是userName 和password ,当然为了方便 userName 可以是数据库中的字段这样在上传的时候方便
然后就是路由中的HelloController
package com.nyist;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.Workbook;
import com.jfinal.core.Controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
public class HelloController extends Controller{
public void index(){
//renderText("hello world");
render("/index.html");
}
public void getData(){
List<Users> users=Users.dao.find("select * from users");
setAttr("users", users);
renderJson();
}
//下载
public void downExcel() throws IOException{
System.out.println("----------------");
List<Users> users = Users.dao.find("select * from users");
List<User> lists = new ArrayList<User>();
User u ;
for (Users user : users) {
u = new User();
u.setUserName((String) user.get("userName"));
u.setPassword((String) user.get("password"));
//System.out.println(u);
lists.add(u);
}
ExportParams params = new ExportParams("信息表","2017-10-1");
params.setFreezeCol(2);
Workbook workbook = ExcelExportUtil.exportExcel(params, User.class, lists);
//下载为 什么文件,文件名和位置
FileOutputStream fos = new FileOutputStream("F:/2.xls");
workbook.write(fos);
fos.close();
redirect("/index.html");
}
//上传
public void upload() throws Exception{
ImportParams params = new ImportParams();
params.setTitleRows(1);
params.setHeadRows(1);
//上传的文件路径
InputStream inputStream = new FileInputStream("F:/2.xls");
List<User> lists = ExcelImportUtil.importExcel(inputStream, User.class, params);
Users users;
for (User user : lists) {
System.out.println(user.getUserName()+"========"+user.getPassword());
new Users().set("userName", user.getUserName()).set("password", user.getPassword()).save();
}
render("/index.html");
}
}
上面就是完整的下载和上传。
测试
链接:easypoi 官方教程:easypoi
其实我是感觉在做项目的时候看的很乱,不是那么的明晰,或许是因为我的理解能力有限。
就我理解,不管是上传或者是下载原理是一样,easypoi 为啥叫easypoi,其实easy 在于它已经给我封装了两个工具类ExcelExportUtil和ExcelImportUtil 其中的方法就是下载和上传的固定方法。只要你按照它定义的方式就可以了。定义的方式包括(一个 模块,就是你数据的定义格式,或许不理解看下面),按照你的格式,会下载 对应的excel 文件。当然在你上传的时候excel 也需要定义成你自己定义的格式。
废话不说了。
(1)创建一个maven项目,将依赖加入。(这里我直接把我的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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.nyist.down</groupId> <artifactId>downExcel</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>downExcel Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.jfinal/jfinal --> <dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>com.jfinal</groupId> <artifactId>jetty-server</artifactId> <version>8.1.8</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.7</version> </dependency> <!--FreeMarker--> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.20</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.36</version> <scope>runtime</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.1</version> </dependency> <!-- https://mvnrepository.com/artifact/com.mchange/mchange-commons-java --> <dependency> <groupId>com.mchange</groupId> <artifactId>mchange-commons-java</artifactId> <version>0.2.11</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-base</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-annotation</artifactId> <version>3.0.3</version> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi</artifactId> <version>3.0.3</version> <type>pom</type> </dependency> <dependency> <groupId>cn.afterturn</groupId> <artifactId>easypoi-web</artifactId> <version>3.0.3</version> </dependency> </dependencies> <build> <finalName>downExcel</finalName> <plugins> <plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.2.0.v20160908</version> <configuration> <stopKey>stop</stopKey> <stopPort>5599</stopPort> <webAppConfig> <contextPath>/</contextPath> </webAppConfig> <scanIntervalSeconds>5</scanIntervalSeconds> <connectors> <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"> <port>80</port> <maxIdleTime>60000</maxIdleTime> </connector> </connectors> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.4</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> </project>创建Jfinal 项目,需要在web.xml 中定义Jfinal的拦截器
<filter> <filter-name>jfinal</filter-name> <filter-class>com.jfinal.core.JFinalFilter</filter-class> <init-param> <param-name>configClass</param-name> <param-value>com.nyist.DemoConfig</param-value> </init-param> </filter> <filter-mapping> <filter-name>jfinal</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>在 上面拦截器中描述的DemoConfig定义启动和一些设置
/**
* 常量配置
*/
@Override
public void configConstant(Constants constants) {
loadPropertyFile("config.properties");
constants.setViewType(ViewType.FREE_MARKER);
constants.setDevMode(true);//设置开发模式 可以进行将输出框 是否输出日志
constants.setBaseDownloadPath("down");
/* constants.setBaseDownloadPath("");//设置文件下载的默认文件路径
constants.setBaseUploadPath("");//设置文化上传的默认文件路径
constants.setBaseViewPath("");//设置路由视图的默认路径
constants.setEncoding("utf-8");//设置默认 编码格式
constants.setError404View("");//设置 404 错误的默认路径
constants.setError401View("");//设置401 错误的默认路径
constants.setFreeMarkerTemplateUpdateDelay(0);//设置freemarker 的默认更新时间
constants.setFreeMarkerViewExtension("");//设置freemark 的·默认后缀,默认为.html
constants.setMaxPostSize(1024*1024*10);//设置最大的post 请求,一般限制文件的上传
constants.setTokenCache(null);//可用于防止二次提交*/
}
/**
*
*/
@Override
public void configHandler(Handlers arg0) {
// TODO Auto-generated method stub
}
@Override
public void configInterceptor(Interceptors arg0) {
// TODO Auto-generated method stub
}
/**
* 路由配置
*/
@Override
public void configRoute(Routes routes) {
routes.add(new FrontRout());
//然后就可以通过 /hello/ helloController中的方法名进行访问,但是helloController中
//必须有index 方法,如果访问不存在的方法名的时候 会默认访问index
routes.add("test",TestController.class,"/");// 第三个参数 进行指明了 view 模板渲染的路径,如果controller 中函数 访问
//视图的话,没有加路径就只是加了个文件的名称那么 可能·就无法进行访问
}
@Override
public void configPlugin(Plugins arg0) {
C3p0Plugin c3p0=new C3p0Plugin(getProperty("jdbcUrl"),
getProperty("user"),
getProperty("password"));
arg0.add(c3p0);
ActiveRecordPlugin activeRecord=new ActiveRecordPlugin(c3p0);
activeRecord.addMapping("users",Users.class).setShowSql(Boolean.parseBoolean(getProperty("showSql")));
// activeRecord.addMapping("student",Student.class).setShowSql(Boolean.parseBoolean(getProperty("showSql")));
arg0.add(activeRecord);
}
public static void main(String[] args) {
JFinal.start("src/main/webapp", 8080, "/", 5);
}定义路由:
public class FrontRout extends Routes{
@Override
public void config() {
add("/hello",HelloController.class);
}
}
定义数据映射
package com.nyist; import java.io.Serializable; import com.jfinal.plugin.activerecord.Model; public class Users extends Model<Users> implements Serializable{ public static final Users dao = new Users(); }
至此环境搭好了
然后定义模板
public class User {
@Excel(name = "userName", needMerge = true)
private String userName;
@Excel(name = "password", needMerge = true)
private String password;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}这里的userName 和password 是你定义的样式,这样在下载的时候标题就是userName 和password ,当然为了方便 userName 可以是数据库中的字段这样在上传的时候方便
然后就是路由中的HelloController
package com.nyist;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.Workbook;
import com.jfinal.core.Controller;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
public class HelloController extends Controller{
public void index(){
//renderText("hello world");
render("/index.html");
}
public void getData(){
List<Users> users=Users.dao.find("select * from users");
setAttr("users", users);
renderJson();
}
//下载
public void downExcel() throws IOException{
System.out.println("----------------");
List<Users> users = Users.dao.find("select * from users");
List<User> lists = new ArrayList<User>();
User u ;
for (Users user : users) {
u = new User();
u.setUserName((String) user.get("userName"));
u.setPassword((String) user.get("password"));
//System.out.println(u);
lists.add(u);
}
ExportParams params = new ExportParams("信息表","2017-10-1");
params.setFreezeCol(2);
Workbook workbook = ExcelExportUtil.exportExcel(params, User.class, lists);
//下载为 什么文件,文件名和位置
FileOutputStream fos = new FileOutputStream("F:/2.xls");
workbook.write(fos);
fos.close();
redirect("/index.html");
}
//上传
public void upload() throws Exception{
ImportParams params = new ImportParams();
params.setTitleRows(1);
params.setHeadRows(1);
//上传的文件路径
InputStream inputStream = new FileInputStream("F:/2.xls");
List<User> lists = ExcelImportUtil.importExcel(inputStream, User.class, params);
Users users;
for (User user : lists) {
System.out.println(user.getUserName()+"========"+user.getPassword());
new Users().set("userName", user.getUserName()).set("password", user.getPassword()).save();
}
render("/index.html");
}
}
上面就是完整的下载和上传。
测试
相关文章推荐
- 通过上传excel导入数据到数据库
- PHP处理excel文件 包括处理excel数据上传到数据库以及从数据库下载数据到excel
- input file 文件上传下载 查询数据库数据并导出Excel
- 将Excel上传到服务器,读取Excel数据写入到数据库
- LBS数据\百度地图纠偏数据库\基站定位软件 打包上传到博客园了,可以下载了
- c# 通过流导出数据库数据,写进excel中
- POI实现Excel文件上传下载,读/写数据库(poi)
- java实现数据库数据导出到Excel并下载查看
- java、Extjs导出数据库里的数据至Excel并下载至本地进行数据备份方法之一——使用servlet
- 通过Navicat将Excel表中的数据导入到数据库
- PHPExcel下载(从数据库获取数据)示例代码
- FileUpload上传Excel文件,Aspose导入数据至数据库(web)
- ASP.Net MVC中数据库数据导出Excel,供HTTP下载
- 文件的上传下载与删除JavaEE(不通过数据库)
- asp.net 通过 Handler 导出数据至excel (让用户下载)
- 上传Excel并将指定数据导入到数据库
- 文件上传下载——通过struts的FormFile上传单个excel文件
- 上传Excel数据到数据库中(Asp.net自动生成三层代码 第六集 )
- ASP.NET MVC实现Excel文件的上传下载以及Excel数据的保存
- 上传,解析Excel文件并保存数据到数据库