前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【在线教育】EasyExcel入门

【在线教育】EasyExcel入门

作者头像
陶然同学
发布于 2023-02-26 12:50:39
发布于 2023-02-26 12:50:39
1.6K00
代码可运行
举报
文章被收录于专栏:陶然同学博客陶然同学博客
运行总次数:0
代码可运行

文章目录

1. EasyExcel 入门

1.1 EasyExcel概述

1.2 EasyExcel 特点

1.3 环境搭建

1.3.1 测试父项目

1.3.2 测试excel项目

1.4 基本操作

1.4.1 测试JavaBean

1.4.2 测试文件路径

1.4.3 写操作

1.4.3 读操作

1.5 复杂操作

1.5.1 复合表头

1.5.2 写操作:多表

1.5.3 读操作:多表

1.6.4 写操作:多对象

1.6 扩展:excel备份数据库

1. EasyExcel 入门

1.1 EasyExcel概述

EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel工具。

github地址:GitHub - alibaba/easyexcel: 快速、简洁、解决大文件内存溢出的java处理Excel工具

1.2 EasyExcel 特点

  • Java解析、生成Excel比较有名的框架有Apache poi、jxl,但他们都存在一个严重的问题就是非常的耗内存。
  • EasyExcel 重写了poi,使一个3M的excel只需要几M内存,并且再大的excel不会出现内存溢出。
    • 64M内存1分钟内读取75M(46W行25列)的Excel。

1.3 环境搭建

1.3.1 测试父项目

  • 项目名:zx-test-parent
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 修改pom文件
     <dependencies>      
  <!-- 测试 -->      
   <dependency>             
<groupId>org.springframework.boot</groupId>          
   <artifactId>spring-boot-starter-test</artifactId>       
  </dependency>    
 </dependencies>

1.3.2 测试excel项目

  • 项目名:zx-test-excel
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 修改pom,添加依赖
     <dependencies>      
  <dependency>             
<groupId>com.alibaba</groupId>           
  <artifactId>easyexcel</artifactId>             
<version>3.1.1</version>         
</dependency>         
<dependency>             
<groupId>org.projectlombok</groupId>             
<artifactId>lombok</artifactId>         
</dependency>   
 </dependencies>

1.4 基本操作

1.4.1 测试JavaBean

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.czxy.zx.demo01;import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;import java.util.Date;/**
 * Created by liangtong.
 */
@Data
public class Student {
    @ExcelProperty("编号")
    private String id;
​
    @ExcelProperty("姓名")
    private String name;
​
    @ExcelProperty("年龄")
    private Integer age;
​
    @ExcelProperty("电话")
    private String telephone;
​
    @ExcelProperty("邮箱")
    private String email;
​
    @ExcelProperty("生日")
    private Date brithday;
}

1.4.2 测试文件路径

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.czxy.zx.demo01;import org.junit.jupiter.api.Test;/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 */
public class TestExcel {
    /**
     * 获得根路径
     * @return
     */
    public String getPath() {
        return this.getClass().getResource("/").getPath();
    }
​
    @Test
    public void testPath() {
        // 测试文件路径
        String path = getPath() + "student_demo.xls";
        System.out.println(path);
    }
​
​
}

1.4.3 写操作

  • excel 属于 office组件一个软件
  • 存在若干版本,大体上划分2种情况,2007前的,2007年后的
    • 2003版:扩展名 xls,内容比较少,最大单元格 IV65536 ,256列(IV)
    • 2007版:扩展名 xlsx,内容较多,最大单元格 XFD1048576,16384列(XFD)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   /**
     * 准备数据
     * @return
     */
    private List<Student> getData(){
        List<Student> list = new ArrayList<Student>();
        for(int i = 0 ; i < 10 ; i ++){
            Student student = new Student();
            student.setId("stu" + i);
            student.setName("wang" + i);
            student.setAge( 18 + i );
            student.setTelephone("1361234" + i);
            student.setEmail("wang" + i + "@czxy.com");
            student.setBrithday(new Date());
            list.add(student);
        }
        return list;
    }
​
    @Test
    public void testWrite(){
        String file = getPath() + "student_demo.xls";
        //EasyExcel.write(位置,对象).sheet("表名").doWrite(数据);
        EasyExcel.write(file,Student.class).sheet("班级").doWrite(getData());
    }

1.4.3 读操作

  • 处理类:
    • 处理类需要实现 AnalysisEventListener 接口
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.czxy.zx.demo01;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.czxy.zx.domain.Student;/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 */
public class StudentListener extends AnalysisEventListener<Student> {
    @Override
    public void invoke(Student student, AnalysisContext analysisContext) {
        System.out.println(student);
    }
​
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("解析完成");
    }
}

测试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  @Test
    public void testRead(){
        String file = getPath() + "student_demo.xls";
        //EasyExcel.read(文件, 封装对象, 处理类).sheet("表").doRead();
        EasyExcel.read(file, Student.class, new StudentListener()).sheet("班级").doRead();
    }

1.5 复杂操作

1.5.1 复合表头

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.czxy.zx.demo02;import com.alibaba.excel.annotation.ExcelProperty;
        import com.alibaba.excel.annotation.format.DateTimeFormat;
        import com.alibaba.excel.annotation.write.style.ColumnWidth;
        import com.alibaba.excel.annotation.write.style.ContentRowHeight;
        import com.alibaba.excel.annotation.write.style.HeadRowHeight;
        import lombok.Data;import java.util.Date;/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 */
@Data
@ContentRowHeight(20)
@HeadRowHeight(20)  //行高
@ColumnWidth(25)    //列宽
public class Student2 {
    @ExcelProperty("编号")
    private String id;
​
    @ExcelProperty({"基本信息","姓名"})   //复制表头
    private String name;
​
    @ExcelProperty({"基本信息","年龄"})
    private Integer age;
​
    @ExcelProperty("电话")
    private String telephone;
​
    @ExcelProperty("邮箱")
    private String email;
​
    @ExcelProperty("生日")
    @DateTimeFormat("yyyy年MM月dd日")
    private Date brithday;
}

1.5.2 写操作:多表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.czxy.zx.demo02;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.czxy.zx.demo01.Student;
import org.junit.Test;import java.util.ArrayList;
import java.util.Date;
import java.util.List;/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 */
public class TestExcel2 {
    /**
     * 获得根路径
     * @return
     */
    public String getPath() {
        return this.getClass().getResource("/").getPath();
    }/**
     * 准备数据
     * @return
     */
    private List<Student2> getData(Integer flag){
        List<Student2> list = new ArrayList<Student2>();
        for(int m = 0 ; m < 10 ; m ++){
            String i = "" + flag + m ;
            Student2 student = new Student2();
            student.setId("stu" + i);
            student.setName("wang" + i);
            student.setAge( 18 );
            student.setTelephone("1361234" + i);
            student.setEmail("wang" + i + "@czxy.com");
            student.setBrithday(new Date());
            list.add(student);
        }
        return list;
    }
​
    @Test
    public void testMoreSheetWrite(){
        String file = getPath() + "student_demo2.xls";
​
        ExcelWriter excelWriter = EasyExcel.write(file).build();for (int i = 0; i < 5; i++) {
            WriteSheet writeSheet = EasyExcel.writerSheet(i, "模板" + i).head(Student2.class).build();
            // 分页去数据库查询数据 这里可以去数据库查询每一页的数据
            List<Student2> data = getData(i);
            excelWriter.write(data, writeSheet);
        }
​
        excelWriter.finish();
    }
​
​
}

1.5.3 读操作:多表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 具有缓存处理类
package com.czxy.zx.demo02;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;import java.util.ArrayList;
import java.util.List;/**
 * Created by liangtong.
 */
public class Student2Listener extends AnalysisEventListener<Student2> {// 批量操作数
    private static final int BATCH_COUNT = 10;
    // 用于缓存信息
    private List<Student2> cache = new ArrayList<Student2>();public void invoke(Student2 student, AnalysisContext analysisContext) {
        //保存学生信息
        cache.add(student);
        if(cache.size() >= BATCH_COUNT){
            // 保存数据
            saveData();
        }
    }
 public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        //最后的不够 BATCH_COUNT 倍数
        saveData();
    }private void saveData() {
        // 集合不为空
        if(! cache.isEmpty()) {
            // 处理缓存数据
            System.out.println(cache);
            // 清空缓存
            cache.clear();
        }
    }
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 读操作
@Test
    public void testMoreRead(){
        String file = getPath() + "student_demo2.xls";
        //EasyExcel.read(文件, 封装对象, 处理类).sheet("表").doRead();
​
        ExcelReader excelReader = EasyExcel.read(file, Student2.class, new Student2Listener()).build();
        // 确定需要解析的sheet
        for (int i = 0; i < 5; i++) {
            ReadSheet readSheet = EasyExcel.readSheet("模板" + i).build();
            excelReader.read(readSheet);
        }
​
        excelReader.finish();
    }

1.6.4 写操作:多对象

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Student

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
    @ExcelProperty("姓名")
    private String name;
    @ExcelProperty("年龄")
    private Integer age;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Book
@Data
@NoArgsConstructor
@AllArgsConstructor
@HeadRowHeight(50)
@HeadFontStyle(fontName = "黑体",italic =  BooleanEnum.TRUE, color = Font.COLOR_RED, underline = 2)
public class Book {
    @ExcelProperty("编号")
    private String id;
​
    @ExcelProperty({"作者信息","姓名"})
    private String authorName;
​
    @ExcelProperty({"作者信息","年龄"})
    private Integer authorAge;
​
    @ExcelProperty({"书籍基本信息","标题"})
    private String title;
​
    @ContentFontStyle(fontName = "楷书",italic =  BooleanEnum.TRUE, color = Font.COLOR_RED, underline = -1)
    @ExcelProperty({"书籍基本信息","价格"})
    private Double price;
    @ExcelProperty({"书籍基本信息","出版日期"})
    @DateTimeFormat("yyyy年MM月dd日")
    private Date publishDate;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 实现 
package com.czxy.zx.demo03;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.czxy.zx.demo01.Student;
import com.czxy.zx.demo02.Book;
import org.junit.Test;import java.util.*;/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 */
public class TestManyObject {// 获得当前项目的运行时的根目录
    public String getPath() {
        return this.getClass().getResource("/").getPath();
    }// 模拟数据
    public List<Student> getStudentData() {
        List<Student> list = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            list.add(new Student("张三" + i, 18 + i));
        }
        return list;
    }public List<Book> getBookData() {
        List<Book> list = new ArrayList<>();
        for (int i = 0; i < 20; i++) {
            list.add(new Book(i+"" , "张三" + i , 18 +i, "坏蛋是怎么"+i, 998d+i, new Date()));
        }
        return list;
    }// 遍历map即可
    private Map<Class<?>, List<?>> getData() {
        Map<Class<?>, List<?>> map = new HashMap<>();
        map.put(Student.class, getStudentData());
        map.put(Book.class, getBookData());
        return map;
    }
​
    @Test
    public void testManyObject() {
        String file = getPath() + "many_object.xlsx";
        //1 开始写
        ExcelWriter excelWriter = EasyExcel.write(file).build();
        //2 依次写每一个对象
        for(Map.Entry<Class<?>, List<?>> entry : getData().entrySet()) {
            Class<?> clazz = entry.getKey();            //类型
            List<?> data = entry.getValue();            //数据
            WriteSheet writeSheet = EasyExcel.writerSheet(clazz.getSimpleName()).head(clazz).build();
            excelWriter.write(data, writeSheet);
        }//3 写完成
        excelWriter.finish();
    }
}

1.6 扩展:excel备份数据库

  • 步骤
    • 步骤1:添加坐标
    • 步骤2:编写封装类
    • 步骤3:编写核心类
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 步骤1:添加坐标
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.0.5</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.7</version>
        </dependency>
    </dependencies>
 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 步骤2:编写封装类
package com.czxy.zx.demo03;import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;import java.util.Date;
import java.util.List;/**
 * 课程
 *
 */
@Data
@ContentRowHeight(20)
@HeadRowHeight(20)  //行高
@ColumnWidth(25)    //列宽
public class Chapter {
​
    @ExcelProperty("章节ID")
    private String id;
​
    @ExcelProperty("课程ID")
    private String courseId;
​
    @ExcelProperty("章节名称")
    private String title;
​
    @ExcelProperty("显示排序")
    private Integer sort;
​
    @ExcelProperty("创建时间")
    private Date gmtCreate;
​
    @ExcelProperty("更新时间")
    private Date gmtModified;}package com.czxy.zx.demo03;import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import lombok.Data;import java.util.Date;/**
 * 课程
 *
 */
@Data
@ContentRowHeight(20)
@HeadRowHeight(20)  //行高
@ColumnWidth(25)    //列宽
public class Course {
​
    @ExcelProperty("课程ID")
    private String id;
​
    @ExcelProperty("课程讲师ID")
    private String teacherId;
​
    @ExcelProperty("课程专业ID二级分类ID")
    private String subjectId;
​
    @ExcelProperty("一级分类ID")
    private String subjectParentId;
​
    @ExcelProperty("课程标题")
    private String title;
​
    @ExcelProperty("课程销售价格,设置为0则可免费观看")
    private Double price;
​
    @ExcelProperty("总课时")
    private Integer lessonNum;
​
    @ExcelProperty("课程封面图片路径")
    private String cover;
​
    @ExcelProperty("销售数量")
    private Long buyCount;
​
    @ExcelProperty("浏览数量")
    private Long viewCount;
​
    @ExcelProperty("乐观锁")
    private Long version;
​
    @ExcelProperty("视频状态 Draft未发布  Normal已发布")
    private String status;
​
    @ExcelProperty("创建时间")
    @DateTimeFormat("yyyy年MM月dd日")
    private Date gmtCreate;
​
    @ExcelProperty("更新时间")
    @DateTimeFormat("yyyy年MM月dd日")
    private Date gmtModified;
​
​
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 步骤3:编写核心类

 package com.czxy.zx.demo03;import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.czxy.zx.demo02.Student2;
import org.apache.commons.dbutils.BasicRowProcessor;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.dbutils.GenerousBeanProcessor;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test;import java.sql.*;
import java.util.*;/**
 * @author 桐叔
 * @email liangtong@itcast.cn
 */
public class TestBackdb {public Class getClassByTableName(String tableName) {
        Map<String,Class> map = new HashMap<>();
        map.put("edu_chapter", Chapter.class);
        map.put("edu_course", Course.class);
        return map.get(tableName);
    }public String getPath() {
        return this.getClass().getResource("/").getPath();
    }
​
​
    public Connection getConnection() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/zx_edu_course?useUnicode=true&characterEncoding=utf8";
            String username = "root";
            String password = "1234";
​
            Properties props =new Properties();
            props.setProperty("user", username);
            props.setProperty("password", password);
            props.setProperty("remarks", "true");               //设置可以获取remarks信息
            props.setProperty("useInformationSchema", "true");  //设置可以获取tables remarks信息return DriverManager.getConnection(url, props);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
​
    @Test
    public void testDB() throws Exception {
        String file = getPath() + "db.xls";
        QueryRunner queryRunner = new QueryRunner();
        ExcelWriter excelWriter = EasyExcel.write(file).build();
        String dbName = "zx_edu_course";
        //获得连接
        Connection conn = getConnection();
        //语句执行者
        Statement st = conn.createStatement();//数据库的元数据
        DatabaseMetaData databaseMetaData = conn.getMetaData();//获得所有的数据库
        ResultSet catalogResultSet = databaseMetaData.getCatalogs();//遍历所有的数据库
        while(catalogResultSet.next()) {
            //获得数据库的名称
            String databaseName = catalogResultSet.getString(1);
            if(dbName.equals(databaseName)) {
                //使用数据库
                st.execute("use " + databaseName);
                ResultSet tableResultSet = databaseMetaData.getTables(databaseName, null, null, null);
                //遍历所有的表名
                while(tableResultSet.next()) {
                    //表名
                    String tableName = tableResultSet.getString(3);             //TABLE_NAME
                    String tableRemarks = tableResultSet.getString("REMARKS"); //获得表的备注
                    // 通过表名获得excel处理类
                    Class excelBeanClass = getClassByTableName(tableName);
                    if(excelBeanClass != null) {
                        //获得当前表的所有数据
                        String sql = "select * from " + tableName;
                        //
                        List data = (List) queryRunner.query(conn, sql, new BeanListHandler<>(excelBeanClass, new BasicRowProcessor(new GenerousBeanProcessor()) ));
                        // 创建sheet
                        WriteSheet writeSheet = EasyExcel.writerSheet(tableRemarks != null ? tableRemarks : tableName).head(excelBeanClass).build();
                        excelWriter.write(data, writeSheet);
                    }
                }
            }
        }
        //写入完成
        excelWriter.finish();
    }}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
软件方法(下)分析和设计第8章分析 之 分析类图——知识篇(20211227更新)
http://www.umlchina.com/book/softmeth08part1.pdf
用户6288414
2022/01/04
1.4K0
软件方法(下)分析和设计第8章分析 之 分析类图——知识篇(20211227更新)
《软件方法》第8章 分析 之 分析类图——知识篇Part1(20211029更新)
pdf版本:t.hk.uy/aqVH。您在阅读《软件方法》时如果发现错误,欢迎通过微信umlchina2告知。如果作者认为有道理,决定在下一次发布时根据您的意见修改,每个错误将付给您5.12元报酬,并在书中说明您的贡献。报酬通过微信支付。
用户6288414
2021/11/10
1.1K0
软件方法(下)分析和设计第8章连载[20210518更新]
您在阅读《软件方法》时如果发现错误,欢迎通过微信umlchina2告知。如果作者认为有道理,决定在下一次发布时根据您的意见修改,将付给您5.12元报酬,并在书中说明您的贡献。报酬通过微信支付。
用户6288414
2021/06/10
9760
软件方法(下)分析和设计第8章连载[20210518更新]
软件方法(下)分析和设计第8章分析 之 分析类图—知识篇Part04(202205更新)
第7章“需求启发”中就提到,我们在研究资料的时候,可以通过画类图来整理领域的概念。整理领域概念时,有时还可以加上状态机图(但不会使用序列图,自行思考一下为什么)。即使不是为了开发软件,也可以通过这些手段来整理领域知识,帮助我们更快掌握。
用户6288414
2022/05/27
4690
软件方法(下)分析和设计第8章分析 之 分析类图—知识篇Part04(202205更新)
软件方法(下)分析和设计第8章分析 之 分析类图——知识篇Part03(202205更新)
当使用面向对象的方法来分析系统时,我们假设系统由"对象"这样一种东西构成,对象封装了数据和行为。
用户6288414
2022/05/27
8360
软件方法(下)分析和设计第8章分析 之 分析类图——知识篇Part03(202205更新)
软件方法(下)分析和设计第8章分析 之 分析类图——知识篇Part01(202204更新)
http://www.umlchina.com/book/softmeth2.pdf
用户6288414
2022/05/27
5840
软件方法(下)分析和设计第8章分析 之 分析类图——知识篇Part01(202204更新)
软件方法(下)分析和设计第8章分析 之 分析类图——知识篇Part02(202204更新)
有的人(国内国外都有)没有掌握相应技能,也不愿意认真学习已有的知识,凭着一些朦胧的“领悟”,就“发明”了一些“新”方法,这就是伪创新。这样的人,国内国外都有。
用户6288414
2022/05/27
3460
软件方法(下)分析和设计第8章分析 之 分析类图——知识篇Part02(202204更新)
[分析方法,伪创新举例]软件方法(下)分析和设计 第8章
在业务建模和需求工作流,我们一直把目标系统看作是一个整体,想办法推导出涉众在意的整体表现——需求。
用户6288414
2021/04/22
4390
软件方法(下)第8章分析之分析类图—知识篇Part09-审查类和属性1
http://www.umlchina.com/book/softmeth2.pdf
用户6288414
2022/05/27
3960
软件方法(下)第8章分析之分析类图—知识篇Part09-审查类和属性1
软件方法(下)第8章分析之分析类图—知识篇Part08-自测题8.2.4
http://www.umlchina.com/book/softmeth2.pdf
用户6288414
2022/05/27
3540
软件方法(下)第8章分析之分析类图—知识篇Part08-自测题8.2.4
软件方法(下)第8章分析之分析类图—知识篇Part06(202205更新)
在为了软件开发而建模时,建模人员可能会用自己熟悉的非核心域术语来代替不那么熟悉的核心域术语,还引以为豪。例如,面对一段集装箱领域装箱规则的描述,建模人员立即在大脑中把它转换成自己熟悉的概念:栈、链表、树……而且认为这是“透过现象看本质”,甚至宣称“我就是程序,程序就是我”!
用户6288414
2022/05/27
2560
软件方法(下)第8章分析之分析类图—知识篇Part06(202205更新)
软件方法(下)第8章分析之分析类图—知识篇Part10-审查类和属性2
http://www.umlchina.com/book/softmeth2.pdf
用户6288414
2022/10/31
4300
软件方法(下)第8章分析之分析类图—知识篇Part10-审查类和属性2
软件方法(下)第8章分析之分析类图—知识篇Part05(202205更新)领域专家和通用语言
一个领域之所以能作为“领域”为人认知,必定会在发展过程中沉淀出一套日益完善和精确的术语体系。每个术语有其独特的、其他术语不能替代的含义。
用户6288414
2022/05/27
4020
软件方法(下)第8章分析之分析类图—知识篇Part05(202205更新)领域专家和通用语言
软件方法(下)第8章分析之分析类图—知识篇Part07(202205更新)命名的词性和语言
http://www.umlchina.com/book/softmeth2.pdf
用户6288414
2022/05/27
3580
软件方法(下)第8章分析之分析类图—知识篇Part07(202205更新)命名的词性和语言
软件方法(下)分析和设计第9章分析 之 分析类图——案例篇(20211228更新)
http://www.umlchina.com/book/softmeth09.pdf
用户6288414
2022/01/04
1.3K0
软件方法(下)分析和设计第9章分析 之 分析类图——案例篇(20211228更新)
软件方法(下)第9章分析类图案例篇Part05-案例二-智能建模工具
http://www.umlchina.com/tools/search.aspx
用户6288414
2022/10/31
4200
软件方法(下)第9章分析类图案例篇Part05-案例二-智能建模工具
《软件方法》第9章 分析类图进阶(20180619更新)
本章在假设读者已经掌握类建模基本知识的前提下,讲述一些可以帮助建模人员得到更高质量类模型的进阶建模技能。
用户6288414
2019/09/23
5340
《软件方法》第9章  分析类图进阶(20180619更新)
软件方法(下)第8章分析之分析类图—知识篇Part11-类之间的关系
首先要说明:虽然本书先讲解“识别类和属性”,再讲解“识别类之间的关系”,但在实际工作中,先“识别类和属性”再“识别类之间的关系”这个思考顺序只是一个微小的思考周期内的顺序。建模一张类图,需要很多个思考周期。也就是说,识别类和属性→识别类之间的关系→识别类和属性→识别类之间的关系→……是交错进行的。
用户6288414
2022/10/31
3000
软件方法(下)第8章分析之分析类图—知识篇Part11-类之间的关系
《软件方法》强化自测题-分析(2)
答案不直接给出,可访问每套题后面给出的自测链接或扫二维码自测,做到全对才能知道答案。
用户6288414
2022/04/09
3560
《软件方法》强化自测题-分析(2)
业务建模、业务用例图、系统用例图都是啥?一文读懂《软件方法》
虽然乍一看以为只是一本21天教你学画 UML 图的工具书,实际看下来,却是扎扎实实地在教你如何分析你的业务,找到组织的竞争优势。
腾讯云开发者
2024/07/09
2.3K1
业务建模、业务用例图、系统用例图都是啥?一文读懂《软件方法》
推荐阅读
软件方法(下)分析和设计第8章分析 之 分析类图——知识篇(20211227更新)
1.4K0
《软件方法》第8章 分析 之 分析类图——知识篇Part1(20211029更新)
1.1K0
软件方法(下)分析和设计第8章连载[20210518更新]
9760
软件方法(下)分析和设计第8章分析 之 分析类图—知识篇Part04(202205更新)
4690
软件方法(下)分析和设计第8章分析 之 分析类图——知识篇Part03(202205更新)
8360
软件方法(下)分析和设计第8章分析 之 分析类图——知识篇Part01(202204更新)
5840
软件方法(下)分析和设计第8章分析 之 分析类图——知识篇Part02(202204更新)
3460
[分析方法,伪创新举例]软件方法(下)分析和设计 第8章
4390
软件方法(下)第8章分析之分析类图—知识篇Part09-审查类和属性1
3960
软件方法(下)第8章分析之分析类图—知识篇Part08-自测题8.2.4
3540
软件方法(下)第8章分析之分析类图—知识篇Part06(202205更新)
2560
软件方法(下)第8章分析之分析类图—知识篇Part10-审查类和属性2
4300
软件方法(下)第8章分析之分析类图—知识篇Part05(202205更新)领域专家和通用语言
4020
软件方法(下)第8章分析之分析类图—知识篇Part07(202205更新)命名的词性和语言
3580
软件方法(下)分析和设计第9章分析 之 分析类图——案例篇(20211228更新)
1.3K0
软件方法(下)第9章分析类图案例篇Part05-案例二-智能建模工具
4200
《软件方法》第9章 分析类图进阶(20180619更新)
5340
软件方法(下)第8章分析之分析类图—知识篇Part11-类之间的关系
3000
《软件方法》强化自测题-分析(2)
3560
业务建模、业务用例图、系统用例图都是啥?一文读懂《软件方法》
2.3K1
相关推荐
软件方法(下)分析和设计第8章分析 之 分析类图——知识篇(20211227更新)
更多 >
LV.0
这个人很懒,什么都没有留下~
目录
  • 文章目录
  • 1. EasyExcel 入门
    • 1.1 EasyExcel概述
    • 1.2 EasyExcel 特点
    • 1.3 环境搭建
      • 1.3.1 测试父项目
      • 1.3.2 测试excel项目
    • 1.4 基本操作
      • 1.4.1 测试JavaBean
      • 1.4.2 测试文件路径
      • 1.4.3 写操作
      • 1.4.3 读操作
    • 1.5 复杂操作
      • 1.5.1 复合表头
      • 1.5.2 写操作:多表
      • 1.5.3 读操作:多表
      • 1.6.4 写操作:多对象
    • 1.6 扩展:excel备份数据库
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档