导入导出2.2

2.1
LiRen-qiu 3 months ago
parent 1e232a7236
commit 4389e51ac3

@ -2,6 +2,7 @@
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
<profile name="Annotation profile for springboot" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />

@ -1,3 +1,4 @@
{
"java.compile.nullAnalysis.mode": "automatic"
"java.compile.nullAnalysis.mode": "automatic",
"java.configuration.updateBuildConfiguration": "interactive"
}

@ -76,6 +76,23 @@
<version>2.3</version>
</dependency>
<!-- 引入hutool -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.18</version>
</dependency>
<!-- 引入poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<!-- 添加 freemarker 模板引擎依赖 -->
<dependency>
<groupId>org.freemarker</groupId>

@ -10,11 +10,22 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.springboot.service.IUserService;
import com.example.springboot.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.ServletOutputStream;
import java.net.URLEncoder;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelWriter;
import cn.hutool.poi.excel.ExcelUtil;
import org.springframework.beans.factory.annotation.Value;
import java.util.LinkedHashMap;
import java.time.LocalDateTime;
/**
* <p>
@ -32,6 +43,9 @@ public class UserController {
@Resource
private IUserService userService;
@Value("${files.upload.path}") // 从配置文件中读取上传路径
private String fileUploadPath;
// 新增或者更新
@PostMapping
public boolean save(@RequestBody User user) {
@ -79,6 +93,98 @@ public class UserController {
queryWrapper.orderByDesc("id");
return userService.page(new Page<>(pageNum, pageSize), queryWrapper);
}
//导入接口
@CrossOrigin // 添加跨域注解
@PostMapping("/import")
public boolean imp(@RequestParam("file") MultipartFile file) throws IOException {
if (file.isEmpty()) {
return false;
}
try {
InputStream inputStream = file.getInputStream();
ExcelReader reader = ExcelUtil.getReader(inputStream);
// 设置列名映射
reader.addHeaderAlias("用户名", "username");
reader.addHeaderAlias("密码", "password");
reader.addHeaderAlias("昵称", "nickname");
reader.addHeaderAlias("邮箱", "email");
reader.addHeaderAlias("电话", "phone");
reader.addHeaderAlias("地址", "address");
// 读取数据
List<User> list = reader.readAll(User.class);
// 设置创建时间
for (User user : list) {
user.setCreateTime(LocalDateTime.now());
}
// 保存到数据库
return userService.saveBatch(list);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
//导出接口
@GetMapping("/export")
public void export(HttpServletResponse response) throws IOException {
try {
// 查询所有数据
List<User> list = userService.list();
// 创建一个工作簿
ExcelWriter writer = ExcelUtil.getWriter(true);
// 清除默认标题别名
writer.clearHeaderAlias();
// 按照指定顺序设置标题别名
LinkedHashMap<String, String> headerAliasMap = new LinkedHashMap<>();
headerAliasMap.put("username", "用户名");
headerAliasMap.put("password", "密码");
headerAliasMap.put("nickname", "昵称");
headerAliasMap.put("email", "邮箱");
headerAliasMap.put("phone", "电话");
headerAliasMap.put("address", "地址");
// 设置标题别名
writer.setHeaderAlias(headerAliasMap);
// 只导出设置了别名的字段
writer.setOnlyAlias(true);
// 写入数据
writer.write(list, true);
// 设置响应头
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
String fileName = URLEncoder.encode("用户信息.xlsx", "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
// 输出
ServletOutputStream out = response.getOutputStream();
writer.flush(out, true);
// 关闭流
writer.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
response.reset();
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
response.getWriter().println("导出失败:" + e.getMessage());
}
}
}

@ -3,9 +3,12 @@ package com.example.springboot.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.FieldFill;
import java.io.Serializable;
import java.time.LocalDateTime;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* <p>
@ -15,6 +18,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
* @author hzk
* @since 2025-02-10
*/
@Data
@TableName("sys_user")
@Schema(description = "User对象")
public class User implements Serializable {
@ -26,26 +30,32 @@ public class User implements Serializable {
private Integer id;
@Schema(description = "用户名")
private String username;
private String username = "";
@Schema(description = "密码")
private String password;
private String password = "";
@Schema(description = "邮箱")
private String email;
private String email = "";
@Schema(description = "电话")
private String phone;
private String phone = "";
@Schema(description = "地址")
private String address;
private String address = "";
@Schema(description = "昵称")
private String nickname;
private String nickname = "";
@TableField(fill = FieldFill.INSERT)
@Schema(description = "创建时间")
private LocalDateTime createTime;
// 构造函数
public User() {
this.createTime = LocalDateTime.now();
}
public Integer getId() {
return id;
}

@ -9,6 +9,11 @@ spring:
jackson:
serialization:
fail-on-empty-beans: false
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
enabled: true
server:
port: 9090
@ -23,4 +28,9 @@ springdoc:
enabled: true
swagger-ui:
path: /swagger-ui.html
enabled: true
enabled: true
files:
upload:
path: D:/temp/ # Windows系统
# path: /tmp/ # Linux/Mac系统
Loading…
Cancel
Save