CN102566990B - 一种在Java应用中进行数据操作的方法及装置 - Google Patents
一种在Java应用中进行数据操作的方法及装置 Download PDFInfo
- Publication number
- CN102566990B CN102566990B CN201010593313.4A CN201010593313A CN102566990B CN 102566990 B CN102566990 B CN 102566990B CN 201010593313 A CN201010593313 A CN 201010593313A CN 102566990 B CN102566990 B CN 102566990B
- Authority
- CN
- China
- Prior art keywords
- data
- structural information
- object class
- field object
- mapped
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种在Java应用中进行数据操作的方法及装置,用以将数据表映射为源代码形式,提高对象关系映射的效率及准确率。该方法为:从数据库中获取至少一个表的结构信息,将所述至少一个表的结构信息映射为域对象类文件和数据访问类文件,在接收到数据操作指示时,基于所述数据访问类文件包含的函数对所述域对象类文件进行数据操作。该方法能够将数据表映射为源代码,提高对象关系映射的效率和准确率。本发明同时公开了一种在Java应用中进行数据操作的装置。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种在Java应用中进行数据操作的方法及装置。
背景技术
在基于Java的项目开发过程中,需要频繁的对数据库进行增加、删除、修改、查询的操作,而在采用Java数据库连接(Java Database Connectivity,JDBC)连接数据库时,开发人员面对的都是原始数据集合。在业务逻辑开发过程中,开发人员需要根据预先获知的数据库中相关表的结构信息,从数据库中获取需要的数据,这就增加了开发人员的工作量,降低了开发效率。
为了解决这一问题,需要进行对象关系映射,所谓对象关系映射即是将数据库中的数据映射为对象,这就引入了数据访问对象(Data Access Object,DAO)模式,DAO是对象关系映射的一种实现方式。DAO模式通过对底层数据进行封装,为业务层提供一个面向对象的接口,使得业务逻辑开发人员可以专注于面向业务中的实体进行编码,使得业务逻辑更加清晰,DAO模式是数据访问类Data Accessor和域对象类Domain Object的组合,其中,Data Accessor是将数据访问的实现机制加以封装,与数据的使用代码相分离,从外部来看,Data Accessor提供了黑盒式的数据存取接口,而Domain Object是领域内涉及的各个数据对象,提供了对所面向领域内对象的封闭。
虽然通过DAO模式可以实现业务逻辑与数据逻辑的分离,在实现复杂性和结构清晰性上达到较好的平衡,通常是一个对象对应数据库中的一个表,对象中的多个属性分别对应表的多个字段,在实际对DAO模式的开发过程中,需要手动将数据库中的表转换为DAO模式的对象,如需要处理数据库中的多个表,则需要针对多个表分别转换为相应的对象,使得开发效率较低,并且由于手动将数据块中的表转换为DAO模式的对象,使得稳定性不高,易出错。
发明内容
本发明提供一种在Java应用中进行数据操作的方法及装置,用以将数据表映射为源代码形式,提高对象关系映射的效率以及准确率。
本发明实施例提供的具体技术方案如下:
一种在Java应用中进行数据操作的方法,包括:
从数据库中获取至少一个表的结构信息;
将所述至少一个表的结构信息映射为域对象类文件和数据访问类文件;
在接收到数据操作指示时,基于所述数据访问类文件包含的函数对所述域对象类文件进行数据操作。
一种在Java应用中进行数据操作的装置,包括:
第一处理单元,用于从数据库中获取至少一个表的结构信息;
第二处理单元,用于将所述至少一个表的结构信息映射为域对象类文件和数据访问类文件;
第三处理单元,用于在接收到数据操作指示时,基于所述数据访问类文件包含的函数对所述域对象类文件进行数据操作。
基于上述技术方案,在建立数据库连接后,从数据库中获取表的结构信息,将表的结构信息映射为域对象类文件和数据访问类文件,从而能够将数据库中表的结构信息映射为域对象类文件,即将表的结构转换为源代码的形式,将对数据库中表的数据操作映射为数据访问类文件,将针对表的数据操作转换为源代码的形式,在接收到数据操作指示时,基于数据库访问类文件包含的函数对域对象类文件进行数据操作,从而能够自动获取表中的记录,而无需人工读取数据库中的原始数据,从而提高了对象关系映射的效率和准确率。
附图说明
图1为本发明在Java应用中进行数据操作的方法流程图;
图2为本发明在Java应用中进行数据操作的装置结构图。
具体实施方式
为了提高对象关系映射的效率以及准确率,本发明实施例提供了一种在Java应用中进行数据操作的方法及装置,能够提高对象关系映射的效率,并提高准确率。该方法为:从数据库中获取至少一个表的结构信息,将该至少一个表的结构信息映射为域对象类文件和数据访问类文件,在接收到数据操作指示时,基于数据访问类文件包含的函数对域对象类文件进行数据操作。
下面结合附图对本发明优选的实施例进行详细说明。
参阅附图1所示,本发明实施例中,在Java应用中进行数据操作的具体方法流程如下:
步骤101:从数据库中获取至少一个表的结构信息。
在Java应用中,可以通过Java数据库连接方式进行数据库连接,即通过数据库连接对象(Connection对象)建立数据库连接,并在建立数据库连接后,从数据库中获取数据库的整体综合信息对象,该整体综合信息对象中包含数据库中所有表的结构信息,本发明实施例中,从数据库的整体综合信息对象中获取至少一个表的结构信息。
其中,一个表的结构信息至少包含一个表的字段名称,字段的数据类型,字段精度以及字段是否为空。
本发明实施例中,在获取至少一个表的结构信息时,首先获取该表的主键,如果该表不存在主键,则结束。表的主键是指表中记录的唯一标识字段,表的主键不能重复,也不能为空值。
步骤102:将至少一个表的结构信息映射为域对象类文件和数据访问类文件。
其中,在将至少一个表的结构信息映射为域对象类文件时,针对至少一个表定义域对象类,并在该域对象类中预设获取数据和设置数据的外部接口,将表的结构信息映射为域对象类的私有数据。
在将至少一个表的结构信息映射为数据访问类文件时,针对上述至少一个表定义数据访问类,基于该至少一个表的结构信息生成数据访问类包含的函数。该数据访问类包含的函数至少包括数据的增加函数、删除函数、修改函数和查询函数。
一个表对应一个域对象类文件和一个数据访问类文件,可以针对数据库中的全部或部分表的结构信息。
在生成域对象类文件和数据访问类文件后,将生成的域对象类文件和数据访问类文件保存至指定位置,以直接从该指定位置进行调用。
步骤103:在接收到数据操作指示时,基于数据库访问类文件包含的函数对域对象类文件进行数据操作。
下面针对步骤102中将至少一个表的信息映射为域对象文件和数据访问类文件的过程进行详细说明。
其中,在将至少一个表的结构信息映射为域对象文件时,首先针对该至少一个表预定义域对象类,包括定义域对象类的命名规则,域对象类私有数据成员的命名规则,数据类型映射规则,构造函数,以及获取数据和设置数据的外部接口;再将表的结构信息映射为域对象类的私有数据。
例1,域对象类的命名规则设置为:如表1所示,域对象类的名称和相应的表的名称一致,并且第一个字母大写,后面的字母小写,在表的名称中有下划线时,在相对应的域对象类的名称中将下划线去除,将下划线后面的第一个字母大写,并且后面的字母小写。
表1
表的名称 | 域对象类的名称 |
APP_USER、app_user | AppUser |
APPUSER、appuser | Appuser |
例2,将表的结构信息中包含的字段映射为域对象类的私有数据时,采用的命名规则设置如下:参阅表2所示,域对象类的私有数据名称和表结构信息中的字段名称一致,并且所有字母小写,在字段名称中有下划线时,转换为域对象类的私有数据名称时,将相对应的私有数据名称中将下划线去除,并且下划线后面的第一个字母大写,后续字母小写。
表2
表中的字段名称 | 域对象的私有数据名称 |
USER_NAME、user_name | userName |
USERNAME、username | username |
例3,域对象类的数据类型映射规则设置为:在Java应用中,可以通过整体综合信息对象中的getColumnType函数获取表的某个字段的数据类型,通过isNullable函数获知表的某个字段是否为空值,根据字段的数据类型和字段是否为空值决定数据类型映射规则,具体参见表3所示。在将表的结构映射为域对象类的私有数据成员时,可以按照表3中的规则进行映射。
表3
例4,针对数据库中的表APP_ROLE,采用本发明实施例中的方法将该表的结构信息映射为域对象,表APP_ROLE的结构信息如表4所示。
表4
字段名称 | 字段数据类型 | 是否可以为空值 | 说明 |
ID | number | no | 唯一标识(主键) |
NAME | Varchar2(80) | yes | 角色名称 |
DESCRIPTION | Varchar2(255) | yes | 角色描述 |
GUID | char(36) | yes | GUID |
CREATEDDATE | timestamp(6) | yes | 创建日期 |
MODIFIEDDATE | timestamp(6) | yes | 修改日期 |
READONLY | char(1) | yes | 是否只读 |
DISPLAYNAME | Varchar2(255) | yes | 角色显示名称 |
COORDINATORID | number | yes | 角色协调人的ID |
SHUXING2 | Number(10) | yes | 判断标志 |
SORTORDER | integer | yes | 排序号 |
采用本发明实施例的方法,以及上述例1-例3设置的规则,将上述表APP_ROLE的结构信息映射为域对象类,该域对象类如下所示:
public class AppRole implementsjava.io.Serializable //AppRole为映射的域对象类的名称{ 定义构造函数,代码部分省略
private long id;//根据表的结构信息映射的私有数据
private String name;
将表的结构信息映射为私有数据,代码省略
针对每个私有数据均分别设置获取数据和设置数据的外部接口,代码省略。
}
其中,在将至少一个表的结构信息映射为数据访问类文件时,针对上述至少一个表定义数据访问类,基于该至少一个表的结构信息生成数据访问类包含的函数,通过函数自动生成进行数据操作的结构化查询语言(Structured QueryLanguage,SQL),实现数据操作。
例5,将数据访问类的命名规则设置为由相对应的域对象类的名称加上Dao组成,针对数据库中的表APP_ROLE,参阅表4所示,采用本发明实施例中的方法将表的结构信息映射为数据访问对象,该数据访问类对象如下所示:
public class AppRoleDao extends BaseDao //与域对象类AppRole相对应的数据访问类AppRoleDao
{
public final static String TABLE_NAME=″APP_ROLE″;//APP_ROLE为表的名称
定义构造函数,包括无参数的构造函数和带数据库连接对象的构造函数,代码部分省略
public AppRole getAppRole(ResultSet rs)throws SQLException//为域对象中的每个私有数据设置具体数据,并返回
{
AppRole obj=new AppRole();
obj.setId(rs.getLong(″ID″));//设置ID的数据
obj.setName(rs.getString(″NAME″));//设置NAME的数据
对每个私有数据进行相同的操作,在设置完成后,返回该对象,具体代码省略
}
public AppRole getAppRole(long id)throws SQLException//通过主键获取表中与主键id相对应的记录,并返回与主键对应的域对象,实现数据查询
{初始化定义省略
sql=″select*from″+TABLE_NAME+″where ID=″+id+″″;生成查询SQL语句,通过执行该SQL语句获取与id相对应的域对象并返回
}
public void insert(AppRole obj)throws Exception//以AppRole域对象作为参数,实现以***方式增加记录的数据操作
{初始定义,为了防止字段名和数据库中的关键字同名,在初始定义中定义字符串变量P,并在P中保存获取的数据库字段修饰符,如双引号,具体代码略
String sql=″insert into″+TABLE_NAME +″(″+P+″ID″+P+″,″+P+″NAME″+P+″,″+P+″DESCRIPTION″+P+″,″+P+″GUID″+P+″,″+P+″CREATEDDATE″+P+″,″+P+″MODIFIEDDATE″+P+″,″+P+″READONLY″+P+″,″+P+″DISPLAYNAME″+P+″,″+P+″COORDINATORID″+P+″,″+P+″SHUXING2″+P+″,″+P+″SORTORDER″+P+″)values(?,?,?,?,?,?,?,?,?,?,?)″;//生成***SQL语句,该SQL语句为:insert into表名(”ID”,”NAME”,”DESCRIPTION”,”GUID”,”CREATEDDATE”,”MODIFIEDDATE”,”READONLY”,”DISPLAYNAME”,”COORDINATORID”,”SHUXING2”,”SORTORDER”)values(?,?,?,?,?,?,?,?,?,?,?)
依次获取的各个私有数据的具体数据,依次对SQL语句中的字段进行赋值,实现***方式增加记录的数据操作
}
public void update(AppRole obj)throws Exception//AppRole域对象作为参数,实现更新记录的数据操作
{
初始定义,为了防止字段名和数据库中的关键字同名,在初始定义中定义字符串变量P,并在P中保存获取的数据库字段修饰符,如双引号,具体代码略
String sql=″update″+TABLE_NAME+″set″+P+″NAME″+P+″=?,″+P+″DESCRIPTION″+P+″=?,″+P+″GUID″+P+″=?,″+P+″CREATEDDATE″+P+″=?,″+P+″MODIFIEDDATE″+P+″=?,″+P+″READONLY″+P+″=?,″+P+″DISPLAYNAME″+P+″=?,″+P+″COORDINATORID″+P+″=?,″+P+″SHUXING2″+P+″=?,″+P+″SORTORDER″+P+″=?where″+P+″ID″+P+″=?″;//生成更新SQL语句
依次获取的各个私有数据的具体数据,依次对SQL语句中的字段进行赋值,实现***方式增加记录的数据操作
}
public void delete(long id)throws SQLException//通过主键删除表中与主键相应的记录,实现删除数据操作
{ 初始定义省略
sql=″delete from″+TABLE_NAME+″where ID=″+id+″″;
生成删除SQL语句,并基于该SQL语句执行删除,具体代码略
}
}
基于上述方法流程,参阅附图2所示,本发明实施例中还提供一种在Java应用中进行数据操作的装置,主要由以下处理单元组成,
第一处理单元201,用于从数据库中获取至少一个表的结构信息;
第二处理单元202,用于将上述至少一个表的结构信息映射为域对象类文件和数据访问类文件;
第三处理单元203,用于在接收到数据操作指示时,基于数据访问类文件包含的函数对域对象类文件进行数据操作。
基于上述技术方案,本发明实施例中,在建立数据库连接后,从数据库中获取表的结构信息,将表的结构信息映射为域对象类文件和数据访问类文件,从而能够将数据库中表的结构信息映射为域对象类文件,即将表的结构转换为源代码的形式,将对数据库中表的数据操作映射为数据访问类文件,将针对表的数据操作转换为源代码的形式,在接收到数据操作指示时,基于数据库访问类文件包含的函数对域对象类文件进行数据操作,从而能够自动获取表中的记录,而无需人工读取数据库中的原始数据,从而提高了对象关系映射的效率和准确率。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (8)
1.一种在Java应用中进行数据操作的方法,其特征在于,包括:
从数据库中获取至少一个表的结构信息;
将所述至少一个表的结构信息映射为域对象类文件和与域对象类文件相对应的数据访问类文件;其中,将所述至少一个表的结构信息映射为域对象类文件,包括:针对所述至少一个表定义域对象类,并在所述域对象类中预设获取数据和设置数据的外部接口;将表的结构信息映射为所述域对象类的私有数据;在将至少一个表的结构信息映射为域对象文件时,首先针对该至少一个表预定义域对象类,包括定义域对象类的命名规则,域对象类私有数据成员的命名规则,数据类型映射规则,构造函数,以及获取数据和设置数据的外部接口;再将表的结构信息映射为域对象类的私有数据;
在接收到数据操作指示时,基于所述数据访问类文件包含的函数对所述域对象类文件进行数据操作。
2.如权利要求1所述的方法,其特征在于,从数据库中获取至少一个表的结构信息,包括:
获取所述至少一个表的主键信息,若存在,则将所述至少一个表的结构信息映射为域对象类文件和数据访问类文件,所述主键信息为所述至少一个表的结构信息中用作唯一标识的字段。
3.如权利要求1所述的方法,其特征在于,将所述至少一个表的结构信息映射为数据访问类文件,包括:
针对所述至少一个表定义数据访问类;
基于所述至少一个表的结构信息生成所述数据访问类包含的函数。
4.如权利要求3所述的方法,其特征在于,所述数据访问类包含的函数至少包括数据的增加函数、删除函数、修改函数和查询函数。
5.一种在Java应用中进行数据操作的装置,其特征在于,包括:
第一处理单元,用于从数据库中获取至少一个表的结构信息;
第二处理单元,用于将所述至少一个表的结构信息映射为域对象类文件和与域对象类文件相对应的数据访问类文件;其中,将所述至少一个表的结构信息映射为域对象类文件,包括:针对所述至少一个表定义域对象类,并在所述域对象类中预设获取数据和设置数据的外部接口;将表的结构信息映射为所述域对象类的私有数据;在将至少一个表的结构信息映射为域对象文件时,首先针对该至少一个表预定义域对象类,包括定义域对象类的命名规则,域对象类私有数据成员的命名规则,数据类型映射规则,构造函数,以及获取数据和设置数据的外部接口;再将表的结构信息映射为域对象类的私有数据;
第三处理单元,用于在接收到数据操作指示时,基于所述数据访问类文件包含的函数对所述域对象类文件进行数据操作。
6.如权利要求5所述的装置,其特征在于,所述第一处理单元从数据库中获取至少一个表的结构信息时,获取所述至少一个表的主键信息,若存在,则将所述至少一个表的结构信息映射为域对象类文件和数据访问类文件,所述主键信息为所述至少一个表的结构信息中用作唯一标识的字段。
7.如权利要求5所述的装置,其特征在于,所述第二处理单元将所述至少一个表的结构信息映射为数据访问类文件,具体为:
针对所述至少一个表定义数据访问类;
基于所述至少一个表的结构信息生成所述数据访问类包含的函数。
8.如权利要求7所述的装置,其特征在于,所述数据访问类包含的函数至少包括数据的增加函数、删除函数、修改函数和查询函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010593313.4A CN102566990B (zh) | 2010-12-09 | 2010-12-09 | 一种在Java应用中进行数据操作的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010593313.4A CN102566990B (zh) | 2010-12-09 | 2010-12-09 | 一种在Java应用中进行数据操作的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102566990A CN102566990A (zh) | 2012-07-11 |
CN102566990B true CN102566990B (zh) | 2015-03-11 |
Family
ID=46412505
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010593313.4A Expired - Fee Related CN102566990B (zh) | 2010-12-09 | 2010-12-09 | 一种在Java应用中进行数据操作的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102566990B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103020318A (zh) * | 2013-01-10 | 2013-04-03 | 北京锐安科技有限公司 | 一种对数据库中数据库表维护的方法 |
CN104765596A (zh) * | 2014-01-08 | 2015-07-08 | 腾讯科技(深圳)有限公司 | 请求处理方法和装置 |
CN103942281B (zh) * | 2014-04-02 | 2017-07-25 | 北京中交兴路车联网科技有限公司 | 一种对持久化存储的对象进行操作的方法及装置 |
CN104199907B (zh) * | 2014-08-28 | 2017-08-25 | 广州华多网络科技有限公司 | ***数据的方法及装置 |
CN106126224A (zh) * | 2016-06-21 | 2016-11-16 | 浪潮软件集团有限公司 | 一种生成程序对象的工具、***和方法 |
CN108388588B (zh) * | 2018-01-30 | 2021-08-31 | 福建星瑞格软件有限公司 | sql语句自动生成工具的数据库函数离线读取方法及*** |
CN109471619A (zh) * | 2018-11-20 | 2019-03-15 | 北京千丁互联科技有限公司 | Mybatis代码生成方法、装置及计算机终端 |
CN109491649A (zh) * | 2018-11-20 | 2019-03-19 | 北京千丁互联科技有限公司 | Dao代码生成方法及计算机终端 |
CN109542453A (zh) * | 2018-11-20 | 2019-03-29 | 北京千丁互联科技有限公司 | 数据库信息识别方法、装置及计算机终端 |
CN111966704A (zh) * | 2020-07-09 | 2020-11-20 | 杭州传化智能制造科技有限公司 | Orm框架实现方法、***、计算机设备和存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101339559A (zh) * | 2008-07-18 | 2009-01-07 | 北京航空航天大学 | 一种数据持久化实现方法 |
CN101819530A (zh) * | 2010-04-30 | 2010-09-01 | 山东中创软件工程股份有限公司 | 一种程序对象生成方法、装置及计算机 |
-
2010
- 2010-12-09 CN CN201010593313.4A patent/CN102566990B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101339559A (zh) * | 2008-07-18 | 2009-01-07 | 北京航空航天大学 | 一种数据持久化实现方法 |
CN101819530A (zh) * | 2010-04-30 | 2010-09-01 | 山东中创软件工程股份有限公司 | 一种程序对象生成方法、装置及计算机 |
Also Published As
Publication number | Publication date |
---|---|
CN102566990A (zh) | 2012-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102566990B (zh) | 一种在Java应用中进行数据操作的方法及装置 | |
CN100557609C (zh) | 一种持久层生成方法及装置 | |
CN100458793C (zh) | 数据访问层Xml格式数据与关系数据间的映射转换方法 | |
US10671575B2 (en) | External system integration into automated attribute discovery | |
CN108052321B (zh) | 一种基于配置信息自动生成区块链智能合约的方法 | |
US6816779B2 (en) | Programmatically computing street intersections using street geometry | |
CN100468396C (zh) | 用于任意数据模型的映射体系结构 | |
US7599948B2 (en) | Object relational mapping layer | |
CN109753537A (zh) | 一种从关系数据到图数据的交互式数据迁移方法 | |
US8190648B1 (en) | Method and system for the storage and use of engineering modeling alternatives with unitized data | |
CN102254029B (zh) | 一种基于视图的数据访问***及其方法 | |
CN102426582B (zh) | 数据操作管理装置和数据操作管理方法 | |
CN103049251B (zh) | 一种数据库持久层装置及数据库操作方法 | |
CN102819609B (zh) | 一种持久化数据模型建模方法 | |
US20080263078A1 (en) | Runtime class database operation | |
US6658356B2 (en) | Programmatically deriving street geometry from address data | |
CN104090958A (zh) | 一种基于领域本体的语义信息检索***及方法 | |
CN104317964A (zh) | 一种基于iBatis的对象关系映射方法及*** | |
US20080294673A1 (en) | Data transfer and storage based on meta-data | |
CN103246753A (zh) | 一种根据数据库结构生成实体元数据模型的方法 | |
CN103927168A (zh) | 一种面向对象的数据模型持久化的方法及装置 | |
CN112800143A (zh) | 一种数据对象的结构和数据对象动态管理的方法 | |
Thalheim | Extended Entity-Relationship Model. | |
CN105550176A (zh) | 一种关系数据库与xml的基本映射方法 | |
CN117076535A (zh) | 企业级声明式领域模型定义及存储模型转换方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150311 Termination date: 20191209 |