闲来没事,想了一个应用的例子:用java如何把数据库的数据根据我们指定的某几列,如第2列,第4列,第6列导出来到Excel里

写代码也是为了应用的,写好的代码更重要的是在于思考。我自己思考了这个示例。

问题:指定列把数据库数据根据列导出到Excel里。

  那么要处理这个问题,它其实是很简单的,但是再简单的问题,也需要去拆分,思考,所谓,麻雀虽小,五脏俱全嘛。

拆分:1. Load DB data; 2. 把数据和指定列映射起来;3. 导出数据到Excel。

  本文把第一步操作省略了,第一步操作就是读取数据库的数据,然后把它映射到Entity上去,也就是下面代买的Student.java,我们假设这一步已经成功。

以下三个类重点实现第二步,第三步,只要把已经map好的数据,导出到Excel,可以利用apache poi,详见前一篇文章:java POI创建Excel示例(xslx和xsl区别 )

  第二步的实现我之前想着是直接把类的get方法用case的方式跟传进去的参数一一匹配,然后每次写数据的时候执行那个方法来获取当前要导出的列的数据。

如下:

1 public static Object getStudentInfo(Student student, int index) {
2     switch(index) {
3     case 1 :
4         return student.getName();
5     case 2 :
6         return student.getSex();
7     ...
8     }
9 }

可是这样看起来太傻逼了,于是接着想有没有比较合理的方式实现呢?

后来想到了用注解和java的反射机制来实现。

现在java注解用途越来越广泛了,如Google的Guice,一轻量级的IOC框架,大有跟Spring抗衡的趋势。

我就用注解来标注get方法获取的数据在数据库中对应列的索引,然后,根据传进去的列数组匹配get方法,再利用java的反射,执行方法体获取列的数据。具体代码如下。

MapValue是一个Annotation,里面只有一个index()方法,用来标注方法的索引。

 1 package com.cnblogs.rolf.dao;
 2 
 3 
 4 import java.lang.annotation.ElementType;
 5 import java.lang.annotation.Retention;
 6 import java.lang.annotation.RetentionPolicy;
 7 import java.lang.annotation.Target;
 8 /**
 9  * 放在方法上的注解,这个注解可以映射方法的索引
10  * @author 草原战狼
11  *
12  */
13 @Target(value = {ElementType.METHOD})
14 @Retention(RetentionPolicy.RUNTIME)
15 public @interface MapValue {
16     /**
17      * 标注方法的索引
18      * @return 方法索引值
19      */
20     int index() default 0;
21 }
View MapValue Code

相关文章:

  • 2022-01-05
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-30
  • 2021-11-04
  • 2022-01-02
猜你喜欢
  • 2021-07-29
  • 2022-03-04
  • 2021-05-15
  • 2022-12-23
  • 2021-09-25
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案