基于List集合映射

本文主要探讨了Java编程中如何进行List集合到其他数据结构的映射操作,包括映射文件的配置和具体的测试代码示例,帮助读者理解这一常见但重要的数据处理技巧。
1、 实体类中使用List集合

 

1 public class Grade {
2     private int id;
3     private String name;
4     private List<Student> students = new ArrayList<Student>(0);
5 }

 

2、 映射文件

 1 <hibernate-mapping package="cn.siggy.pojo">
 2     <class name="Grade">
 3         <id name="id">
 4             <generator class="native"></generator>
 5         </id>
 6         <property name="name"/>
 7         <list name="students" cascade="all">
 8             <!-- key表示外键  column外键列名-->
 9             <key column="grade_id"></key>
10             <!-- 在多的一端 产生一列 用来表示顺序 如果不指明列名 默认为 idx 
11                 值由hibernate来维护
12              -->
13             <list-index column="sort">
14             </list-index>
15             <!-- one-to-many 一对多  类Grade 中  students 所表示类型 -->
16             <one-to-many class="Student"/>
17         </list>
18     </class>

3、 测试代码

 1 @Test
 2     public void testSave() throws HibernateException, SerialException, SQLException{
 3         Configuration cfg = new Configuration().configure();
 4         SessionFactory factory = cfg.buildSessionFactory(new StandardServiceRegistryBuilder()
 5         .applySettings(cfg.getProperties()).build());
 6         Session session = null;
 7         Transaction tx = null;
 8         try{
 9             session = factory.openSession();
10             tx = session.beginTransaction();
11             Grade grade = new Grade();
12             grade.setName("基础");
13             
14             Student stu = new Student();
15             stu.setName("张三疯");
16             stu.setAge(22);
17             Student stu1 = new Student();
18             stu1.setName("老王");
19             stu1.setAge(23);
20             Student stu2 = new Student();
21             stu2.setName("老李");
22             stu2.setAge(23);
23             //关联
24             grade.getStudents().add(stu);
25             grade.getStudents().add(stu1);
26             grade.getStudents().add(stu2);
27             //保存数据的顺序 是根据外键的配置来决定的
28             //如果外键不能为null,那么先保存一的一端
29             //如果外键可以为null,则可以随意保存
30             session.save(grade);
31             session.save(stu);
32             session.save(stu1);
33             session.save(stu2);
34             
35             tx.commit();
36             
37         }catch (HibernateException e) {
38             if(tx!=null)
39                 tx.rollback();
40             e.printStackTrace();
41             throw e;
42         }finally{
43             HibernateUtil.closeSession();
44         }
45     }
46     @Test
47     public void testGet(){
48         Session session = null;
49         Transaction tx = null;
50         try{
51             session = HibernateUtil.getSession();
52             tx = session.beginTransaction();
53             //取数据
54             Grade grade = (Grade)session.get(Grade.class, 1);
55             System.out.println("gradeName="+grade.getName());
56             System.out.println("grade所对应的多的一端的数据");
57             List<Student> list = grade.getStudents();
58             for(Student stu:list){
59                 System.out.println(stu.getName());
60             }
61             tx.commit();
62         }catch (HibernateException e) {
63             if(tx!=null)
64                 tx.rollback();
65             e.printStackTrace();
66             throw e;
67         }finally{
68             HibernateUtil.closeSession();
69         }
70     }

 

使用 EasyExcel 根据模板导出 `List` 集合数据到 Excel 文件是一种常见的需求,尤其适用于需要将结构化数据填充到预定义格式的 Excel 模板中的场景。以下是实现该功能的关键步骤和代码示例。 ### 实现步骤 1. **准备模板文件** 将 Excel 模板文件放置在项目的 `resources` 目录下,例如:`templates/template.xlsx`。通过 `ClassLoader` 获取模板的输入流。 2. **定义数据模型** 创建一个 Java Bean 类,用于映射 Excel 模板中需要填充的数据字段。例如: ```java public class DataModel { @ExcelProperty("姓名") private String name; @ExcelProperty("年龄") private int age; // Getter 和 Setter } ``` 3. **导出数据到模板** 使用 `EasyExcel.write()` 方法,将数据写入模板文件中。以下是一个完整的示例: ```java @GetMapping("/export") public void exportDataToTemplate(HttpServletResponse response) { try { // 加载模板文件 InputStream templateInputStream = getClass().getClassLoader().getResourceAsStream("templates/template.xlsx"); // 准备数据 List<DataModel> dataList = new ArrayList<>(); dataList.add(new DataModel("张三", 25)); dataList.add(new DataModel("李四", 30)); // 设置响应头 response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-disposition", "attachment;filename=data.xlsx"); // 使用 EasyExcel 导出数据到模板 EasyExcel.write(response.getOutputStream(), DataModel.class) .withTemplate(templateInputStream) .sheet("Sheet1") .doWrite(dataList); } catch (IOException e) { e.printStackTrace(); // 处理异常 } } ``` ### 注意事项 - **模板格式**:确保模板文件的列标题与 Java Bean 中的 `@ExcelProperty` 注解一致,以便数据正确映射到对应的单元格[^3]。 - **文件输出**:在 Web 应用中,导出的 Excel 文件通常通过 `HttpServletResponse` 输出流返回给客户端,用户可以直接下载文件。 - **性能优化**:对于大数据量的导出操作,建议使用分页查询或批量处理,避免内存溢出问题。 ### 合并单元格与多层级数据 如果需要在导出过程中合并单元格或处理多层级数据结构,可以结合 `WriteHandler` 实现自定义的合并策略。例如: ```java // 添加合并单元格策略 easyExcelWriter.write(dataList) .sheet("Sheet1") .doWrite(dataList, new WriteHandler() { @Override public void sheet(int sheetNo, Sheet sheet) { // 添加合并单元格逻辑 } @Override public void row(int rowNum, Row row) { // 添加行级别的处理逻辑 } }); ``` 通过上述方法,可以灵活地控制 Excel 文件的导出格式和内容。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值