CN109491649A - Dao代码生成方法及计算机终端 - Google Patents
Dao代码生成方法及计算机终端 Download PDFInfo
- Publication number
- CN109491649A CN109491649A CN201811385982.5A CN201811385982A CN109491649A CN 109491649 A CN109491649 A CN 109491649A CN 201811385982 A CN201811385982 A CN 201811385982A CN 109491649 A CN109491649 A CN 109491649A
- Authority
- CN
- China
- Prior art keywords
- code
- information
- field
- bean object
- dao
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种Dao代码生成方法及计算机终端,该方法包括:获取数据库中表的概要信息及表中各字段的字段信息,及将概要信息及字段信息转化为Java规范的实体信息;获取数据库当前的会话控制信息;判断会话控制信息中是否有预定方法的操作,若会话控制信息中有预定方法的操作,则根据预定方法的SQL代码、Bean对象的变量和Bean对象的方法名称生成对应的Dao代码。本发明的技术方案,根据表概要信息及各字段的字段信息,转化成与之对应Java规范的实体信息,及根据实体信息生成Dao类常用代码,提高开发工作效率避免开发人员在每个项目中编写相同代码的重复工作,提高开发人员工作效率及代码的统一性。
Description
技术领域
本发明涉及Java开发技术领域,具体而言,涉及一种Dao代码生成方法及计算机终端。
背景技术
随着IT(Internet Technology,互联网技术)行业的飞速发展,开发人员的工作越来越重要,编写代码占用开发人员绝大部分的时间。
在现有的计算机编程语言中,Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程,使用范围越来越广泛。
在现有的Java开发框架中,通常包括展现层、业务逻辑层和数据访问层,如果一个项目中使用到了Mybatis插件,开发人员对一个表进行操作时,既需要编写SQL代码,又要编写Java代码,在Java开发框架的三层结构中,需要编写Service接口、Service实现类、Dao接口、Dao实现类及POJO Java Bean等多个类与方法。如果一个项目的数据库中有10张表,那么按照Java开发框架的三层结构,需要编写至少50个类,每个类中还有不同的方法,在另一个项目中,同样需要编写相同功能的多个类及方法,导致开发人员在不同的项目中,重复编写同样功能的代码,造成开发人员工作效率低下;并且由于不同开发人员的编程风格的不同,导致同一个项目开发出来的代码不规范、不统一,增加代码编译失败的几率。
发明内容
鉴于上述问题,本发明实施例的目的在于提供一种Dao代码生成方法及计算机终端,以解决现有技术的不足。
根据本发明的一个实施方式,提供一种Dao代码生成方法,该方法包括:
获取数据库中表的概要信息及所述表中各字段的字段信息,及将所述概要信息及所述字段信息转化为Java规范的实体信息,其中,所述实体信息包括Bean对象的变量及所述Bean对象的方法名称;
获取所述数据库当前的会话控制信息;
判断所述会话控制信息中是否有预定方法的操作,若所述会话控制信息中有所述预定方法的操作,则根据所述预定方法的SQL代码、所述Bean对象的变量和所述Bean对象的方法名称生成对应的Dao代码。
在上述的Dao代码生成方法中,所述“将所述概要信息及所述字段信息转化为Java规范的实体信息”包括:
对所述概要信息进行解析,并将概要解析信息转换成Java规范的Bean对象;
对所述字段信息进行解析,并将字段解析信息转换为所述Bean对象的变量,然后根据所述Bean对象的变量生成所述Bean对象的方法名称。
在上述的Dao代码生成方法中,所述“根据所述预定方法的SQL代码、所述Bean对象的变量和所述Bean对象的方法名称生成对应的Dao代码”包括:
根据所述Bean对象的变量的类型和所述Bean对象的方法名称创建对应Dao代码的框架;
在所述Dao代码的框架中,针对所述Bean对象的变量调用所述预定方法的SQL代码。
在上述的Dao代码生成方法中,所述预定方法为get方法、add方法或update方法。
在上述的Dao代码生成方法中,所述表的概要信息包括表的名称及表的备注信息;
所述“对所述概要信息进行解析,并将概要解析信息转换成Java规范的Bean对象”包括:
根据预设规则对所述表的名称进行分段,将每一段转化为预定格式的Bean名称,及将所有段的Bean名称组合成Java规范的Bean对象;
将表的备注信息以Java类备注的形式写入所述Bean对象所在类的文件中。
在上述的Dao代码生成方法中,所述表中各字段的字段信息包括各字段的名称及各字段的类型;
所述“对所述字段信息进行解析,并将字段解析信息转换为所述Bean对象的变量,然后根据所述Bean对象的变量生成所述Bean对象的方法名称”包括:
根据预设规则将所述表中每一字段名称进行分段,将该字段的名称的所有段的内容转化为Java规范的Bean对象的变量名称;
根据所述变量名称及所述预定方法的功能描述信息生成所述Bean对象的方法名称。
在上述的Dao代码生成方法中,还包括:
根据所述表的Bean对象分别创建该表在Dao层的接口类和实现类;
在所述Dao层的接口类和实现类中分别加入所述Dao代码。
在上述的Dao代码生成方法中,所述预设规则包括:
若所述表的名称或者表中每一字段的名称中包含下划线时,以所述下划线为分割点,对所述表的名称或者表中每一字段的名称进行分段;
若所述表的名称或者表中每一字段的名称中包含大小写字母时,将每一大写字母及该大写之母之后的所有小写字母分为一段。
根据本发明的另一个实施方式,提供一种代码生成装置,该装置包括:
转化模块,用于获取数据库中表的概要信息及所述表中各字段的字段信息,及将所述概要信息及所述字段信息转化为Java规范的实体信息,其中,所述实体信息包括Bean对象的变量及所述Bean对象的方法名称;
获取模块,用于获取所述数据库当前的会话控制信息;
判断模块,用于判断所述会话控制信息中是否有预定方法的操作;
生成模块,若所述会话控制信息中有所述预定方法的操作,所述生成模块用于根据所述预定方法的SQL代码、所述Bean对象的变量和所述Bean对象的方法名称生成对应的Dao代码。
根据本发明的又一个实施方式,提供一种计算机终端,所述计算机终端包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述计算机终端执行上述的Dao代码生成方法。
根据本发明的再一个实施方式,提供一种计算机可读存储介质,其存储有上述的计算机终端中所使用的所述计算机程序。
本公开的实施例提供的技术方案可以包括如下有益效果:
本发明中一种Dao代码生成方法及计算机终端,将数据库中表的概要信息及表中各字段的字段信息转化为Java规范的实体信息,根据实体信息自动并快速生成预定方法的Service代码,避免开发人员在每个项目中编写相同代码的重复工作,提高开发人员工作效率;避免由于开发人员编程风格不同导致的代码不统一的问题,提高Service代码的规范性及统一性,提高Service代码编译的成功率。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对本发明保护范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本发明实施例提供的一种Java开发框架和数据库交互的结构示意图。
图2示出了本发明实施例提供的一种Dao代码生成方法的流程示意图。
图3示出了本发明实施例提供的另一种Dao代码生成方法的流程示意图。
图4示出了本发明实施例提供的一种代码生成方法的流程示意图。
图5示出了本发明实施例提供的一种数据抓取识别方法的流程示意图。
图6示出了本发明实施例提供的另一种数据抓取识别方法的流程示意图。
图7示出了本发明实施例提供的一种根据预设规则对名称进行分段的流程示意图。
图8示出了本发明实施例提供的一种Service代码生成方法的流程示意图。
图9示出了本发明实施例提供的另一种Service代码生成方法的流程示意图。
图10示出了本发明实施例提供的一种Mybatis代码生成方法的流程示意图。
图11示出了本发明实施例提供的另一种Mybatis代码生成方法的流程示意图。
图12示出了本发明实施例提供的一种Dao代码生成装置的结构示意图。
主要元件符号说明:
10-Java开发框架;11-展现层;12-业务逻辑层;13-数据访问层;14-Mybatis SQL层;15-数据库;
100-Dao代码生成装置;110-转化模块;120-获取模块;130-判断模块;140-生成模块。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
如图1所示,为本发明实施例提供的一种Java开发框架和数据库交互的结构示意图。该Java开发框架10分为展现层11、业务逻辑层12、数据访问层13及Mybatis SQL层。
所示展现层11通常用来处理和控制数据请求和页面跳转等。
所述业务逻辑层12用于生成Service代码,所述Service代码包括业务接口类(例如IXX Service类,其中,XX可为不同业务的名称)及业务服务类(例如XX Service类,其中,XX可为不同业务的名称)。所述业务接口类和所述业务服务类中均可包含get函数、getList函数、add函数、addSelective函数、update函数、updateSelective函数、delete函数及getCount函数等。
其中,所述get函数用于获取数据库中表的实体信息,例如,表的名称、表的备注信息、表中各字段的名称、各字段的类型、各字段的备注及各字段的主键关系等。
getList函数用于获取数据库中表的实体信息列表。
add函数用于向所述数据库中表内添加实体信息。
addSelective函数用于根据待添加的实体信息,判断该实体信息是否为空,若实体信息为空则进行添加,若实体信息为空不进行添加。
update函数用于更新数据库中表的实体信息。
updateSelective函数用于选择性更新数据库中表的实体信息。
Delete函数用于删除数据库中表的实体信息。
getCount函数用于统计数据中表内实体信息的总数。
业务逻辑层12在接收到展现层11发送的请求时,调用生成的Service代码执行该请求对应的操作。
所述数据访问层13用于生成Dao代码,所述Dao代码包括服务接口类(例如XXIDao.java类,其中,XX可为不同实体信息的名称)及服务实现类(例如XXDaoImp1.java类,其中,XX可为不同实体信息的名称)。所述服务接口类和所述服务实现类中均可包含get函数、add函数及update函数等。
Dao(Data access object,数据访问对象)是一个面向对象的数据库接口,所述数据访问层13在接收到所述业务逻辑层12发送的请求时,调用生成的Dao代码实现与数据库之间的连接,以执行该请求对应的操作。
Mybatis SQL层14用于生成Mybatis代码,所述Mybatis代码中包括get函数、add函数及update函数等。
Mybatis SQL层14支持普通SQL查询、存储过程以及高级映射,根据数据访问层13发送的请求直接调用生成的Mybatis代码,该Mybatis代码中可直接调用会话控制信息(Session)中的SQL语句,对数据库15进行处理以执行该请求对应的操作。
所述数据库15用于存储表的实体信息。所述数据库15可以为关系型数据库,例如MySQL数据库、Oracal数据库等。
如图2所示,为本发明实施例提供的一种Dao代码生成方法的流程示意图。该Dao代码生成方法应用于Java开发框架中。
该Dao代码生成方法包括如下步骤:
在步骤S610中,获取数据库中表的概要信息及表中各字段的字段信息,及将概要信息及概要信息转化为Java规范的实体信息。
在步骤S620中,获取数据库当前的会话控制信息。
具体地,通过JDBC技术获取数据库当前的SQLSession(SQL会话控制信息)的所有内容。
在步骤S630中,判断会话控制信息中是否有预定方法的操作。
若所述会话控制信息中有预定方法的操作的记录,前进至步骤S640;若所述会话控制信息中没有预定方法的操作的记录,前进至步骤S650。
在步骤S640中,根据预定方法的SQL代码、Bean对象的变量和Bean对象的方法名称生成对应的Dao代码。
具体地,所述“根据预定方法的SQL代码、Bean对象的变量和Bean对象的方法名称生成对应的Dao代码”包括:
根据所述Bean对象的变量的类型和所述Bean对象的方法名称创建对应Dao代码的方法;在所述方法中,针对所述Bean对象的变量调用所述预定方法的SQL代码。
在步骤S640中,返回空信息。
如图3所示,为本发明实施例提出的另一种Dao代码生成方法的流程示意图。该Dao代码生成方法包括如下步骤:
在步骤S710中,获取数据库中表的概要信息及表中各字段的字段信息,及将概要信息及概要信息转化为Java规范的实体信息。
在步骤S720中,根据表的Bean对象分别创建该表在Dao层的接口类和实现类。
具体地,Dao层(即生成Dao代码的数据访问层13)是连接层,向上为生成Service代码的业务逻辑层12提供服务方法的实现,向下为Mybatis SQL层14提供Service层(即生成Service代码的业务逻辑层12)和Mybatis SQL层14之间的连接。
在生成Dao代码的数据访问层13中,又分为服务接口层和服务实现层,在服务接口层包括接口类,在服务实现层包括实现类。每一类中均可包括所有预定方法的Java代码。
在步骤S730中,获取数据库当前的会话控制信息。
在步骤S740中,判断会话控制信息中是否有预定方法的操作。
若所述会话控制信息中有预定方法的操作的记录,前进至步骤S750;若所述会话控制信息中没有预定方法的操作的记录,前进至步骤S760。
在步骤S750中,获取预定方法的操作对应的SQL语句。
若所述会话控制信息中有预定方法的操作的记录,获取该预定方法的操作的记录部分对应的SQL语句,以供后续调用。
在步骤S760中,返回空信息。
在步骤S770中,根据Bean对象的变量的类型和Bean对象的方法名称创建对应Dao代码的框架。
具体地,将Bean对象中变量的类型作为该方法的类型,根据Bean对象中该变量对应的方法名称创建该方法名称对应的Dao代码的方法的框架。
例如,String getA()
{方法内容}
其中,String为Bean对象中变量A的类型,getA为针对变量A的get函数的名称,框架内容为该get方法的具体代码,可从数据库中的会话控制信息中进行获取,框架内容的方法为SQL语句,可直接进行调用。
在步骤S780中,在Dao代码的框架中,针对Bean对象的变量调用预定方法的SQL代码以生成该预定方法对应的Dao代码。
具体地,在Dao代码的框架的内容部分,以Bean对象的变量为参数,调用上述获取的预定方法的SQL代码,执行该预定方法针对Bean对象的变量的预设操作。
例如,Integer getA(String S)
{String Str=getsqlsession().select(A);
return Str;}
其中,上述自动生成了一个String类型的getA方法的Dao代码,代码中,定义一个字符型变量Str作为返回值,该Str的值为针对Bean对象的变量A执行get操作后的结果。getsqlsession()方法为获取会话控制信息的方法,select(A)为查询Bean对象变量A的SQL语句。
在步骤S790中,在Dao层的接口类和实现类中分别加入该预定方法对应的Dao代码。
具体地,在接口类和实现类中分别加入该预定方法对应的Dao代码,以使该Dao代码执行对应的预定方法的操作。
图4示出了本发明实施例提供的一种代码生成方法的流程示意图。该代码生成方法应用于Java开发框架中。
该代码生成方法包括如下步骤:
在步骤S1100中,获取数据库中表的概要信息及表中各字段的字段信息,及将概要信息及字段信息转化为Java规范的实体信息。
进一步地,如图5所示,所述“获取数据库中表的概要信息及表中各字段的字段信息,将概要信息及字段信息转化为Java规范的实体信息”包括:
在步骤S110中,获取数据库中表的概要信息及表中各字段的字段信息。
具体地,通过JDBC获取数据中表的概要信息及表中各字段的字段信息。
具体地,所述JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,通过JDBC可以为多种关系数据库提供统一访问接口,通过该接口获取数据中表的概要信息及表中各字段的字段信息。
在步骤S120中,对概要信息进行解析,并将概要解析信息转换成Java规范的Bean对象。
具体地,所述表的概要信息包括表的名称及表的备注信息。将所述表的概要信息进行分段,将每一段的内容分别进行转化,及将所有段的内容的转化结果组合成为Java规范的Bean对象,以为后续代码生成的操作提供统一的、规范的Bean对象。
在步骤S130中,对字段信息进行解析,并将字段解析信息转换为Bean对象的变量,然后将Bean对象的变量根据第一预设规则转换成Bean对象的方法名称,以进行该预定方法的代码的自动生成。
具体地,所述字段信息包括字段名称、字段类型、字段备注信息及字段主键关系等。
对字段名称进行分段,将每一段的内容分别进行转化,及将所有段的内容的转化结果组合成为Java规范的Bean对象的变量名称;将所述字段类型转换成为Java规范的类型;根据Bean对象的变量名称及Bean对象的方法名称生成Java规范的该预定方法的名称。
进一步地,所述预定方法包括set方法及get方法。
进一步地,如图6所示,所述“获取数据库中表的概要信息及表中各字段的字段信息,将概要信息及字段信息转化为Java规范的实体信息”还包括:
在步骤S210中,通过JDBC调用SQL查询语句,根据查询结果获取数据库中表的概要信息及表中各字段的字段信息。
具体地,通过JDBC技术调用SQL查询语句对数据库中表的实体信息进行查询,比如,在Java API代码中调用SQL查询语句分别对数据库的表的概要信息及表的各字段的字段信息进行查询,并获取SQL查询语句查询的结果。
例如,所述SQL查询语句包括:
SELECT Name from sysobjects where xtype='u'and status>=0查询表的名称
SELECT Name from syscolumns where id=object_id('表名')查询表中所有字段,等等。
在步骤S220中,根据预设规则对表的名称进行分段,将每一段转化为预定格式的Bean名称,及将所有段的Bean名称组合成Java规范的Bean对象。
进一步地,如图7所示,所述预设规则包括:
在步骤S310中,获取表的名称或者表中每一字段的名称。
具体地,在编程语言中,所述表的名称或者所述字段的名称通常可由字母、数字或下划线组成,比如my_name、MyName等。
在步骤S320中,判断所述名称中是否有下划线或者大写字母。
具体地,若指定条件A为所述表的名称或者表中每一字段的名称中有下划线的情况,条件B为所述表的名称或者表中每一字段的名称中有大写字母的情况。
若至少条件A成立,包括两种情况:仅条件A成立或者条件A、条件B均成立,前进至步骤S330;若条件A、条件B均不成立,前进至步骤S360;若仅条件B成立,前进至步骤S340。
在步骤S330中,以下划线为分割点,对表的名称或者表中每一字段的名称进行分段。
具体地,在所述表的名称或者表中每一字段的名称中包含下划线,或者所述表的名称或者表中每一字段的名称中同时包含下划线和大写字母时,以下划线为分割点,对所述名称进行分段。
例如,若表的名称或者表中每一字段的名称为a_b_c,以下划线为分割点,可将a_b_c分为a、b、c三段;若表的名称或者表中每一字段的名称为a_bBe_cD,以下划线为分割点,可将a_bBe_cD分为a、bBe、cD三段。
在步骤S340,将每一大写字母及该大写字母之后的所有小写字母分为一段。
具体地,在所述表的名称或者表中每一字段的名称中不包括下划线,包含大写字母时,以大写字母所在位置为分割点,将大写字母及该大写字母之后的所有小写字母划分为一段。
例如,若表的名称或者表中每一字段的名称为AacDef,以大写字母所在位置为分割点,可将AacDef分为Aac、Def两段;若表的名称或者表中每一字段的名称为AacDEf,以大写字母所在位置为分割点,可将AacDEf分为Aac、D、Ef三段。
在步骤S350中,将每一段转化为预定格式类型,及将所有段的内容组合成Java规范的Bean对象或Bean对象的变量。
进一步地,所述预定格式可以为将所有内容均转换为大写字母,还可以为驼峰式书写格式,其中,所述驼峰式书写格式分为小驼峰式格式和大驼峰式格式。
例如,若表的名称或者表中每一字段的名称为a_b_c,以下划线为分割点,将a_b_c分为a、b、c三段,在Java语言中,可将a、b、c的ASCII码值减去32,得到该小写字母对应的大写字母的转化为ASCII码值,得到A、B、C三段转换后的大写格式的内容,并将该三段大写格式的内容A、B、C组合为一Java规范的Bean对象或Bean对象的变量ABC。
又如,若表的名称或者表中每一字段的名称为AacDef,以大写字母所在位置为分割点,可将AacDef分为Aac、Def两段,可将Aac、Def两段内容分别转化为小驼峰式格式aacDef或者大驼峰式格式AacDef。
在步骤S360中,将名称转化为Java规范的Bean对象或者Bean对象的变量。
若所述表的名称即不包括下划线,又不包括大写字母时,可将所述名称整体转化为上述预定格式的Java规范的Bean对象
若所述表中每一字段的名称即不包括下划线,又不包括大写字母时,可将所述名称整体转化为上述预定格式的Java规范的Bean对象的变量。
在步骤S230中,将表的备注信息以Java类备注的形式写入Bean对象所在类的文件中。
具体地,在代码中添加注释有利于提高代码的可读性,例如,可根据Java中代码注释的格式将所述备注信息写入Bean对象所在类的文件中的注释部分。
例如,添加单行注释的格式://备注信息;添加多行注释的格式:/*备注信息*/。
在步骤S240中,根据预设规则将表中每一字段的名称进行分段,将该字段的名称的所有段内容转化为预定格式的Bean对象的变量名称。
在步骤S250中,将表中各字段的类型转换成对应的Java规范类型。
其中,所述类型可以包括整型、字符型、浮点型等。
具体地,在根据数据库中表的实体信息自动生成代码之前,还需将表的实体信息均换换成统一规范的Java规范的实体信息,以便于后续生成Service代码、Dao代码及Mybatis代码时直接进行调用。
例如,若表中各字段的类型为CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOG、BLOG、MEDIUM BLOG、LONG BLOG等字符型,可将所述字符型转换为Java开发平台中的Java String类型;
若表中各字段的类型为BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、INT、BIGINT等整型,可将所述整型转换为Java开发平台中的Java Integer类型;
若表中各字段的类型为FLOAT、DOUBLE、DECIMAL等浮点型,可将所述浮点型转换为Java开发平台中的Java Double类型;
若表中各字段的类型为DATA等数据日期类型,可将所述数据日期类型转换为Java开发平台中的Java Date类型。
在步骤S260中,将变量名称根据第一预设规则转换成Bean对象的方法名称,以根据变量名称、Java规范类型及Bean对象的方法名称自动生成预定方法的代码。
进一步地,所述第一预设规则包括:
在所述变量的名称之前添加所述预定方法的功能描述信息,将所述预定方法的功能描述信息及所述变量作为所述Bean对象的方法名称。
具体地,将所述Bean对象的方法名称格式定义为:预定方法的功能描述信息+Bean对象的变量的名称。
例如,若预定方法为get方法,针对Bean对象的每一变量,可统一设置预定方法的名称为getA、getB等等,其中,A、B等等为Bean对象中的变量。
在步骤S1200中,根据预定方法的Java代码、Bean对象的变量和Bean对象的方法名称生成对应的Service代码。
如图8所示,为本发明实施例提出的一种Service代码生成方法的流程示意图。
该Service代码生成方法包括如下步骤:
在步骤S410中,获取数据库中表的概要信息及表中各字段的字段信息,及将概要信息及字段信息转化为Java规范的实体信息。
在步骤S420中,判断Service层所在的Java开发框架中是否有预定方法的Java代码。
具体地,所述Service层为生成Service代码的业务逻辑层12。
在Java开发平台中,通常会把一些常用的函数放到一个文件里,例如库函数,库函数存放在函数库中的函数。库函数具有明确的功能、入口调用参数和返回值。在使用该库函数时,可直接通过入口调用参数直接调用该函数,并返回一个结果(即返回值)。
判断Java开发框架中是否预先存储有所述预定方法的Java代码,若Java开发框架中预先存储有所述预定方法的Java代码,前进至步骤S430;若Java开发框架中没有预先存储所述预定方法的Java代码,前进至步骤S440。
其中,所述预定方法可包括get系列方法(get函数、getList函数)、add(add函数、addSelective函数)系列方法、delete方法及update方法等。
在步骤S430中,根据预定方法的Java代码、Bean对象的变量和Bean对象的方法名称生成对应的Service代码。
具体地,所述“根据所述预定方法的Java代码、所述Bean对象的变量和所述Bean对象的方法名称生成对应的Service代码”包括:
根据所述Bean对象的变量的类型和所述Bean对象的方法名称创建对应Service代码的方法;在所述方法中,针对所述Bean对象的变量调用所述预定方法的Java代码。
在步骤S440中,返回空信息。
若Java开发框架中没有预先存储所述预定方法的Java代码,则执行该预定方法的Service代码的自动生成。
如图9所示,为本发明实施例提供的另一种Dao代码生成方法的流程示意图,该Dao代码生成方法包括如下步骤:
在步骤S510中,获取数据库中表的概要信息及表中各字段的字段信息,及将概要信息及字段信息转化为Java规范的实体信息。
在步骤S520中,根据表的Bean对象分别创建该表在Service层的接口类和实现类。
具体地,Service层(即生成Service代码的业务逻辑层12)是承上启下的作用,向上为展现层11提供服务方法的实现,向下为Dao层(即生成Dao代码的数据访问层13)提供所述数据访问层13和展现层11之间的连接。
在生成Service代码的业务逻辑层12中,又分为服务接口层和服务实现层,在服务接口层包括接口类,在服务实现层包括实现类。每一类中均可包括所有预定方法的Java代码。
在步骤S530中,判断Service层所在的Java开发框架中是否有预定方法的Java代码。
判断Java开发框架中是否预先存储有所述预定方法的Java代码,若Java开发框架中预先存储有所述预定方法的Java代码,前进至步骤S540;若Java开发框架中没有预先存储所述预定方法的Java代码,前进至步骤S550。
其中,所述预定方法可包括get系列方法(get函数、getList函数)、add(add函数、addSelective函数)系列方法、delete方法及update方法等。
在步骤S540中,根据Bean对象的变量的类型和Bean对象的方法名称创建对应Service代码的框架。
具体地,将Bean对象中变量的类型作为该方法的类型,根据Bean对象中该变量对应的方法名称创建该方法名称对应的Java代码的方法的框架。
例如,Integer getA()
{方法内容}
其中,Integer为Bean对象中变量A的类型,getA为针对变量A的get函数的名称,Service代码的框架内容为该get方法的具体代码,可在Java开发框架中预先进行存储,该get方法的具体代码在使用时可通过入口调用参数直接调用,该入口调用参数的类型同样为Integer类型,返回值为Integer类型。
在步骤S550中,返回空信息。
在步骤S560中,在Service代码的框架中,针对Bean对象的变量调用预定方法的Java代码以生成该预定方法对应的Service代码。
具体地,在Service代码的框架的内容部分,以Bean对象的变量为参数,调用预定方法的Java代码,获取该预定方法针对Bean对象的变量的预设操作。
例如,Integer getA(String S)
{String Str=get(A);
return Str;}
其中,上述自动生成了一个Integer类型的getA方法的Service代码,代码中,定义一个字符型变量Str作为返回值,该Str的值为针对Bean对象的变量A执行get操作后的结果。
在步骤S570中,在Service层的接口类和实现类中分别加入该预定方法对应的Service代码。
具体地,在接口类和实现类中分别加入该预定方法对应的Service代码,以使
该Service代码执行对应的预定方法的操作。
在步骤S1300中,根据预定方法的SQL代码、Bean对象的变量和Bean对象的方法名称生成对应的Dao代码。
在步骤S1400中,根据预定方法的SQL语句及实体信息对应的属性值生成对应的Mybatis代码。
进一步地,如图10所示,所示“根据预定方法的SQL语句及实体信息对应的属性值生成对应的Mybatis代码”包括:
在步骤S810中,获取数据库中表的概要信息及所述表中各字段的字段信息,及将概要信息及字段信息转化为Java规范的实体信息。
在步骤S820中,根据预设对应关系确定实体信息对应的属性值。
具体地,通过该预设对应关系将所述实体信息转换为SQL规范的属性值。
例如,所述对应关系可以通过表格进行描述。
实体信息 | 属性值 | 实体信息 | 属性值 |
menu_name | menuName | type | type |
parent_id | parentId | …… | …… |
上述表中,若实体信息为“menu_name”,其对应的属性值为“menuName”;若实体信息被设置的为主键,其实体信息名称为“parent_id”,对应的属性值为“parentId”;若实体信息为“type”,其对应的属性值为“type”,等等。
在步骤S830中,获取预定方法的SQL语句。
进一步地,通过JDBC技术获取所述数据库的会话控制信息,判断该会话控制信息中是否有预定方法对应的操作,若会话控制信息中有预定方法对应的操作的记录,获取该预定方法对应的SQL语句。
在步骤S840中,根据属性值及预定方法的SQL语句生成对应的Mybatis代码。
具体地,所述“根据属性值及预定方法的SQL语句生成对应的Mybatis代码”包括:
以所述属性值为参数,调用所述预定方法的SQL语句生成该预定方法对应的Mybatis代码。
进一步地,如图11所示,所示“根据预定方法的SQL语句及实体信息对应的属性值生成对应的Mybatis代码”包括:
在步骤S910中,获取数据库中表的概要信息及所述表中各字段的字段信息,及将概要信息及字段信息转化为Java规范的实体信息。
在步骤S920中,根据预设对应关系确定实体信息对应的属性值。
在步骤S930中,根据Bean对象生成Mybatis配置文件。
Mybatis层(即图2中Mybatis SQL层14)为Java开发框架和数据库之间连接的重要环节,Mybatis层向上为Dao层提供服务方法实现,向下为数据提供连接操作的功能。
在步骤S940中,获取数据库当前的会话控制信息。
在步骤S950中,判断会话控制信息中是否有预定方法的操作。
若会话控制信息中有预定方法的操作记录,前进至步骤S960;若会话控制信息中没有预定方法的操作记录,前进至步骤S960a。
在步骤S960中,获取预定方法的SQL语句。
具体地,若会话控制信息中有预定方法的操作记录,在该记录中获取该预定方法对应的SQL语句。
在步骤S960a中,返回空信息。
在步骤S970中,根据Bean对象的方法名称创建对应Mybatis代码的框架。
具体地,根据Bean对象中该变量对应的方法名称创建该方法名称对应的Dao代码的方法的框架。
例如,<select id=”get”...>
方法内容
</select>
在步骤S980中,在Mybatis代码的框架中,以属性值为参数,调用预定方法的SQL语句生成该预定方法对应的Mybatis代码。
具体地,在Mybatis代码的框架的内容部分,以Bean对象的变量为参数,调用上述获取的预定方法的SQL代码,执行该预定方法针对Bean对象的变量的预设操作。
在步骤S990中,在Mybatis配置文件中添加预设对应关系表、Bean对象的变量及Mybatis代码。
具体地,在Mybatis配置文件中加入该对应关系表,Bean对象的变量及上述生成的Mybatis代码,以使Dao层通过该Mybatis配置文件与数据库进行连接。
实施例2
图12示出了本发明实施例提供的一种Dao代码生成装置的结构示意图。该Dao代码生成装置100应用于Java开发框架中。
代码生成装置100包括转化模块110、获取模块120、判断模块130及生成模块140。
转化模块110,用于获取数据库中表的概要信息及所述表中各字段的字段信息,及将所述概要信息及所述字段信息转化为Java规范的实体信息,其中,所述实体信息包括Bean对象的变量及所述Bean对象的方法名称。
获取模块120,用于获取所述数据库当前的会话控制信息。
判断模块130,用于判断所述会话控制信息中是否有预定方法的操作。
生成模块140,若所述会话控制信息中有所述预定方法的操作,所述生成模块140用于根据所述预定方法的SQL代码、所述Bean对象的变量和所述Bean对象的方法名称生成对应的Dao代码。
本发明还提供了一种计算机终端,该计算机终端可以包括个人电脑、计算机、服务器、平板电脑等。所述计算机终端包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述计算机终端执行上述的Dao代码生成方法或Dao代码生成装置中各个模块的功能。
存储器可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据计算机设备的使用所创建的数据。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
本实施例还提供了一种计算机存储介质,用于储存上述计算机终端中使用的所述计算机程序。
至此,本发明提供了一种Dao代码生成方法及计算机终端,实时抓取表的概要信息、表中各字段的字段信息,并对概要信息及字段信息进行解析并识别,生成与之对应的Java规范的Bean对象,生成的代码统一、风格一致,提高开发工作效率;配制JDBC类型不一致,对应的数据库类型也不一样,减少了开发工程师学习各种类型的数据库技术,减少学习成本;在Java开发框架的eclispe开发工具上,根据Bean对象自动并快速生成预定方法的Service代码、Dao代码及Mybatis代码,避免开发人员在每个项目中编写相同代码的重复工作,提高开发人员工作效率;避免由于开发人员编程风格不同导致的代码不统一的问题,提高Java代码的规范性及统一性,提高Java代码编译的成功率。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和结构图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,结构图和/或流程图中的每个方框、以及结构图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块或单元可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或更多个模块集成形成一个独立的部分。所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是智能手机、个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。
Claims (10)
1.一种Dao代码生成方法,其特征在于,该方法包括:
获取数据库中表的概要信息及所述表中各字段的字段信息,及将所述概要信息及所述字段信息转化为Java规范的实体信息,其中,所述实体信息包括Bean对象的变量及所述Bean对象的方法名称;
获取所述数据库当前的会话控制信息;
判断所述会话控制信息中是否有预定方法的操作,若所述会话控制信息中有所述预定方法的操作,则根据所述预定方法的SQL代码、所述Bean对象的变量和所述Bean对象的方法名称生成对应的Dao代码。
2.根据权利要求1所述的Dao代码生成方法,其特征在于,所述“将所述概要信息及所述字段信息转化为Java规范的实体信息”包括:
对所述概要信息进行解析,并将概要解析信息转换成Java规范的Bean对象;
对所述字段信息进行解析,并将字段解析信息转换为所述Bean对象的变量,然后根据所述Bean对象的变量生成所述Bean对象的方法名称。
3.根据权利要求1所述的Dao代码生成方法,其特征在于,所述“根据所述预定方法的SQL代码、所述Bean对象的变量和所述Bean对象的方法名称生成对应的Dao代码”包括:
根据所述Bean对象的变量的类型和所述Bean对象的方法名称创建对应Dao代码的框架;
在所述Dao代码的框架中,针对所述Bean对象的变量调用所述预定方法的SQL代码。
4.根据权利要求1所述的Dao代码生成方法,其特征在于,所述预定方法为get方法、add方法或update方法。
5.根据权利要求2所述的Dao代码生成方法,其特征在于,所述概要信息包括表的名称及表的备注信息;
所述“对所述概要信息进行解析,并将概要解析信息转换成Java规范的Bean对象”包括:
根据预设规则对所述表的名称进行分段,将每一段转化为预定格式的Bean名称,及将所有段的Bean名称组合成Java规范的Bean对象;
将表的备注信息以Java类备注的形式写入所述Bean对象所在类的文件中。
6.根据权利要求5所述的Dao代码生成方法,其特征在于,所述表中各字段的字段信息包括各字段的名称及各字段的类型;
所述“对所述字段信息进行解析,并将字段解析信息转换为所述Bean对象的变量,然后根据所述Bean对象的变量生成所述Bean对象的方法名称”包括:
根据预设规则将所述表中每一字段名称进行分段,将该字段名称的所有段的内容转化为Java规范的Bean对象的变量名称;
根据所述变量名称及所述预定方法的功能描述信息生成所述Bean对象的方法名称。
7.根据权利要求2所述的Dao代码生成方法,其特征在于,还包括:
根据所述表的Bean对象分别创建该表在Dao层的接口类和实现类;
在所述Dao层的接口类和实现类中分别加入所述Dao代码。
8.根据权利要求5或6所述的Dao代码生成方法,其特征在于,所述预设规则包括:
若所述表的名称或者表中每一字段名称中包含下划线时,以所述下划线为分割点,对所述表的名称或者表中每一字段名称进行分段;
若所述表的名称或者表中每一字段名称中包含大小写字母时,将每一大写字母及该大写之母之后的所有小写字母分为一段。
9.一种计算机终端,其特征在于,所述计算机终端包括存储器以及处理器,所述存储器用于存储计算机程序,所述处理器运行所述计算机程序以使所述计算机终端执行权利要求1至8任一项所述的Dao代码生成方法。
10.一种计算机存储介质,其特征在于,其储存有权利要求9所述计算机终端中所用的所述计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811385982.5A CN109491649A (zh) | 2018-11-20 | 2018-11-20 | Dao代码生成方法及计算机终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811385982.5A CN109491649A (zh) | 2018-11-20 | 2018-11-20 | Dao代码生成方法及计算机终端 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109491649A true CN109491649A (zh) | 2019-03-19 |
Family
ID=65697123
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811385982.5A Pending CN109491649A (zh) | 2018-11-20 | 2018-11-20 | Dao代码生成方法及计算机终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109491649A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109947431A (zh) * | 2019-03-28 | 2019-06-28 | 北京字节跳动网络技术有限公司 | 一种代码生成方法、装置、设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102566990A (zh) * | 2010-12-09 | 2012-07-11 | 北大方正集团有限公司 | 一种在Java应用中进行数据操作的方法及装置 |
CN103049251A (zh) * | 2011-10-17 | 2013-04-17 | 中国移动通信集团公司 | 一种数据库持久层装置及数据库操作方法 |
CN103309650A (zh) * | 2012-03-14 | 2013-09-18 | 阿里巴巴集团控股有限公司 | 持久层代码的生成方法和装置 |
CN103631601A (zh) * | 2013-12-10 | 2014-03-12 | 北京中电普华信息技术有限公司 | 一种代码生成方法和装置 |
CN105760168A (zh) * | 2016-02-23 | 2016-07-13 | 深圳竹信科技有限公司 | 一种代码文件自动生成方法及系统 |
CN105824619A (zh) * | 2016-03-10 | 2016-08-03 | 四川交通职业技术学院 | 基于Spring MVC、Apache Shiro、MyBatis框架整合的代码生成器 |
CN107908518A (zh) * | 2017-06-29 | 2018-04-13 | 平安科技(深圳)有限公司 | 数据库性能监测方法、装置、存储介质和计算机设备 |
CN108416035A (zh) * | 2018-03-12 | 2018-08-17 | 四川长虹电器股份有限公司 | 一种基于disconf的数据库映射文件统一管理方法 |
-
2018
- 2018-11-20 CN CN201811385982.5A patent/CN109491649A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102566990A (zh) * | 2010-12-09 | 2012-07-11 | 北大方正集团有限公司 | 一种在Java应用中进行数据操作的方法及装置 |
CN103049251A (zh) * | 2011-10-17 | 2013-04-17 | 中国移动通信集团公司 | 一种数据库持久层装置及数据库操作方法 |
CN103309650A (zh) * | 2012-03-14 | 2013-09-18 | 阿里巴巴集团控股有限公司 | 持久层代码的生成方法和装置 |
CN103631601A (zh) * | 2013-12-10 | 2014-03-12 | 北京中电普华信息技术有限公司 | 一种代码生成方法和装置 |
CN105760168A (zh) * | 2016-02-23 | 2016-07-13 | 深圳竹信科技有限公司 | 一种代码文件自动生成方法及系统 |
CN105824619A (zh) * | 2016-03-10 | 2016-08-03 | 四川交通职业技术学院 | 基于Spring MVC、Apache Shiro、MyBatis框架整合的代码生成器 |
CN107908518A (zh) * | 2017-06-29 | 2018-04-13 | 平安科技(深圳)有限公司 | 数据库性能监测方法、装置、存储介质和计算机设备 |
CN108416035A (zh) * | 2018-03-12 | 2018-08-17 | 四川长虹电器股份有限公司 | 一种基于disconf的数据库映射文件统一管理方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109947431A (zh) * | 2019-03-28 | 2019-06-28 | 北京字节跳动网络技术有限公司 | 一种代码生成方法、装置、设备及存储介质 |
CN109947431B (zh) * | 2019-03-28 | 2022-09-16 | 北京字节跳动网络技术有限公司 | 一种代码生成方法、装置、设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109471619A (zh) | Mybatis代码生成方法、装置及计算机终端 | |
US8438190B2 (en) | Generating web services from business intelligence queries | |
CN111708539A (zh) | 一种应用程序代码转换方法、装置、电子设备和存储介质 | |
US20080276229A1 (en) | Incremental model refinement and transformation in generating commerce applications using a model driven architecture | |
US9552441B2 (en) | Database mapping of models for reporting tools in model driven development | |
US8701087B2 (en) | System and method of annotating class models | |
JP2000148461A (ja) | ソフトウェアモデル及び既存のソ―スコ―ドを同期化させる方法及びその装置 | |
JP2005521159A (ja) | データ記述言語に対するスキーマ情報の動的生成 | |
CN109542418A (zh) | Service代码生成方法及计算机终端 | |
CN114820881A (zh) | 图片的生成方法、智能终端及其计算机可读存储介质 | |
CN113867694A (zh) | 一种智能生成前端代码的方法和系统 | |
CN106469223A (zh) | 一种兼容ArcGIS的空间及属性数据的统一控制方法和系统 | |
CN109542453A (zh) | 数据库信息识别方法、装置及计算机终端 | |
CN106776779B (zh) | 基于Mac平台的JSON数据生成实体文件的方法 | |
CN113094039B (zh) | 一种基于数据库表的代码自动生成系统 | |
CN113655996A (zh) | 一种基于需求模型的企业级系统生成方法 | |
CN109491649A (zh) | Dao代码生成方法及计算机终端 | |
CN109740138A (zh) | 一种实现思维导图软件中图片文件可编辑的方法 | |
Telea et al. | Visualisation of RDF (S)-based Information | |
CN110347878B (zh) | 一种规则引擎驱动的数据融合方法 | |
CN111782195A (zh) | 一种基于在请求参数上添加注解拼接成sql的查询方法 | |
CN115374764A (zh) | 一种基于用户故事的需求模型自动生成方法及系统 | |
CN112114812B (zh) | 一种应用于工业机器人编程语言的语法检查方法 | |
US8719693B2 (en) | Method for storing localized XML document values | |
CN113934748A (zh) | 混合型sql脚本文件生成方法、执行方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190319 |
|
RJ01 | Rejection of invention patent application after publication |