一:activiti 入门

作者:fenng 商丘

工作流(Workflow)

就是业务过程的部分或整体在计算机应用环境下的自动化
主要解决的是“使在多个参与者之间按照某种定义的规则传递文档,信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”

工作流管理系统(WFMS)

是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流规则进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境

工作流管理系统的目标

管理工作的流程以确保工作在正确的时间被期望的人员所执行——在自动化进行的业务过程中插入人工的执行和干预

Activiti 介绍

Activiti5 是由 Alfresco 软件在 2010 年 5 月 17 日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti 基于 Apache 许可的开源 BPM 平台,创始人 Tom Baeyens 是 JBoss jBPM 的项目架构师,它特色是提供了 eclipse 插件,开发人员可以通过插件直接绘画出业务

工作流引擎

ProcessEngine 对象,这是 Activiti 工作的核心。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。

BPMN

业务流程建模与标注(Business Process Model and Notation,BPMN) ,描述流程的基本符号,包括这些图元如何组合成一个业务流程图(Business Process Diagram)

核心配置文件

```{bash}

activiti.cfg.xml

  1 xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"
2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
4 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
5 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
6

看到这里不得不感叹一下 spring 的强大,整合了 java 半壁江山

数据库

初始化数据库
方法一:

  1 //创建工作流需要的数据库
2 @Test
3 public void createTable(){
4 ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
5 configuration.setJdbcDriver("com.mysql.jdbc.Driver");
6 configuration.setJdbcUrl("jdbc:mysql://localhost:3306/activiti");
7 configuration.setJdbcUsername("root");
8 configuration.setJdbcPassword("12345678");
9
10 /**
11 public static final String DB_SCHEMA_UPDATE_FALSE = "false";不能自动创建表,需要表存在
12 public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先删除表再创建表
13 public static final String DB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自动创建表
14 */
15 configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
16 //工作流的核心对象,ProcessEnginee对象
17 ProcessEngine processEngine = configuration.buildProcessEngine();
18 System.out.println("processEngine:"+processEngine);
19 }

方法二: 由于方法一要有代码比较麻烦,所以有配置文件替代:
activiti.cfg.xml

  1 xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
4 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
5 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
6
7
8
9
  1 /**使用配置文件创建工作流需要的23张表*/
2 @Test
3 public void createTable_2(){
4 // ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
5 // //工作流的核心对象,ProcessEnginee对象
6 // ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
7
8 ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml") //
9 .buildProcessEngine();
10 System.out.println("processEngine:"+processEngine);
11 }

Activiti 用来存放流程数据一共使用了 23 张表 都是以 Act_ 开头的 底层操作使用的 mybatis 操作

工作流 Activiti 的表是用来存储流程数据的 而业务数据都需要用户自己创建和维护 一定要让业务去关联流程 才能关联工作流系统

API

流程引擎 ProcessEngine 对象
在 Activiti 中最核心的类,其他的类都是由他而来。
由流程引擎 ProcessEngine 对象创建各个 Service, 这些 Service 是调用工作流 23 张表的服务

RepositoryService 管理流程定义
RuntimeService 执行管理,包括启动,推进,删除流程实例等操作
TaskService 任务管理

HistoryService 历史管理(执行完的数据的管理)
IdentityService 组织机构管理
FormService 一个可选服务,任务表单管理
ManagerService

流程的执行过程
  1 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
2 /**部署流程定义*/
3 @Test
4 public void deploymentProcessDefinition(){
5
6 Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
7 .createDeployment()//创建一个部署对象
8 .name("helloworld入门程序")//添加部署的名称
9 .addClasspathResource("diagrams/helloworld.bpmn")//从classpath的资源中加载,一次只能加载一个文件
10 .addClasspathResource("diagrams/helloworld.png")//从classpath的资源中加载,一次只能加载一个文件
11 .deploy();//完成部署
12 System.out.println("部署ID:"+deployment.getId());//1
13 System.out.println("部署名称:"+deployment.getName());//helloworld入门程序
14 }
15 /**启动流程实例*/
16 @Test
17 public void startProcessInstance(){
18 //流程定义的key
19 String processDefinitionKey = "helloword";
20 ProcessInstance pi = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的Service
21 .startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
22 System.out.println("流程实例ID:"+pi.getId());//流程实例ID 101
23 System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID helloworld:1:4
24 }
25
26 /**查询当前人的个人任务*/
27 @Test
28 public void findMyPersonalTask(){
29 String assignee = "张三";
30 List list = processEngine.getTaskService()//与正在执行的任务管理相关的Service
31 .createTaskQuery()//创建任务查询对象
32 .taskAssignee(assignee)//指定个人任务查询,指定办理人
33 .list();
34 if(list!=null && list.size()>0){
35 for(Task task:list){
36 System.out.println("任务ID:"+task.getId());
37 System.out.println("任务名称:"+task.getName());
38 System.out.println("任务的创建时间:"+task.getCreateTime());
39 System.out.println("任务的办理人:"+task.getAssignee());
40 System.out.println("流程实例ID:"+task.getProcessInstanceId());
41 System.out.println("执行对象ID:"+task.getExecutionId());
42 System.out.println("流程定义ID:"+task.getProcessDefinitionId());
43 System.out.println("########################################################");
44 }
45 }
46 }
47
48 /**完成我的任务*/
49 @Test
50 public void completeMyPersonalTask(){
51 //任务ID
52 String taskId = "204";
53 processEngine.getTaskService()//与正在执行的任务管理相关的Service
54 .complete(taskId);
55 System.out.println("完成任务:任务ID:"+taskId);
56 }

二:Activiti 数据库表结构

1:简单概述:

  1 /*
2 Execution 执行对象
3 按流程定义的规则执行一次的过程.
4 对应的表:
5 act_ru_execution: 正在执行的信息
6 act_hi_procinst:已经执行完的历史流程实例信息
7 act_hi_actinst:存放历史所有完成的活动
8 ProcessInstance 流程实例
9 特指流程从开始到结束的那个最大的执行分支,一个执行的流程中,流程实例只有 1 个。
10 注意
11 (1)如果是单例流程,执行对象 ID 就是流程实例 ID
12 (2)如果一个流程有分支和聚合,那么执行对象 ID 和流程实例 ID 就不相同
13 (3)一个流程中,流程实例只有 1 个,执行对象可以存在多个。
14 Task 任务
15 执行到某任务环节时生成的任务信息。
16 对应的表:
17 act_ru_task:正在执行的任务信息
18 act_hi_taskinst:已经执行完的历史任务信息
19
20 */

2:activiti5.13 框架 数据库设计说明书

作者:liangjunjie

1、结构设计

1.1、    逻辑结构设计

Activiti 使用到的表都是 ACT_ 开头的。

ACTRE:

’RE’表示 repository(存储),RepositoryService 接口所操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。


ACTRU
:

‘RU’表示 runtime,运行时表 -RuntimeService。这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。Activiti 只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。

ACTID:

’ID’表示 identity (组织机构),IdentityService 接口所操作的表。用户记录,流程中使用到的用户和组。这些表包含标识的信息,如用户,用户组,等等。


ACTHI
:

’HI’表示 history,历史数据表,HistoryService。就是这些表包含着流程执行的历史相关数据,如结束的流程实例,变量,任务,等等

ACTGE:

全局通用数据及设置 (general),各种情况都使用的数据。


1.2、    所有表的含义


序号 表名 说明
1 act_ge_bytearray 二进制数据表
2 act_ge_property 属性数据表存储整个流程引擎级别的数据,
初始化表结构时,会默认插入三条记录,
3 act_hi_actinst 历史节点表
4 act_hi_attachment 历史附件表
5 act_hi_comment 历史意见表
6 act_hi_identitylink 历史流程人员表
7 act_hi_detail 历史详情表,提供历史变量的查询
8 act_hi_procinst 历史流程实例表
9 act_hi_taskinst 历史任务实例表
10 act_hi_varinst 历史变量表
11 act_id_group 用户组信息表
12 act_id_info 用户扩展信息表
13 act_id_membership 用户与用户组对应信息表
14 act_id_user 用户信息表
15 act_re_deployment 部署信息表
16  act_re_model 流程设计模型部署表
17 act_re_procdef 流程定义数据表
18 act_ru_event_subscr throwEvent、catchEvent 时间监听信息表
19 act_ru_execution 运行时流程执行实例表
20 act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息
21 act_ru_job 运行时定时任务数据表
22 act_ru_task 运行时任务节点表
23 act_ru_variable 运行时流程变量数据表


2、   表以及索引信息

   2.1 二进制数据表(act_gebytearray)

     2.1.1  简要描述

保存流程定义图片和 xml、Serializable(序列化)的变量, 即保存所有二进制数据,特别注意类路径部署时候,不要把 svn 等隐藏文件或者其他与流程无关的文件也一起部署到该表中,会造成一些错误(可能导致流程定义无法删除)。

    2.1.2  表结构说明

字段名称 字段描述 数据类型 主键 为空 取值说明
ID ID nvarchar(64) √   主键 ID
REV 乐观锁 int   √ Version(版本)
NAME_ 名称 nvarchar(255)   √ 部署的文件名称,如:mail.bpmn、mail.png
、mail.bpmn20.xml
DEPLOYMENTID 部署 ID nvarchar(64)   √ 部署表 ID
BYTES 字节 varbinary(max)   √ 部署文件
GENERATED 是否是引擎生成 tinyint   √ 0 为用户生成 1 为 Activiti 生成

2.1.3  索引说明

索引名称 组成字段名称 索引类型 索引说明
PRIMARY ID_ Unique 主键唯一索引
ACT_FK_BYTEARR_DEPL DEPLOYMENTID    

2.2 属性数据表( act_geproperty )

2.2.1  简要描述

属性数据表。存储整个流程引擎级别的数据。

2.2.2  表结构说明

字段名称 字段描述 数据类型 主键 为空 取值说明
NAME 名称 nvarchar(64) √   schema.version
        schema.history
        next.dbid
VALUE_ 值 nvarchar(300)   √ 5
        create(5.*)
REV 乐观锁 int   √ version

2.2.3  索引说明

索引名称 组成字段名称 索引类型 索引说明
PRIMARY NAME Unique 主键唯一索引
       

2.3 历史节点表(act_hi_actinst)

2.3.1  简要描述

  历史活动信息。这里记录流程流转过的所有节点,与 HITASKINST 不同的是,taskinst 只记录 usertask 内容

2.3.2  表结构说明

字段名称 字段描述 数据类型 主键 为空 取值说明
ID ID_ nvarchar(64) √    
PROC_DEFID 流程定义 ID nvarchar(64)      
PROC_INSTID 流程实例 ID nvarchar(64)      
EXECUTIONID 执行实例 ID nvarchar(64)      
ACTID 节点 ID nvarchar(225)     节点定义 ID
TASKID 任务实例 ID nvarchar(64)   √ 任务实例 ID 其他节点类型实例 ID 在这里为空
CALL_PROC_INSTID 调用外部的流程实例 ID nvarchar(64)   √ 调用外部流程的流程实例 ID'
ACTNAME 节点名称 nvarchar(225)   √ 节点定义名称
ACTTYPE 节点类型 nvarchar(225)     如 startEvent、userTask
ASSIGNEE_ 签收人 nvarchar(64)   √ 节点签收人
STARTTIME 开始时间 datetime     2013/9/15 11:30
ENDTIME 结束时间 datetime   √ 2013/9/15 11:30
DURATION 耗时 numeric(19,0)   √ 毫秒值

2.3.3  索引说明

索引名称 组成字段名称 索引类型 索引说明
PRIMARY ID Unique 主键唯一索引
ACT_IDX_HI_ACT_INST_START STARTTIME    
ACT_IDX_HI_ACT_INST_END ENDTIME    
ACT_IDX_HI_ACT_INST_PROCINST PROC_INSTID 、
ACTID
   
ACT_IDX_HI_ACT_INST_EXEC EXECUTIONID 、
ACTID
   

2.4 历史附件表( act_hiattachment )

2.4.1  简要描述

  历史附件表。

2.4.2  表结构说明

字段名称 字段描述 数据类型 主键 为空 取值说明
ID ID nvarchar(64) √   主键 ID
REV 乐观锁 integer   √ Version
USERID 用户 ID nvarchar(255)   √ 用户 ID
NAME 名称 nvarchar(255)   √ 附件名称
DESCRIPTION 描述 nvarchar(4000)   √ 描述
TYPE_ 类型 nvarchar(255)   √ 附件类型
TASKID 任务实例 ID nvarchar(64)   √ 节点实例 ID
PROC_INSTID 流程实例 ID nvarchar(64)   √ 流程实例 ID
URL URL nvarchar(4000)   √ 附件地址
CONTENTID 字节表的 ID nvarchar(64)   √ ACT_GEBYTEARRAY
的 ID

2.4.3  索引说明

索引名称 组成字段名称 索引类型 索引说明
PRIMARY ID Unique 主键唯一索引

2.5 历史意见表( act_hicomment )

2.5.1  简要描述

  历史意见表。

2.5.2  表结构说明

字段名称 字段描述 数据类型 主键 为空 取值说明
ID ID nvarchar(64) √   主键 ID
TYPE 类型 nvarchar(255)   √ 类型:event(事件)
        comment(意见)
TIME_ 时间 datetime     填写时间 '
USERID 用户 ID nvarchar(64)   √ 填写人
TASKID 节点任务 ID nvarchar(64)   √ 节点实例 ID
PROC_INSTID 流程实例 ID nvarchar(255)   √ 流程实例 ID
ACTION 行为类型 nvarchar(64)   √ 见备注 1
MESSAGE 基本内容 nvarchar(4000)   √ 用于存放流程产生的信息,比如审批意见
FULLMSG 全部内容 varbinary(max)   √ 附件地址

2.5.3  索引说明

索引名称 组成字段名称 索引类型 索引说明
PRIMARY ID_ Unique 主键唯一索引

2.6 历史详情表( act_hidetail )

2.6.1  简要描述

  历史详情表:流程中产生的变量详细,包括控制流程流转的变量,业务表单中填写的流程需要用到的变量等。

2.6.2  表结构说明

字段名称 字段描述 数据类型 主键 为空 取值说明
ID ID nvarchar(64) √   主键
TYPE 类型 nvarchar(255)     见备注 2
PROC_INSTID 流程实例 ID nvarchar(64)   √ 流程实例 ID
EXECUTIONID 执行实例 ID nvarchar(64)   √ 执行实例 ID
TASKID 任务实例 ID nvarchar(64)   √ 任务实例 ID
ACT_INSTID 节点实例 ID nvarchar(64)   √ ACT_HIACTINST
表的 ID
NAME 名称 nvarchar(255)     名称
VARTYPE 参数类型 nvarchar(255)   √ 见备注 3
REV 乐观锁 int   √ Version
TIME 时间戳 datetime     创建时间
BYTEARRAYID 字节表 ID nvarchar   √ ACT_GEBYTEARRAY
表的 ID
DOUBLE DOUBLE double precision   √ 存储变量类型为 Double
LONG LONG numeric   √ 存储变量类型为 long
TEXT TEXT nvarchar   √ 存储变量值类型为 String
TEXT2 TEXT2 nvarchar   √ 此处存储的是 JPA 持久化对象时,才会有值。此值为对象 ID

2.6.3  索引说明

索引名称 组成字段名称 索引类型 索引说明
组成字段名称 索引类型 索引说明
PRIMARY ID Unique 主键唯一索引
ACT_IDX_HI_ACT_INST_START STARTTIME    
ACT_IDX_HI_ACT_INST_END ENDTIME    
ACT_IDX_HI_ACT_INST_PROCINST PROC_INSTID 、
ACTID
   
ACT_IDX_HI_ACT_INST_EXEC EXECUTIONID 、
ACTID
   

2.7 历史流程人员表( act_ruidentitylink )

2.7.1  简要描述

  任务参与者数据表。主要存储历史节点参与者的信息。

2.7.2  表结构说明

字段名称 字段描述 数据类型 主键 为空 取值说明
ID ID nvarchar(64) √   ID
GROUPID 组 ID nvarchar(255)   √ 组 ID
TYPE_ 类型 nvarchar(255)   √ 备注 4
USERID 用户 ID nvarchar(255)   √ 用户 ID
TASKID 节点实例 ID nvarchar(64)   √ 节点实例 ID
PROC_INSTID 流程实例 ID nvarchar(64)   √ 流程实例 ID

2.7.3  索引说明

索引名称 组成字段名称 索引类型 索引说明
PRIMARY ID_ Unique 主键唯一索引
ACT_IDX_HI_IDENT_LNK_USER USERID Unique  
ACT_IDX_HI_IDENT_LNK_TASK TASKID    
ACT_IDX_HI_IDENT_LNK_PROCINST PROC_INSTID    

2.8 历史流程实例表(act_hiprocinst)

2.8.1  简要描述

  历史流程实例表。

2.8.2  表结构说明

字段名称 字段描述 数据类型 主键 为空 取值说明
ID ID_ nvarchar(64) √   主键 ID
PROC_INSTID 流程实例 ID nvarchar(64)     流程实例 ID
BUSINESSKEY 业务主键 nvarchar(255)   √ 业务主键,业务表单的 ID
PROC_DEFID 流程定义 ID nvarchar(64)     流程定义 ID
STARTTIME 开始时间 datetime     开始时间
ENDTIME 结束时间 datetime   √ 结束时间
DURATION_ 耗时 Numeric(19)   √ 耗时
START_USERID 起草人 nvarchar(255)   √ 起草人
START_ACTID 开始节点 ID nvarchar(255)   √ 起草环节 ID
END_ACTID 结束节点 ID nvarchar(255)   √ 结束环节 ID
SUPER_PROCESS_INSTANCEID 父流程实例 ID nvarchar(64)   √ 父流程实例 ID
DELETEREASON 删除原因 nvarchar(4000)   √ 删除原因

2.8.3  索引说明

索引名称 组成字段名称 索引类型 索引说明
PRIMARY ID_ Unique 主键唯一索引
PROC_INSTID PROC_INSTID Unique 外键
ACT_UNIQ_HI_BUS_KEY PROC_DEFID,BUSINESSKEY Unique  
ACT_IDX_HI_PRO_INST_END ENDTIME    
ACT_IDX_HI_PRO_I_BUSKEY BUSINESSKEY    

2.9 历史任务实例表( act_hitaskinst )

2.9.1  简要描述

   历史任务实例表。

2.9.2  表结构说明

activiti 基础的更多相关文章

  1. 推荐csdn里的几篇activiti基础入门及提高的博客

    昨天有个网友加qq询问我有没有非maven搭建的activiti项目的demo,因为我博客中写了一个用maven,我当时没有,于是晚上回家尝试了一下,结果比较容易就实现了. 之后和那个网友聊了一下,他 ...

  2. activiti基础操作

    package activitiTest; import java.io.InputStream; import java.util.List; import java.util.zip.ZipInp ...

  3. activiti基础环境搭建创建数据库表及策略

    博主使用为activiti5.22的版本. 1.创建maven工程. 2.在pom文件中引入所需要的包,如:activiti包.数据库包. 这是我引用的包: <dependencies> ...

  4. activiti 基础搭建

    首先在eclipse内添加activiti的插件,https://blog.csdn.net/qq_22701869/article/details/79537971 1.创建一个maven的java ...

  5. activiti基础--3-----------------------------流程实例

    一.流程实例用到的表: select * from act_ru_execution #正在执行的任务表 select * from act_hi_procinst #流程实例的历史表 select ...

  6. activiti基础--0------------------------------生成23张表

    1.工作流activiti.cfg.xml配置文件 <beans xmlns="http://www.springframework.org/schema/beans" xm ...

  7. activiti基础--1------------------------生成.bpmn和.png以及部署流程定义

    helloworld.dbmn <?xml version="1.0" encoding="UTF-8"?> <definitions xml ...

  8. activiti基础--2----------------------(流程定义)

    Deployment 部署对象 1.一次部署的多个文件信息,对于不需要的流程可以删除和修改 2.对应的表 act_re_deployment #部署对象表 act_re_procdef #流程定义表 ...

  9. Activiti 学习(一)—— Activiti 基础

    工作流概述 在一个公司中,每一项业务的开始和结束,都可以理解为一个工作流,例如,公司的费用报销的基本流程如下: 如图所示的工作流:员工先提出费用报销申请,提交该申请给部门领导,部门领导审批后,再提交给 ...

随机推荐

  1. 增加swap分区,文件形式

    查看swap a: sudo swapon -s b: free -m 文件方式: 1. 生成 生成一个1Gb(bs*count)的文件 [root@localhost ~]# dd if=/dev/ ...

  2. C# 多窗体之间方法调用

    看似一个简单的功能需求,其实很多初学者处理不好的,很多朋友会这么写: //父窗体是是frmParent,子窗体是frmChildA //在父窗体中打开子窗体 frmChildA child = new ...

  3. set_index() pandas

    set_index DataFrame可以通过set_index方法,可以设置单索引和复合索引. DataFrame.set_index(keys, drop=True, append=False, ...

  4. mongodb的备份和还原

    1.首先把mongodb的bin加入环境变量 2.备份 我们使用mongodb内置的mongodump mongodump -h dbhost -d dbname -o dbdirectory 例如: ...

  5. window netsh interface portproxy 配置转发

    系统版本 windows server2016 datacenter 1.配置443.80端口转发到其他服务器的443.80上 netsh interface portproxy add v4tov4 ...

  6. 内联函数 —— C 中关键字 inline 用法解析

    一.什么是内联函数 在C语言中,如果一些函数被频繁调用,不断地有函数入栈,即函数栈,会造成栈空间或栈内存的大量消耗. 为了解决这个问题,特别的引入了inline修饰符,表示为内联函数. 栈空间就是指放 ...

  7. json遍历 分别使用【原】

    json遍历 一 使用org.json.JSONObject遍历 之后的所有遍历都参考了:http://blog.csdn.net/u010648555/article/details/4981538 ...

  8. 《深入理解java虚拟机》第六章 类文件结构

    第六章 类文件结构   6.2 无关性的基石 各种不同平台的虚拟机与所有的平台都统一使用的程序存储格式--字节码(ByteCode)是构成平台无关性的基石.java虚拟机不和包括java在内的任何语言 ...

  9. mysql 原理 ~ sql执行

    一 普通sql执行的具体过程1 连接器  管理连接,权限验证2 分析器  词法分析,语法分析   比如 数据表和数据列是否存在, 别名是否有歧义,是否符合标准sql语法等3 优化器检测   执行计划生 ...

  10. tidb 架构 ~Tidb学习系列(2)

    一 简介:咱们今天来学习导入数据篇 二  导入数据测试   1 工具   mysqldumper   loader   2 下载tidb企业版工具  wget http://download.ping ...