Xuất csv mongodb



     CodeJava
          Mã hóa niềm đam mê của bạn

      
  • Trang chủ >
  • Khung >
  • khởi động mùa xuân

Tìm hiểu khuôn khổ Spring.

  • Tìm hiểu mùa xuân trên YouTube

  • Hiểu cốt lõi của mùa xuân

  • Hiểu về MVC mùa xuân

  • Hiểu mùa xuân AOP

  • Hiểu JPA dữ liệu mùa xuân

  • Tiêm phụ thuộc vào mùa xuân (XML)

  • Spring Dependency Injection (Chú thích)

  • Tiêm phụ thuộc vào mùa xuân (cấu hình Java)

  • Hướng dẫn dành cho người mới bắt đầu Spring MVC

  • Xử lý ngoại lệ Spring MVC

  • Mùa xuân MVC và log4j

  • MVC mùa xuân Gửi email

  • Tải lên tệp MVC mùa xuân

  • Xử lý biểu mẫu MVC mùa xuân

  • Xác thực mẫu MVC mùa xuân

  • Tải xuống tệp MVC mùa xuân

  • Spring MVC JdbcTemplate

  • Chế độ xem Spring MVC CSV

  • Chế độ xem Spring MVC Excel

  • Chế độ xem Spring MVC PDF

  • Spring MVC XstlView

  • Spring MVC + Dữ liệu mùa xuân JPA + Hibernate - CRUD

  • Bảo mật MVC mùa xuân (XML)

  • Bảo mật MVC mùa xuân (cấu hình Java)

  • Tích hợp Spring & Hibernate (XML)

  • Tích hợp Spring & Hibernate (cấu hình Java)

  • Tích hợp Spring & Struts (XML)

  • Tích hợp Spring & Struts (cấu hình Java)

  • 14 mẹo viết Spring MVC Controller



Khởi động mùa xuân xuất dữ liệu sang ví dụ CSV

Chi tiết Viết bởi  Nam Hà MinhCập nhật lần cuối vào ngày 04 tháng 9 năm 2020. In  Email



Trong hướng dẫn này, tôi sẽ hướng dẫn bạn cách triển khai chức năng xuất CSV trong ứng dụng Spring Boot sử dụng Spring Data JPA và Hibernate cho lớp truy cập dữ liệu, Thymeleaf làm công cụ mẫu trong lớp xem và cơ sở dữ liệu MySQL. Chức năng xuất CSV cho phép người dùng tải xuống dữ liệu từ một bảng trong cơ sở dữ liệu sang tệp ở định dạng CSV (giá trị được phân tách bằng dấu phẩy). Các ví dụ mã bên dưới minh họa thông tin xuất về người dùng từ cơ sở dữ liệu sang tệp CSV.  

1. Mã cho các lớp thực thể và kho lưu trữ

Giả sử chúng ta có lớp thực thể Người dùng   như sau.
package net.codejava;

import java.util.*;
import javax.persistence.*;

@Entity
@Table(name = "users")
public class User {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	
	private String email;
	
	private String password;
	
	@Column(name = "full_name")
	private String fullName;
		
	private boolean enabled;
	
	@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.EAGER)
	@JoinTable(
			name = "users_roles",
			joinColumns = @JoinColumn(name = "user_id"),
			inverseJoinColumns = @JoinColumn(name = "role_id")
			)
	private Set roles = new HashSet<>();

	// constructors, getter and setters are not shown for brevity
}
Vai trò   lớp thực thể.
package net.codejava;

import javax.persistence.*;

@Entity
@Table(name = "roles")
public class Role {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	
	private String name;
	
	private String description;

	// constructors, getter and setters are not shown for brevity	
}
Vì vậy, các trường chúng tôi muốn đưa vào tệp CSV được tạo là. ID người dùng, E-mail, Tên đầy đủ, Vai trò và Đã bật. Và không có gì đặc biệt về các kho lưu trữ, như hình dưới đây.
package net.codejava;

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository {
	
}


public interface RoleRepository extends CrudRepository {
	
}
 

2. Khai báo phụ thuộc cho Thư viện CSV

Mặc dù CSV là định dạng tệp đơn giản (các giá trị được phân tách bằng dấu phẩy), nhưng vẫn tốt hơn nhiều nếu sử dụng thư viện CSV chuyên dụng. Trong hướng dẫn này, tôi đang sử dụng SuperCSV – thư viện CSV mã nguồn mở và miễn phí dành cho Java. Vì vậy, hãy khai báo phần phụ thuộc sau trong pom. tệp xml .

	net.sf.supercsv
	super-csv
	2.4.0
  

3. Mã cho lớp dịch vụ



Chúng tôi có lớp Dịch vụ người dùng   thực hiện listAll .
package net.codejava;

import java.util.List;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

@Service
@Transactional
public class UserServices {
	
	@Autowired
	private UserRepository repo;
	
	public List listAll() {
		return repo.findAll(Sort.by("email").ascending());
	}
	
}
Phương thức
method that retrieves all users from the database, as follows:
package net.codejava;

import java.util.List;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

@Service
@Transactional
public class UserServices {
	
	@Autowired
	private UserRepository repo;
	
	public List listAll() {
		return repo.findAll(Sort.by("email").ascending());
	}
	
}
The findAll() trong giao diện Kho lưu trữ người dùng được triển khai bởi Spring Data . Ở đây mình chỉ truyền một đối tượng JpaRepository). Here I just pass a Sort để sắp xếp danh sách kết quả theo email của người dùng, theo thứ tự tăng dần.

4. Xuất mã sang CSV trong Lớp trình điều khiển

Chúng tôi sẽ triển khai chức năng xuất CSV cho ứng dụng web Spring Boot hiện có, vì vậy chúng tôi viết mã cho phép người dùng tải xuống tệp CSV trong phương thức xử lý của lớp trình điều khiển, như minh họa bên dưới.
package net.codejava;

import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

import org.supercsv.io.CsvBeanWriter;
import org.supercsv.io.ICsvBeanWriter;
import org.supercsv.prefs.CsvPreference;

@Controller
public class UserController {

	@Autowired
	private UserServices service;
	
	
	@GetMapping("/users/export")
	public void exportToCSV(HttpServletResponse response) throws IOException {
		response.setContentType("text/csv");
		DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
		String currentDateTime = dateFormatter.format(new Date());
		
		String headerKey = "Content-Disposition";
		String headerValue = "attachment; filename=users_" + currentDateTime + ".csv";
		response.setHeader(headerKey, headerValue);
		
		List listUsers = service.listAll();

		ICsvBeanWriter csvWriter = new CsvBeanWriter(response.getWriter(), CsvPreference.STANDARD_PREFERENCE);
		String[] csvHeader = {"User ID", "E-mail", "Full Name", "Roles", "Enabled"};
		String[] nameMapping = {"id", "email", "fullName", "roles", "enabled"};
		
		csvWriter.writeHeader(csvHeader);
		
		for (User user : listUsers) {
			csvWriter.write(user, nameMapping);
		}
		
		csvWriter.close();
		
	}
	
}
Hãy để tôi giải thích mã này. Để gửi dữ liệu cho người dùng dưới dạng tệp tải xuống, chúng tôi cần đặt tiêu đề “Bố trí nội dung” cho phản hồi như bên dưới.
String headerKey = "Content-Disposition";
String headerValue = "attachment; filename=users_" + currentDateTime + ".csv";

response.setContentType("text/csv");
response.setHeader(headerKey, headerValue);
Loại nội dung được đặt thành văn bản/csv để trình duyệt sẽ biết và xử lý đúng cách. Và tên tệp CSV được tạo dựa trên ngày giờ hiện tại.
DateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
String currentDateTime = dateFormatter.format(new Date());
Vì vậy, mỗi khi người dùng tải xuống một tệp CSV, tên của nó sẽ khác – với ngày giờ được thêm vào cuối tên tệp. Và phần còn lại của mã sử dụng thư viện SuperCSV để tạo tệp CSV dựa trên dữ liệu (liệt kê người dùng) được trả về từ lớp Dịch vụ người dùng . Lưu ý rằng để ghi dữ liệu CSV vào phản hồi, trình ghi phản hồi được chuyển đến CsvBeanWriter .
ICsvBeanWriter csvWriter = new CsvBeanWriter(response.getWriter(), CsvPreference.STANDARD_PREFERENCE);
Và để ánh xạ các cột trong tệp CSV với tên trường trong lớp thực thể, chúng tôi sử dụng một mảng Chuỗi như thế này.
String[] nameMapping = {"id", "email", "fullName", "roles", "enabled"};
Vì vậy, hãy đảm bảo sử dụng ánh xạ tên này để người viết CSV có thể đọc đúng tên trường từ lớp thực thể.

5. Thêm Liên kết CSV Xuất trong Trang Xem

Chúng tôi sử dụng HTML và Thymeleaf để tạo siêu liên kết cho phép người dùng nhấp để xuất dữ liệu sang CSV như sau.
package net.codejava;

import javax.persistence.*;

@Entity
@Table(name = "roles")
public class Role {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;
	
	private String name;
	
	private String description;

	// constructors, getter and setters are not shown for brevity	
}
0

6. Kiểm tra xuất và tải xuống tệp CSV

Nhấp vào siêu liên kết Xuất sang CSV, ứng dụng Spring Boot sẽ tạo tệp CSV và trình duyệt sẽ tự động tải xuống tệp đó. Tên tập tin là một cái gì đó như thế này. users_2020-08-14_05-25-56. csv . Mở tệp này bằng trình soạn thảo văn bản như Notepad, bạn sẽ thấy nó thực sự là tệp CSV.
Xuất csv mongodb
 

Phần kết luận

Đến đây, bạn đã học cách viết mã chức năng xuất CSV cho ứng dụng web Spring Boot. Bạn thấy đấy, Spring Data JPA giúp dễ dàng lấy dữ liệu từ cơ sở dữ liệu và SuperCSV giúp dễ dàng tạo tệp CSV. Đối với phiên bản video của hướng dẫn này, xem video dưới đây

 

Hướng dẫn liên quan

  • Spring MVC với ví dụ tải xuống tệp CSV
  • Ví dụ về tệp CSV đọc Java với Super CSV
  • Ví dụ về xuất Java sang tệp CSV
  • Ví dụ mã Java để xuất từ ​​​​cơ sở dữ liệu sang tệp CSV
  • Ví dụ mã Java để chèn dữ liệu từ CSV vào cơ sở dữ liệu
 

Hướng dẫn khởi động mùa xuân khác

  • Khởi động mùa xuân xuất dữ liệu sang ví dụ Excel
  • Spring Boot Xuất dữ liệu sang PDF Ví dụ
  • Khởi động mùa xuân Ví dụ Hello World
  • Spring Boot tự động khởi động lại bằng Spring Boot DevTools
  • Hướng dẫn xử lý biểu mẫu khởi động mùa xuân với các thẻ biểu mẫu mùa xuân và JSP
  • Cách tạo Ứng dụng web khởi động mùa xuân (Spring MVC với JSP/ThymeLeaf)
  • Khởi động mùa xuân - JPA dữ liệu mùa xuân - Ví dụ về MySQL
  • Khởi động mùa xuân Hello World Hướng dẫn dịch vụ web RESTful
  • Cách sử dụng JDBC với Spring Boot
  • Ứng dụng web CRUD khởi động mùa xuân với JDBC - Thymeleaf - Oracle
  • Spring Boot RESTful CRUD API Ví dụ với cơ sở dữ liệu MySQL
  • Cách đóng gói ứng dụng Spring Boot thành JAR và WAR
  • Xác thực bảo mật khởi động mùa xuân với JPA, Hibernate và MySQL
  • Các ví dụ về sắp xếp và phân trang JPA dữ liệu mùa xuân
  • Hướng dẫn xử lý lỗi khởi động mùa xuân


Giới thiệu về tác giả

Xuất csv mongodb
Nam Ha Minh is certified Java programmer (SCJP and SCWCD). He started programming with Java in the time of Java 1.4 and has been falling in love with Java since then. Make friend with him on Facebook and watch his Java videos you YouTube.



Thêm bình luận

   

Báo cho tôi biết khi có comment mới

Gửi

Bình luận

12

jake2022-06-14 23. 19

Kiến thức bổ ích cho mọi người

Taofeek Olajide Hamm2022-02-18 05. 56

Điều này rất hữu ích, cảm ơn bạn

Josph13-12-2021 20. 30

xin chào, ông. Nam.
Tôi gặp khó khăn khi xuất tệp csv khi theo dõi khóa học của bạn do vấn đề về mã hóa. Tiếng Hàn utf-8 không được hiển thị chính xác sau khi xuất. Bạn có thể giúp gì không?
Vui lòng.

Nam2021-10-28 17. 42

Chào Khánh,
Em có thể sử dụng trạng thái enum {ACTIVE, INACTIVE}.
Tham khảo thêm. email. codejava. bọc lưới/. /.

Nguyễn Đình Khánh2021-10-28 10. 04

Chào anh,
Em đang thực hiện 1 dự án mà trong đó có 1 thực thể bên ngoài chứa các thông tin như int ID, String name, thì còn chứa đối tượng Status (với 2 trạng thái . Vì nó là đối tượng nên em không thể làm như video và bài đăng anh hướng dẫn. Trên mạng em cũng không thấy thông tin nào có thể làm việc này, anh có thể xem qua và giúp em được không ạ

12