Java는 json 파일을 사용하여 데이터베이스 데이터를 가져오고 내보냅니다.
배경:
직장에서 한 환경의 일부 데이터를 다른 환경으로 빠르게 이동해야 하는 상황에 직면할 수 있습니다. 이때 json 파일을 가져오고 내보내면 됩니다.
(학습동영상 공유 : java 강좌)
예:
이 환경의 데이터베이스에 있는 사용자 정보를 json 형식의 파일로 내보낸 후, 해당 json 파일을 다른 환경으로 직접 복사하여 import합니다. 데이터베이스를 사용하면 우리의 목적을 달성할 수 있습니다.
아래에서는 springboot를 사용하여 사용자 데이터 정보 가져오기 및 내보내기 사례를 구축하고, 단일 사용자 및 다중 사용자 데이터베이스 정보 가져오기 및 내보내기 기능을 구현하겠습니다. 이 글을 주의 깊게 읽으면 json 파일 가져오기 및 내보내기의 핵심을 확실히 마스터할 수 있을 것입니다
준비 작업
필수 Maven 종속성 좌표:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.18</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.29</version> </dependency> <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency>
데이터베이스의 사용자 정보:
이 필드 정보는 다음과 관련됩니다. Java의 UserEntity 엔터티 클래스 일대일 대응
Function 구현
종속성 및 데이터베이스 정보를 준비한 후 사용자 가져오기 및 내보내기를 위한 특정 프레임워크 구축을 시작하세요.
단일 사용자 가져오기 및 내보내기 및 다중 사용자 기능을 구현하여 UserUtil
package com.leige.test.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import com.leige.test.entity.UserEntity; import com.leige.test.entity.UserEntityList; import com.leige.test.model.ResultModel; import com.leige.test.service.UserService; import org.apache.commons.io.FileUtils; import org.codehaus.jackson.map.ObjectMapper; import org.springframework.util.ObjectUtils; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; import java.util.List; import java.util.UUID; public class UserUtil { //导入用户 public static ResultModel importUser(MultipartFile multipartFile, UserService userService) { ResultModel resultModel = new ResultModel(); try { // 获取原始名字 String fileName = multipartFile.getOriginalFilename(); // 获取后缀名 String suffixName = fileName.substring(fileName.lastIndexOf(".")); //先将.json文件转为字符串类型 File file = new File("/"+ fileName); //将MultipartFile类型转换为File类型 FileUtils.copyInputStreamToFile(multipartFile.getInputStream(),file); String jsonString = FileUtils.readFileToString(file, "UTF-8"); //如果是json或者txt文件 if (".json".equals(suffixName) || ".txt".equals(suffixName)) { //再将json字符串转为实体类 JSONObject jsonObject = JSONObject.parseObject(jsonString); UserEntity userEntity = JSONObject.toJavaObject(jsonObject, UserEntity.class); userEntity.setId(null); userEntity.setToken(UUID.randomUUID().toString()); //调用创建用户的接口 userService.addUser(userEntity); } else { resultModel.setStatusCode(0); resultModel.setStatusMes("请上传正确格式的.json或.txt文件!"); } } catch (Exception e) { e.printStackTrace(); } return resultModel; } //批量导入用户 public static ResultModel importUsers(MultipartFile multipartFile, UserService userService) { ResultModel resultModel = new ResultModel(); try { // 获取原始名字 String fileName = multipartFile.getOriginalFilename(); // 获取后缀名 String suffixName = fileName.substring(fileName.lastIndexOf(".")); //先将.json文件转为字符串类型 File file = new File("/"+ fileName); //将MultipartFile类型转换为File类型 FileUtils.copyInputStreamToFile(multipartFile.getInputStream(),file); String jsonString = FileUtils.readFileToString(file, "UTF-8"); //如果是json或者txt文件 if (".json".equals(suffixName) || ".txt".equals(suffixName)) { //再将json字符串转为实体类 JSONObject jsonObject = JSONObject.parseObject(jsonString); UserEntityList userEntityList = JSONObject.toJavaObject(jsonObject, UserEntityList.class); List<UserEntity> userEntities = userEntityList.getUserEntities(); for (UserEntity userEntity : userEntities) { userEntity.setId(null); userEntity.setToken(UUID.randomUUID().toString()); //调用创建用户的接口 userService.addUser(userEntity); } } else { resultModel.setStatusCode(0); resultModel.setStatusMes("请上传正确格式的.json或.txt文件!"); } } catch (Exception e) { e.printStackTrace(); } return resultModel; } //导出某个用户 public static ResultModel exportUser(HttpServletResponse response, UserEntity userEntity, String fileName){ ResultModel resultModel = new ResultModel(); ObjectMapper objectMapper = new ObjectMapper(); if (ObjectUtils.isEmpty(userEntity)){ resultModel.setStatusCode(0); resultModel.setStatusMes("此用户id没有对应的用户"); return resultModel; }else { try { String jsonString = objectMapper.writeValueAsString(userEntity); // 拼接文件完整路径// 生成json格式文件 String fullPath = "/" + fileName; // 保证创建一个新文件 File file = new File(fullPath); if (!file.getParentFile().exists()) { // 如果父目录不存在,创建父目录 file.getParentFile().mkdirs(); } if (file.exists()) { // 如果已存在,删除旧文件 file.delete(); } file.createNewFile();//创建新文件 //将字符串格式化为json格式 jsonString = jsonFormat(jsonString); // 将格式化后的字符串写入文件 Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8"); write.write(jsonString); write.flush(); write.close(); FileInputStream fis = new FileInputStream(file); // 设置相关格式 response.setContentType("application/force-download"); // 设置下载后的文件名以及header response.setHeader("Content-Disposition", "attachment;filename=" .concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8")))); response.setCharacterEncoding("utf-8"); // 创建输出对象 OutputStream os = response.getOutputStream(); // 常规操作 byte[] buf = new byte[1024]; int len = 0; while((len = fis.read(buf)) != -1) { os.write(buf, 0, len); } fis.close(); os.close(); //一定要记得关闭输出流,不然会继续写入返回实体模型 return resultModel; } catch (Exception e) { resultModel.setStatusCode(0); resultModel.setStatusMes(e.getMessage()); e.printStackTrace(); return resultModel; } } } //导出所有用户 public static ResultModel exportAllUser(HttpServletResponse response, UserEntityList userEntityList, String fileName){ ResultModel resultModel = new ResultModel(); ObjectMapper objectMapper = new ObjectMapper(); if (ObjectUtils.isEmpty(userEntityList)){ resultModel.setStatusCode(0); resultModel.setStatusMes("此用户id没有对应的用户"); return resultModel; }else { try { String jsonString = objectMapper.writeValueAsString(userEntityList); // 拼接文件完整路径// 生成json格式文件 String fullPath = "/" + fileName; // 保证创建一个新文件 File file = new File(fullPath); if (!file.getParentFile().exists()) { // 如果父目录不存在,创建父目录 file.getParentFile().mkdirs(); } if (file.exists()) { // 如果已存在,删除旧文件 file.delete(); } file.createNewFile();//创建新文件 //将字符串格式化为json格式 jsonString = jsonFormat(jsonString); // 将格式化后的字符串写入文件 Writer write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8"); write.write(jsonString); write.flush(); write.close(); FileInputStream fis = new FileInputStream(file); // 设置相关格式 response.setContentType("application/force-download"); // 设置下载后的文件名以及header response.setHeader("Content-Disposition", "attachment;filename=" .concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8")))); response.setCharacterEncoding("utf-8"); // 创建输出对象 OutputStream os = response.getOutputStream(); // 常规操作 byte[] buf = new byte[1024]; int len = 0; while((len = fis.read(buf)) != -1) { os.write(buf, 0, len); } fis.close(); os.close(); //一定要记得关闭输出流,不然会继续写入返回实体模型 return resultModel; } catch (Exception e) { resultModel.setStatusCode(0); resultModel.setStatusMes(e.getMessage()); e.printStackTrace(); return resultModel; } } } //将字符串格式化为json格式的字符串 public static String jsonFormat(String jsonString) { JSONObject object= JSONObject.parseObject(jsonString); jsonString = JSON.toJSONString(object, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteDateUseDateFormat); return jsonString; } }
1. 프로젝트를 시작하고 브라우저에 접속하여 http://localhost:8888/export/users에 액세스하여 기존 사용자 json 파일을 모두 내보냅니다.
2. 파일 형식이 올바른지 확인하세요
3. 브라우저를 입력하여 http에 접속하세요: //localhost:8888/ 사용자 일괄 가져오기
users.json 파일 가져오기
주소를 입력하고 제출을 클릭하세요
데이터베이스를 확인하고 추가된 두 명의 테스트 사용자 1과 2가 성공한 것을 확인하세요!
여기에서는 단일 사용자의 가져오기 및 내보내기가 테스트되지 않으며 springboot 구성 파일에 대한 기타 정보 및 엔터티 클래스에 해당하는 데이터베이스 정보는 자세히 설명되지 않습니다.
관련 권장 사항: Java 시작하기
위 내용은 Java는 json 파일을 사용하여 데이터베이스 데이터를 가져오고 내보냅니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 난수 생성기 안내. 여기서는 예제를 통해 Java의 함수와 예제를 통해 두 가지 다른 생성기에 대해 설명합니다.

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

Java는 초보자와 숙련된 개발자 모두가 배울 수 있는 인기 있는 프로그래밍 언어입니다. 이 튜토리얼은 기본 개념부터 시작하여 고급 주제를 통해 진행됩니다. Java Development Kit를 설치한 후 간단한 "Hello, World!" 프로그램을 작성하여 프로그래밍을 연습할 수 있습니다. 코드를 이해한 후 명령 프롬프트를 사용하여 프로그램을 컴파일하고 실행하면 "Hello, World!"가 콘솔에 출력됩니다. Java를 배우면 프로그래밍 여정이 시작되고, 숙달이 깊어짐에 따라 더 복잡한 애플리케이션을 만들 수 있습니다.
