Java程序员的日常—— POI与JDBC、Mockmvc与单元测试

周日没怎么休息好,周一一天都迷迷糊糊的,不过还算是干了不少的活。

总结一下,大致有以下几点内容:

  • 1 使用poi以及mysql jdbc实现了一个复杂excel的导入
  • 2 基于工程原有的代码,书写spring mvc的业务代码以及测试用例

使用POI以及jdbc

POI是用于处理excel文件很常用的工具,如果你的excel是比较老的版本,记xls结尾的,那么只使用poi就行了。如果是xlsx结尾的,还需要引入xssf的jar包。

参考maven的pom.xml配置:

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.14</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>3.14</version>
    </dependency>

使用的话,这里就简单介绍下数据的读取:

InputStream stream = new FileInputStream("绝对路径\\文件名.xlsx");//获得输入流

XSSFWorkbook wb=new XSSFWorkbook(stream);//xlsx版本使用XSSFWorkbook

Sheet sheet1 = wb.getSheetAt(1);//获取制定的sheet页内容

for(int i=0,total = sheet1.getLastRowNum();i<total;i++){
    Row row = sheet1.getRow(i);//row.getCell(no)就能获取指定列的内容
}

JDBC动态参数

使用JDBC还是很基础的内容了,这里使用动态sql动态拼接条件:

sql = "select id from scp_b where name=? and code=?";

相应的查询:

PreparedStatement sta = conn.prepareStatement(sql);
sta.setString(1, "xxx";
sta.setString(2, "yyyy");
ResultSet rs = sta.executeQuery();
while(rs.next()){
    System.out.println(rs.getString("id"));
}
sta.close();

使用Mockmvc进行mvc的单元测试

以前没有web mvc的单元测试经验,所以这部分的内容还得继续学习下,才能总结好。

不过,有一点还是需要明确的,就是单元测试。
单元测试,是最基本的程序验证的方法。之前还流行过TDD测试驱动开发的软件方法论,即需要先写出测试用例,然后再去写实现。这样的好处就是在编写实现之前,就明确知道输入是什么,输出是什么...不过,真正做到这点的,全国也没有多少吧。大多是写完实现,开发者自己补上测试用例,用来验证一些简单的场景而已。

@WebAppConfiguration
public class aaaTest extends BaseTest {

    @Autowired
    private WebApplicationContext wac;

    private MockMvc mockMvc;

    @Before
    public void setup() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
    }

    @Test
    public void OrderTendencyDataProfilingChart() throws Exception{
        this.mockMvc.perform(post("/a/b")
                .accept(MediaType.APPLICATION_JSON)
                .characterEncoding("UTF-8")
                .param("1", "2")
                .header(ApiTokenUtils._tokenName, ApiTokenUtils.getToken()))
        .andExpect(status().isOk())
        .andDo(new ResultHandler() {
            @Override
            public void handle(MvcResult result) throws Exception {
                result.getResponse().setCharacterEncoding("UTF-8");
                String content = result.getResponse().getContentAsString();
                System.out.println(content);
            }
        });
    }
}

本文转自博客园xingoo的博客,原文链接:Java程序员的日常—— POI与JDBC、Mockmvc与单元测试,如需转载请自行联系原博主。

时间: 2024-10-25 17:44:26

Java程序员的日常—— POI与JDBC、Mockmvc与单元测试的相关文章

Java程序员的日常——SpringMVC+Mybatis开发流程、推荐系统

今天大部分时间都在写业务代码,然后算是从无到有的配置了下spring与mybatis的集成. SpringMVC+Mybatis Web开发流程 配置数据源 在applicationContext.xml中引入数据源的配置: <context:component-scan base-package="com.test" ></context:component-scan> <context:property-placeholder location=&qu

Java程序员的日常 —— static的用法讲解实践

之前文章说过Java中static的作用,有朋友想看个例子.于是便抽空写了个小栗子 代码 package xing.test.thinking.chap5; class A{ public A() { System.out.println("A constructor"); } } class VarTest{ static A a = new A(); public static int b = 0; public int c = 0; static{ System.out.prin

Java程序员的日常—— Spring Boot单元测试

关于Spring boot 之前没有用Spring的时候是用的MockMvc,做接口层的测试,原理上就是加载applicationContext.xml文件,然后模拟启动各种mybatis\连接池等等. 后来web工程改造成了Spring boot,首先发生变化的就是配置文件,原来的xml改成了proerties或者yml.另外,原来的http接口改成了dubbo,接口层的测试就更困难了. 所以单元测试改成了直接对service层的测试,即按照原来的模式,模拟启动applicationConte

Java程序员的日常——存储过程知识普及

存储过程是保存可以接受或返回用户提供参数的SQL语句集合.在日常的使用中,经常会遇到复杂的业务逻辑和对数据库的操作,使用存储过程可以进行封装.可以在数据库中定义子程序,然后把子程序存储在数据库服务器,之后通过名称调用. 特点 1 提高性能 存储过程是预先编译过,进行优化后,存储在SQL的内存中,使用的时候不需要重新编译,提高工作效率. 2 减少网络流量 存储过程的代码直接存储在数据库中,用户通过名称进行调用,减小网络流量,加快执行速度.如:百万以上的数据查询,存储过程分页要比其他方式的分页快得多

Java程序员的日常—— FileUtils工具类的使用

package cn.xingoo.learn.commons; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.DirectoryFileFilter; import org.apache.commons.io.filefilter.FileFileFilter; import org.apache.commons.io.filefilter.FileFilterUtils; imp

Java程序员的日常—— Arrays工具类的使用

这个类在日常的开发中,还是非常常用的.今天就总结一下Arrays工具类的常用方法.最常用的就是asList,sort,toStream,equals,copyOf了.另外可以深入学习下Arrays的排序算法,这个还是非常有用的. 所有的方法都是在下面的类中进行测试的: public class ArraysTest { String[] array = new String[]{"a","c","2","1","b&

Java程序员的日常 —— 多进程开发

最近再弄进程管理相关的工作,因此必要的就涉及到各种系统下关于进程的管理. 这里简单的介绍下: 如何在Java中执行命令 在windows下肯定是dos命令了,而在linux则为shell命令.执行的方式差不多相同: 方法1:Runtime windows版本: Process process = Runtime.getRuntime().exec("ipconfig /all"); Linux版本: Process process = Runtime.getRuntime().exec

Java程序员的日常—— 基于类的策略模式、List&lt;?&gt;与List、泛型编译警告、同比和环比

早晨起得太早,昨晚睡得太晚,一天都迷迷糊糊的.中午虽然睡了半个小时,可是依然没有缓过来.整个下午都在混沌中....不过今天下载了一款手游--<剑侠情缘>,感觉不错,喜欢这种类型的游戏. 今天主要的工作还是做业务需求,不过下午状态不好,看了下<Effective java>,正好重构了下代码. effective java 通过函数来作为策略 通过函数作为策略有两个要注意的地方: 使用接口作为策略传入 如果长期调用,应该设置为静态内部类,避免频繁创建过多的匿名对象 下面举个简单的例子

Java程序员的日常——经验贴(纯干货)

工作当中遇到的事情比较杂,因此涉及的知识点也很多.这里暂且记录一下,今天遇到的知识点,纯干货~ 关于文件的解压和压缩 如果你的系统不支持tar -z命令 如果是古老的Unix系统,可能并不认识tar -z命令,因此如果你想要压缩或者解压tar.gz的文件,就需要使用gzip或者gunzip以及tar命令了. 关于tar.gz可以这么理解,tar结尾的压缩包,其实只负责把文件打包,并没有进行压缩:而gz结尾的包,则是进行压缩操作. 因此,tar.gz的文件可以理解为,先进行打包,再进行压缩. 那么