DAY8-照猫画虎一万行

上传数据文件,解析入库,分页展示。
0.pom中引入分页插件依赖:

<!--分页插件 pagehelper -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<!-- 特别注意版本问题 -->
			<version>1.2.3</version>
		</dependency>

0.1 application-dev.yml文件下新增如下配置:

#分页pageHelper
pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true

1.创建表ofs_employee:

DROP TABLE IF EXISTS `ofs_employee`;
CREATE TABLE `ofs_employee` (
  `e_id` int(20) NOT NULL AUTO_INCREMENT,
  `e_name` varchar(50) NOT NULL,
  `e_age` int(20) NOT NULL,
  PRIMARY KEY (`e_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10001 DEFAULT CHARSET=utf8;

2.在resources/mapping下创建EmployeeMapping.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="org.huchao.ofs.mapper.EmployeeMapper">

    <resultMap id="BaseResultMap" type="org.huchao.ofs.entity.Employee">
        <result column="e_id" jdbcType="INTEGER" property="id" />
        <result column="e_name" jdbcType="VARCHAR" property="name" />
        <result column="e_age" jdbcType="INTEGER" property="age" />
    </resultMap>

    <insert id="insertBatch" parameterType="java.util.List">
        insert into ofs_employee (e_id,e_name,e_age)
        values
        <foreach collection="list" item="item" index="index"  separator=",">
            (#{item.id,jdbcType=INTEGER}, #{item.name,jdbcType=VARCHAR}, #{item.age,jdbcType=VARCHAR})
        </foreach>
    </insert>
    <select id="getEmployeesInfo" resultMap="BaseResultMap">
        select e_id,e_name,e_age from ofs_employee
    </select>

</mapper>

3.mapper下创建EmployeeMapper接口:

package org.huchao.ofs.mapper;

import org.huchao.ofs.entity.Employee;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface EmployeeMapper {

    void insertBatch(List<Employee> employees);

    List<Employee> getEmployeesInfo();
}

4.创建实体类entity(Employee);
并生成get,set.toString和构造方法。windows生成代码快捷键alt+insert。

public class Employee {
    Integer id;
    String name;
    Integer age;
    }

5.创建controller(EmployeeController):
controller注入EmployeeService:

@Autowired
    private EmployeeService employeeService;

controller中创建三个方法:
a.index()方法,用于跳转至employee.jsp页面:

@RequestMapping("index")
    public String index() {
        return "employee";
    }

b.uploadFile()方法:
处理上传的txt文件并调用service的方法解析txt文件。

@RequestMapping(value = "uploadFile", method = RequestMethod.POST)
    @ResponseBody
    public String uploadFile(@RequestParam("uploadFile") MultipartFile uploadFile, HttpServletRequest req) {
        if (uploadFile.isEmpty()) {
            return "文件不存在";
        }
        File files = null;
        try {
            byte[] bytes = uploadFile.getBytes();
            //创建文件存放位置的路径,路径可以自定义
            String path = req.getServletContext().getRealPath("/file");
           //根据创建的路径,生成存放的文件。
            File filePath = new File(path);
            //此文件夹会生成与src/main/webapp中。
            filePath.mkdirs();
            //生成存放的文件夹之后,再创建上传的文件的名字。名字可以自定义。getOriginalFilename()得到文
            // 件上传的原始名字。UUID.randomUUID()生成一个随机的ID。
            String filena = uploadFile.getOriginalFilename();
            String filename = UUID.randomUUID().toString() + filena;
            //生成最后一级的文件
            files = new File(filePath + "/" + filename);
            //写入指定文件夹
            OutputStream out = new FileOutputStream(files);
            out.write(bytes);
            logger.debug("文件上传成功,路径:"+files.getAbsolutePath());
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // service处理文件解析和导入数据库工作
        long l = System.currentTimeMillis();
        employeeService.batchAddEmployee(files.getAbsolutePath());
        logger.info("单线程处理耗费时间:"+(System.currentTimeMillis()-l)+"毫秒");
        return "success";
    }

c.getEmployee()方法,分页查询数据:

   @RequestMapping(value = "getEmployee")
    public ModelAndView getEmployee(@RequestParam(value = "pageNum" ,defaultValue = "1") int pageNum){
        ModelAndView mav = new ModelAndView("employee");
        PageInfo<Employee> employeesInfo = employeeService.getEmployeesInfo(pageNum, 5);
        mav.addObject("PageInfo",employeesInfo);
        return mav;
    }

6.创建service:
6.1 在service中注入EmployeeMapper:

@Autowired
    private EmployeeMapper employeeMapper;

6.2 创建txt文件解析的方法praserTXT():

private static void praserTXT(String fileName, List<Employee> employees){
        // 读取文件
        BufferedReader br = null;
        try {
            // 这里可以控制编码
            br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "UTF-8"));
            String line = null;
            while ((line = br.readLine()) != null) {
                StringBuffer sb = new StringBuffer();
                sb.append(line);
                Employee employee = strToBean(sb.toString());
                employees.add(employee);
                System.out.println(employee.toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                br.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

6.3 创建将字符串转换为bean的方法strToBean():

/**
     * 字符串转Employee对象
     * @param str
     * @return
     */
    private static Employee strToBean(String str){
        String[] split = str.split("\\|");
       return new Employee(Integer.parseInt(split[0]), split[1], Integer.parseInt(split[2]));
    }

6.4 创建batchAddEmployee()方法调用praserTXT()解析文件,并将数据入库:

 public void batchAddEmployee(String fileName){
        ArrayList<Employee> employees = new ArrayList<>();
        praserTXT(fileName,employees);
        employeeMapper.insertBatch(employees);
    }

6.5 调用PageHelper插件实现分页查询数据:

 public PageInfo<Employee> getEmployeesInfo(int pageNum,int pageSize){
        PageHelper.startPage(pageNum, pageSize);// limit pageNum pageSize
        List<Employee> employeesInfo = employeeMapper.getEmployeesInfo();
        PageInfo<Employee> employeePageInfo = new PageInfo<>(employeesInfo);
        return employeePageInfo;
    }

7.在webapp/WEB-INF/jsp下新建employee.jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<head>
    <title>文件处理</title>
    <script type="text/javascript" src="/js/jquery.min.js"></script>
    <script type="text/javascript">
        function doUpload() {
            var upl = document.getElementById("upload");
            upl.submit();
        }

        function doDownload() {
            var upl = document.getElementById("download");
            upl.submit();
        }
    </script>
</head>
<body>

<form id="upload" enctype="multipart/form-data" method="post" action="/employee/uploadFile">
    <input id = "uploadFile" type="file" name="uploadFile"/>
    <input type="button" value="文件上传" onclick="doUpload()"/>
</form>

<div>
    <a href="/employee/getEmployee?pageNum=1">员工列表</a>
</div>

<table border="1px">
    <tr>
        <td>编号</td>
        <td>姓名</td>
        <td>年龄</td>
        <td>操作</td>
    </tr>
    <c:forEach items="${PageInfo.list}" var="list">
        <tr>
            <td>${list.id}</td>
            <td>${list.name}</td>
            <td>${list.age}</td>
            <td>
                <a  onclick="">删除</a> &nbsp;|&nbsp;
                <a  onclick="">修改</a>
            </td>
        </tr>
    </c:forEach>
</table>
<div>
    当前第${PageInfo.pageNum}页,总共${PageInfo.pages}页,总共${PageInfo.total}条记录
</div>
<div>
    <a href="/employee/getEmployee?pageNum=1">首页</a>
    <c:if test="${PageInfo.pageNum != 1 }">
        <a href="/employee/getEmployee?pageNum=${PageInfo.pageNum-1}">上一页</a>
    </c:if>
    <c:if test="${PageInfo.pageNum != PageInfo.pages }">
        <a href="/employee/getEmployee?pageNum=${PageInfo.pageNum+1}">下一页</a>
    </c:if>
    <a href="/employee/getEmployee?pageNum=${PageInfo.pages}">尾页</a>
</div>
</body>
</html>

启动程序,在浏览器中输入:
http://localhost:8080/employee/index
进入employee页面。
在这里插入图片描述
点击选择文件,选择employee.txt文件并上传:
在这里插入图片描述
访问http://localhost:8080/employee/index回到employee页面,点击员工列表链接查询员工列表:
在这里插入图片描述
分页插件PageHelper官方文档https://pagehelper.github.io/docs/howtouse/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pandamig

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值