昨天下雨了
码龄7年
关注
提问 私信
  • 博客:93,842
    社区:341
    问答:37
    94,220
    总访问量
  • 19
    原创
  • 暂无
    排名
  • 11
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:上海市
  • 加入CSDN时间: 2017-07-08
博客简介:

China_110的博客

查看详细资料
个人成就
  • 获得26次点赞
  • 内容获得18次评论
  • 获得68次收藏
  • 代码片获得227次分享
创作历程
  • 1篇
    2023年
  • 8篇
    2020年
  • 6篇
    2019年
  • 1篇
    2018年
  • 4篇
    2017年
成就勋章
TA的专栏
  • 工具
    1篇
  • mybatis
    1篇
  • 注解
    1篇
  • 反射
    1篇
  • Mac
    1篇
  • redis
    1篇
  • 报表
    2篇
  • Java学习记录
    16篇
  • 缓存
    2篇
  • 定时刷新
    1篇
  • docker
    1篇
  • rabbitMq
    1篇
  • io
    1篇
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

344人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

免费AI编程工具- AWS CodeWhisperer安装(IDEA)

AWS CodeWhisperer的AI编程助手
原创
发布博客 2023.06.14 ·
2862 阅读 ·
2 点赞 ·
7 评论 ·
4 收藏

后端代码实现读取csv文件并存入数据库

答:

pom依赖

<dependency>

        <groupId>cn.hutool</groupId>

        <artifactId>hutool-all</artifactId>

        <version>5.4.4</version>

</dependency>

代码

package com.ruoyi.web.controller.xxxxx;

import cn.hutool.core.text.csv.CsvData;
import cn.hutool.core.text.csv.CsvReader;
import cn.hutool.core.text.csv.CsvRow;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.xxx.domain.*;
import com.ruoyi.xxx.service.*;
import com.ruoyi.common.core.domain.AjaxResult;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;

/**
 * CSV数据导入.
 *
 * @author China110
 * @version 2022/08/22
 */
@Slf4j
@RestController
@RequestMapping("/datainit")
public class DataInitController {

    public static final String[] searchList = {"\"", "\uFEFF"};
    public static final String[] replaceList = {"", ""};

    //初始化系统数据
    @Autowired
    private XxxService xxxService;
    @ApiOperation("导入xxx数据")
    @GetMapping("/xxx")
    public AjaxResult importXxx(String filePath) {
        if (StringUtils.isBlank(filePath)) {
            return AjaxResult.error("文件地址不能为空");
        }
        AtomicInteger add = new AtomicInteger();
        AtomicInteger update = new AtomicInteger();
        List<CsvRow> csvRows = this.readCsvFile(filePath);
        csvRows.forEach(row -> {
            List<String> rawList = row.getRawList();
            Room room = this.toRoom(rawList);
            if (roomService.getById(room.getId()) != null) {
                this.xxxService.updateById(room);
                update.addAndGet(1);
            } else {
                this.xxxService.save(room);
                add.addAndGet(1);
            }
        });
        log.info("新增xxx数据:{}", add.get());
        log.info("修改xxx数据:{}", update.get());
        return AjaxResult.success("数据处理完成");
    }
    /**
     * 读取 csv 文件
     */
    public static List<CsvRow> readCsvFile(String readCsvFilePath) {

        // 创建 CSV Reader 对象, 参数说明(读取的文件路径,分隔符,编码格式)
        CsvReader csvReader = new CsvReader(Paths.get(readCsvFilePath), StandardCharsets.UTF_8, null);
        // 读取除表头外的内容
        CsvData read = csvReader.read();
        return read.getRows();
    }

    public static Room toRoom(List<String> fields) {
        Xxx room = new Xxx();

        String idStr = StringUtils.replaceEach(stringValied(fields.get(0)), searchList, replaceList);
        String createDateStr = stringValied(fields.get(17));
        String creator = stringValied(fields.get(18));
        String updateDateStr = stringValied(fields.get(19));
        String updater = stringValied(fields.get(20));
        String deleteDateStr = stringValied(fields.get(21));
        String deleter = stringValied(fields.get(22));
        room.setId(Long.valueOf(idStr));
        room.setCreateDate(parseLocalDateTime(createDateStr, fmtHms));
        room.setCreator(creator);
        room.setUpdateDate(parseLocalDateTime(updateDateStr, fmtHms));
        room.setUpdater(updater);
        room.setDeleteDate(parseLocalDateTime(deleteDateStr, fmtHms));
        room.setDeleter(deleter);
        return room;
    }
    public static LocalDateTime parseLocalDateTime(String localDateTimeStr, DateTimeFormatter fmt) {
        if (StringUtils.isBlank(localDateTimeStr) || StringUtils.equalsAny(localDateTimeStr, "NULL", "null")) {
            return null;
        }
        LocalDateTime localDateTime = null;
        try {
            localDateTime = LocalDateTime.parse(localDateTimeStr, fmt);
        } catch (Exception e) {
            System.out.println(e.getLocalizedMessage());
        } finally {
            return localDateTime;
        }
    }
    public static String stringValied(String param) {
        if (StringUtils.isBlank(param) || StringUtils.equalsAny(param, "NULL", "null")) {
            return null;
        }
        return param;
    }
}
回答问题 2022.08.22

pageHelper分页查询pageNo大于最大页数及小于一返回数据

问题描述:在微服务里面做查询接口,用到pageHelper,数据库只有8行数据, 问题来了:pageNo=1&pageSize=10,返回的数据是那8条数据;pageNo=2&pageSize=10, pageNum=3&pageSize=10等…返回的数据都为空!!!原因:这是pageHelper里面自带的一个功能,叫做reasonable分页参数合理化,3.3.0以上版本可用,默认是false。启用合理化时,如果pageNum<1会查询第一页,如果pageNum&
原创
发布博客 2020.06.29 ·
3370 阅读 ·
4 点赞 ·
0 评论 ·
1 收藏

Mac连接远程服务器:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

问题描述:在第一次连接远程服务器正常的情况下,重装了远程服务器系统,再次连接失败并出现错误信息:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!解决方法执行命令vi /Users/xxxx/.ssh/known_hosts...
原创
发布博客 2020.03.28 ·
358 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

带你了解Java注解

概念Annotation(注解)是 Java 提供的一种对元程序中元素关联信息和元数据(metadata)的途径和方法。Annatation(注解)是一个接口,程序可以通过反射来获取指定程序中元素的 Annotation对象,然后通过该 Annotation 对象来获取注解中的元数据信息。4 种标准元注解元注解的作用是负责注解其他注解。 Java5.0 定义了 4 个标准的 meta-a...
原创
发布博客 2020.03.24 ·
225 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

浅谈Java反射

一、动态语言动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,就的函数可以被修改删除等结构上的变化。比如常见的javascript、python等属于动态语言,而c、c++不属于动态语言。从反射角度来说,Java属于半动态语言。二、反射机制概念(反射过程中知道类的所有属性和方法)在Java语言中反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法;对于任意一个...
原创
发布博客 2020.03.23 ·
229 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java线程简介

一、并发知识库二、Java线程实现及创建方式2.1继承Thread类Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法是通过Thread类的start()的实例方法。start()方法是一个native方法,他将启动一个新线程,并执行run()方法。public class MyThread extends Thread { publi...
原创
发布博客 2020.03.19 ·
212 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

JVM类加载机制

JVM类加载机制可以分为五个部分:加载、验证、准备、解析、初始化。1.1加载加载是加载过程中的一个阶段,这个阶段会在内存中产生一个代表这个类的java.lang.Class对象,作为方法区这个类各种数据的入口。(注意:这里不一定非要从一个Class文件中获取,也可以是ZIP文件如jar包、war包;也可以是动态加载如动态代理;也可以由其他文件生成如jsp生成对应的Class文件)1.2验证...
原创
发布博客 2020.03.16 ·
211 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

git pull需要密码(配置好git全局变量后)

1、进入到根目录执行命令:git config --global credential.helper store2、.gitconfig文件是否有user.name、user.email内容。没有需要配置全局用户信息(①git config --global user.name 'xxx’②git config --global user.email ‘xxx@xxx.xxx’)3、进入项...
原创
发布博客 2020.03.16 ·
358 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Mac升级系统后xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools)及No Xcode

升级Mac至最新系统使用git及npm均出现错误,错误如下:git相关命令错误:xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrunnpm相关命...
原创
发布博客 2020.03.09 ·
210 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Linux:redis连接命令

本地连接:redis-cli远程连接:redis-cli -h xx.xxx.xxx.xxx(ip) -p xxxx(端口)
原创
发布博客 2019.12.04 ·
1718 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

Jasperreports+jaspersoft studio(二):使用Parameters填充报表

1 设计报表模板1.1 设计报表在Studio中新建一个报表模板(testDemo02),删除不需要的Band,Column Header,ColumnFooter,Summary,Background,在outline界面中选中要删除Band右键-> delete,即可删除。1.2 创建参数在outline面板中找到Parameters,右键 -> Create Param...
原创
发布博客 2019.11.20 ·
1055 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Jasperreports+jaspersoft studio(一):简单示例

1.1前言 最近项目中有做报表的需求,在同事推荐下使用了JasperReport技术开发相应报表模块。借此机会,一边学习,一边记录。1.2下载jaspersoft studio编辑器到JasperReport官网下载 https://community.jaspersoft.com/community-download1.3示例(静态文本)1.3.1打开安装后的编辑器新建一个proj...
原创
发布博客 2019.11.20 ·
1734 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

dingtalk_2.1.0_amd64.deb

发布资源 2019.06.24 ·
deb

BIO/NIO/AIO

BIO/NIO/AIO几个概念阻塞IO 和非阻塞IO 这两个概念是程序级别的。主要描述的是程序请求操作系统IO操作后,如果IO资源没有准备好,那么程序该如何处理的问题:前者等待;后者继续执行(但是使用线程一直轮询,直到有IO资源准备好了)。同步IO 和 异步IO,这两个概念是操作系统级别的。主要描述的是操作系统在收到程序请求IO操作后,如果IO资源没有准备好,该如何响应程序的问题:前者不...
原创
发布博客 2019.04.02 ·
329 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

mongodb连接公告studio-3t-linux

发布资源 2019.03.19 ·
gz

robo3t-mongo连接工具Linux

发布资源 2019.03.19 ·
gz

RabbitMQ简单实现,exchange四种模式,持久化

RabbitMQ目录一、简介二、消息确认、持久化三、Exchange和队列绑定四、Routing五、Topics一、简介及简单实现RabbitMQ是一个消息代理:它接受并转发消息。你可以把它当成一个邮局:当你想邮寄信件的时候,你会把信件放在投递箱中,并确信邮递员最终会将信件送到收件人的手里。在这个例子中,RabbitMQ就相当与投递箱、邮局和邮递员。RabbitMQ与邮局的区别在...
原创
发布博客 2019.03.09 ·
3192 阅读 ·
1 点赞 ·
0 评论 ·
5 收藏

Guava cache本地缓存简介、刷新机制简单示例及封装

简介Guava Cache与ConcurrentMap很相似,但也不完全一样。最基本的区别是ConcurrentMap会一直保存所有添加的元素,直到显式地移除。相对地,Guava Cache为了限制内存占用,通常都设定为自动回收元素。在某些场景下,尽管LoadingCache 不回收元素,它也是很有用的,因为它会自动加载缓存。通常来说,Guava Cache适用于:你愿意消耗一些内存空...
原创
发布博客 2019.02.18 ·
5428 阅读 ·
5 点赞 ·
1 评论 ·
6 收藏

Docker:docker 拉取镜像及查看pull下来的image在哪里

一:拉取镜像1、国内连接docker官网很慢修改docker中配置,添加对应中国docker加速器。vi /etc/docker/daemon.json{ "registry-mirrors": ["https://registry.docker-cn.com"], "live-restore": true}2、运行以下命令(本处以hello-world为例),...
原创
发布博客 2018.11.24 ·
60532 阅读 ·
8 点赞 ·
7 评论 ·
44 收藏
加载更多