CN105138326B - 一种基于ibatis实现sql动态配置的方法及系统 - Google Patents
一种基于ibatis实现sql动态配置的方法及系统 Download PDFInfo
- Publication number
- CN105138326B CN105138326B CN201510490546.4A CN201510490546A CN105138326B CN 105138326 B CN105138326 B CN 105138326B CN 201510490546 A CN201510490546 A CN 201510490546A CN 105138326 B CN105138326 B CN 105138326B
- Authority
- CN
- China
- Prior art keywords
- allocation list
- column
- ibatis
- inquired
- table name
- 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.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于ibatis实现sql动态配置的方法及系统。在数据库中建立表名配置表和列配置表;接收查询请求,解析所述查询请求得到场景标识;根据场景标识在数据库中查找对应的表名配置表和列名配置表,得到查询结果;根据在数据库中获取的查询结果生成自定义对象;将调用者传入的where条件的实参封装进自定义对象中,得到键值对;运行时将所述键值对传入预先编写的ibatis配置文件中,生成sql语句。本发明将待查询的数据表名和列名等配置在数据库里,根据场景的不同动态配置查询表、查询列和查询条件,大大降低了开发人员的工作量;在要查询的表和字段发生变化时,只需要修改数据库,而不需要修改java代码和配置文件,减少了开发工作量。
Description
技术领域
本发明涉及sql配置技术领域,尤其涉及一种基于ibatis实现sql动态配置的方法及系统。
背景技术
ibatis是一种“半自动化”的ORM实现,着力于POJO与SQL之间的映射关系。也就是说,ibatis并不会为程序员在运行期自动生成SQL执行。具体的SQL需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定的POJO中。
在某种场景下,ibatis的普通配置并不能满足项目的需求,比如查询的列如果需要通过配置来实现,即同一种场景下,不同的模块查询的列不同,如果还是通过将sql写在配置文件里,那么配置文件就要写很多种情况,大大增加开发人员的工作量,且编写配置文件工作复杂,人工编写大量配置文件,导致出错率上升,开发效率低。
发明内容
本发明所要解决的技术问题是针对现有技术的不足,提供一种基于ibatis实现sql动态配置的方法及系统。
本发明解决上述技术问题的技术方案如下:一种基于ibatis实现sql动态配置的方法,包括如下步骤:
步骤1,在数据库中建立表名配置表和列配置表,所述表名配置表用于配置场景要查询的数据表的表名,所述列配置表用于配置要查询的数据表中的列;
步骤2,接收查询请求,解析所述查询请求得到场景标识;
步骤3,根据场景标识在数据库中查找对应的表名配置表和列配置表,得到查询结果;
步骤4,根据在数据库中获取的查询结果生成自定义对象;
步骤5,将调用者传入的where条件的实参封装进自定义对象中,得到键值对;
步骤6,运行时将所述键值对传入预先编写的ibatis配置文件中,生成sql语句。
本发明的有益效果是:本发明将待查询的数据表名和列名等所有需要动态实现的都配置在数据库里,只保留一个配置文件,根据场景的不同动态配置查询表、查询列和查询条件,可适用于不同场景;本发明大大降低了开发人员的工作量,避免开发人员针对不同场景编写大量配置文件的问题,进而降低了出错率,提高了开发效率;在要查询的表和字段发生变化时,只需要修改数据库,而不需要修改java代码和配置文件,减少了开发工作量。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述表名配置表存储场景标识、要查询的表名和查询列的where条件。
采用上述进一步方案的有益效果:将需要动态实现的都配置在数据库里,当这些变量需要改变时,修改数据库中的数据即可,不必修改配置文件和java代码。
进一步,所述列配置表存储场景标识、要查询的表名和要查询的表的字段名。
采用上述进一步方案的有益效果:将需要动态实现的都配置在数据库里,当这些变量需要改变时,修改数据库中的数据即可,不必修改配置文件和java代码;且将列信息单独存储在一张表中,使表名配置表和列配置表都不冗余,可提高查询速度。
进一步,还包括编写java适配器类,在接收到查询请求时,解析所述查询请求得到场景标识。
进一步,还包括编写java调用类,在运行时将所述键值对传入预先编写的ibatis配置文件中,生成sql语句。
本发明解决上述技术问题的技术方案如下:一种基于ibatis实现sql动态配置的系统,包括配置模块、解析模块、查询模块,对象生成模块、封装模块和调用模块;
所述配置模块,其用于在数据库中建立表名配置表和列配置表,所述表名配置表用于配置场景要查询的数据表的表名,所述列配置表用于配置要查询的数据表中的列;
所述解析模块,其用于接收查询请求,解析所述查询请求得到场景标识;
所述查询模块,其用于根据场景标识在数据库中查找对应的表名配置表和列配置表,得到查询结果;
所述对象生成模块,其用于根据在数据库中获取的查询结果生成自定义对象;
所述封装模块,其用于将调用者传入的where条件的实参封装进自定义对象中,得到键值对;
所述调用模块,其用于运行时将所述键值对传入预先编写的ibatis配置文件中,生成sql语句。
在上述技术方案的基础上,本发明还可以做如下改进。
进一步,所述表名配置表存储场景标识、要查询的表名和查询列的where条件。
进一步,所述列配置表存储场景标识、要查询的表名和要查询的表的字段名。
进一步,所述解析模块中预先编写有java适配器类,在接收到查询请求时,解析所述查询请求得到场景标识。
进一步,所述调用模块预先编写有java调用类,在运行时将所述键值对传入预先编写的ibatis配置文件中,生成sql语句。
附图说明
图1为本发明所述一种基于ibatis实现sql动态配置的方法流程图;
图2为本发明所述一种基于ibatis实现sql动态配置的系统框图。
附图中,各标号所代表的部件列表如下:
1、配置模块,2、解析模块,3、查询模块,4,对象生成模块,5、封装模块,6、调用模块。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
如图1所示,一种基于ibatis实现sql动态配置的方法,包括如下步骤:
步骤1,在数据库中建立表名配置表和列配置表,所述表名配置表用于配置场景要查询的数据表的表名,所述列配置表用于配置要查询的数据表中的列;
步骤2,接收查询请求,解析所述查询请求得到场景标识;
步骤3,根据场景标识在数据库中查找对应的表名配置表和列配置表,得到查询结果;
步骤4,根据在数据库中获取的查询结果生成自定义对象;
步骤5,将调用者传入的where条件的实参封装进自定义对象中,得到键值对;
步骤6,运行时将所述键值对传入预先编写的ibatis配置文件中,生成sql语句。
所述表名配置表存储场景标识、要查询的表名和查询列的where条件,其中入参以?代替。所述列配置表存储场景标识、要查询的表名和要查询的表的字段名。将需要动态实现的都配置在数据库里,当这些变量需要改变时,修改数据库中的数据即可,不必修改配置文件和java代码;且将列信息单独存储在一张表中,使表名配置表和列配置表都不冗余,可提高查询速度。因为一个场景可能会查询m张表,每张表可能查询n列,如果都配置到一张表里,就是m*n行,会有很多冗余字段,因此分成了两张表。
上述技术方案还包括编写java适配器类,在接收到查询请求时,解析所述查询请求得到场景标识。上述技术方案还包括编写java调用类,在运行时将所述键值对传入预先编写的ibatis配置文件中,生成sql语句。
其中主要配置文件如下所示:
其中$selectresultfields$,$tablename$等都是数据库配置的表和字段,$list是传进来的where条件的实参。
如图2所示,一种基于ibatis实现sql动态配置的系统,包括配置模块1、解析模块2、查询模块3,对象生成模块4、封装模块5和调用模块6;所述配置模块1,其用于在数据库中建立表名配置表和列配置表,所述表名配置表用于配置场景要查询的数据表的表名,所述列配置表用于配置要查询的数据表中的列;所述解析模块2,其用于接收查询请求,解析所述查询请求得到场景标识;所述查询模块3,其用于根据场景标识在数据库中查找对应的表名配置表和列配置表,得到查询结果;所述对象生成模块4,其用于根据在数据库中获取的查询结果生成自定义对象;所述封装模块5,其用于将调用者传入的where条件的实参封装进自定义对象中,得到键值对;所述调用模块6,其用于运行时将所述键值对传入预先编写的ibatis配置文件中,生成sql语句。
所述表名配置表存储场景标识、要查询的表名和查询列的where条件。所述列配置表存储场景标识、要查询的表名和要查询的表的字段名。
所述解析模块2中预先编写有java适配器类,在接收到查询请求时,解析所述查询请求得到场景标识。所述调用模块6预先编写有java调用类,在运行时将所述键值对传入预先编写的ibatis配置文件中,生成sql语句。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于ibatis实现sql动态配置的方法,其特征在于,包括如下步骤:
步骤1,在数据库中建立表名配置表和列配置表,所述表名配置表用于配置场景要查询的数据表的表名,所述列配置表用于配置要查询的数据表中的列;
步骤2,接收查询请求,解析所述查询请求得到场景标识;
步骤3,根据场景标识在数据库中查找对应的表名配置表和列配置表,得到查询结果;
步骤4,根据在数据库中获取的查询结果生成自定义对象;
步骤5,将调用者传入的where条件的实参封装进自定义对象中,得到键值对;
步骤6,运行时将所述键值对传入预先编写的ibatis配置文件中,生成sql语句;
所述表名配置表存储场景标识、要查询的表名和查询列的where条件;
所述列配置表存储场景标识、要查询的表名和要查询的表的字段名。
2.根据权利要求1所述一种基于ibatis实现sql动态配置的方法,其特征在于,所述表名配置表存储场景标识、要查询的表名和查询列的where条件。
3.根据权利要求2所述一种基于ibatis实现sql动态配置的方法,其特征在于,所述列配置表存储场景标识、要查询的表名和要查询的表的字段名。
4.根据权利要求1-3任一项所述一种基于ibatis实现sql动态配置的方法,其特征在于,还包括编写java适配器类,在接收到查询请求时,解析所述查询请求得到场景标识。
5.根据权利要求1-3任一项所述一种基于ibatis实现sql动态配置的方法,其特征在于,还包括编写java调用类,在运行时将所述键值对传入预先编写的ibatis配置文件中,生成sql语句。
6.一种基于ibatis实现sql动态配置的系统,其特征在于,包括配置模块、解析模块、查询模块,对象生成模块、封装模块和调用模块;
所述配置模块,其用于在数据库中建立表名配置表和列配置表,所述表名配置表用于配置场景要查询的数据表的表名,所述列配置表用于配置要查询的数据表中的列;
所述解析模块,其用于接收查询请求,解析所述查询请求得到场景标识;
所述查询模块,其用于根据场景标识在数据库中查找对应的表名配置表和列配置表,得到查询结果;
所述对象生成模块,其用于根据在数据库中获取的查询结果生成自定义对象;
所述封装模块,其用于将调用者传入的where条件的实参封装进自定义对象中,得到键值对;
所述调用模块,其用于运行时将所述键值对传入预先编写的ibatis配置文件中,生成sql语句;
所述表名配置表存储场景标识、要查询的表名和查询列的where条件;
所述列配置表存储场景标识、要查询的表名和要查询的表的字段名。
7.根据权利要求6所述一种基于ibatis实现sql动态配置的系统,其特征在于,所述表名配置表存储场景标识、要查询的表名和查询列的where条件。
8.根据权利要求7所述一种基于ibatis实现sql动态配置的系统,其特征在于,所述列配置表存储场景标识、要查询的表名和要查询的表的字段名。
9.根据权利要求6-8任一项所述一种基于ibatis实现sql动态配置的系统,其特征在于,所述解析模块中预先编写有java适配器类,在接收到查询请求时,解析所述查询请求得到场景标识。
10.根据权利要求6-8任一项所述一种基于ibatis实现sql动态配置的系统,其特征在于,所述调用模块预先编写有java调用类,在运行时将所述键值对传入预先编写的ibatis配置文件中,生成sql语句。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510490546.4A CN105138326B (zh) | 2015-08-11 | 2015-08-11 | 一种基于ibatis实现sql动态配置的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510490546.4A CN105138326B (zh) | 2015-08-11 | 2015-08-11 | 一种基于ibatis实现sql动态配置的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105138326A CN105138326A (zh) | 2015-12-09 |
CN105138326B true CN105138326B (zh) | 2019-03-22 |
Family
ID=54723684
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510490546.4A Active CN105138326B (zh) | 2015-08-11 | 2015-08-11 | 一种基于ibatis实现sql动态配置的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105138326B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106599139B (zh) * | 2016-12-05 | 2021-02-26 | 金蝶软件(中国)有限公司 | 一种基于MyBatis框架的SQL处理方法及装置 |
CN106991276B (zh) * | 2017-03-17 | 2020-01-21 | 浙江大学 | 一种基于openEHR模板的数据接口动态生成方法 |
CN108776674B (zh) * | 2018-05-23 | 2021-03-12 | 中国农业银行股份有限公司 | 一种电子凭证存储方法、装置及服务器 |
CN111339128B (zh) * | 2018-12-18 | 2023-09-26 | 北京嘀嘀无限科技发展有限公司 | 一种数据获取方法、装置、电子设备及存储介质 |
CN111338685B (zh) * | 2018-12-19 | 2023-11-21 | 卓望数码技术(深圳)有限公司 | 一种公用组件配置方法、装置、设备和存储介质 |
CN111026963A (zh) * | 2019-12-04 | 2020-04-17 | 贝壳技术有限公司 | 数据查询的方法及装置、配置信息的设置方法及装置 |
CN113360362B (zh) * | 2020-03-03 | 2024-06-18 | 北京沃东天骏信息技术有限公司 | 一种动态sql效率检查方法及插件 |
CN111708926B (zh) * | 2020-06-12 | 2023-06-13 | 北京思特奇信息技术股份有限公司 | 数据查询的配置化实现方法及系统 |
CN111796810A (zh) * | 2020-07-03 | 2020-10-20 | 福建天晴在线互动科技有限公司 | 一种可配置化快速生成Mysql数据库代码的方法及其系统 |
CN113254522A (zh) * | 2021-06-18 | 2021-08-13 | 深圳追一科技有限公司 | 一种数据库访问方法、装置、设备及可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521274A (zh) * | 2011-11-24 | 2012-06-27 | 上海明想电子科技有限公司 | 一种基于ibatis的SQL脚本动态加载方法 |
CN103544211A (zh) * | 2013-09-04 | 2014-01-29 | 广东全通教育股份有限公司 | 一种将对象转化为sql语句的通用查询系统及方法 |
CN104317964A (zh) * | 2014-11-14 | 2015-01-28 | 中国建设银行股份有限公司 | 一种基于iBatis的对象关系映射方法及系统 |
-
2015
- 2015-08-11 CN CN201510490546.4A patent/CN105138326B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521274A (zh) * | 2011-11-24 | 2012-06-27 | 上海明想电子科技有限公司 | 一种基于ibatis的SQL脚本动态加载方法 |
CN103544211A (zh) * | 2013-09-04 | 2014-01-29 | 广东全通教育股份有限公司 | 一种将对象转化为sql语句的通用查询系统及方法 |
CN104317964A (zh) * | 2014-11-14 | 2015-01-28 | 中国建设银行股份有限公司 | 一种基于iBatis的对象关系映射方法及系统 |
Non-Patent Citations (1)
Title |
---|
基于半自动化iBatis的轻量级ORM改进研究;李爽;《天津职业院校联合学报》;20090331;第11卷(第2期);第64-67页 |
Also Published As
Publication number | Publication date |
---|---|
CN105138326A (zh) | 2015-12-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105138326B (zh) | 一种基于ibatis实现sql动态配置的方法及系统 | |
CN107402987B (zh) | 一种全文检索的方法和分布式NewSQL数据库系统 | |
CN104123374B (zh) | 分布式数据库中聚合查询的方法及装置 | |
US10031922B2 (en) | Systems and methods for query evaluation over distributed linked data stores | |
CN105824957A (zh) | 分布式内存列式数据库的查询引擎系统及查询方法 | |
US20160224667A1 (en) | Method and system of implementing an integrated interface supporting operation in multi-type databases | |
TW201837747A (zh) | 基於區塊鏈的資料儲存以及查詢的方法及裝置 | |
CN103942228A (zh) | 规则引擎、计算方法、业务系统及调用方法 | |
CN104899225A (zh) | 对象关系映射方法、装置及处理器 | |
CN105718593A (zh) | 一种数据库查询优化方法及系统 | |
WO2015094269A1 (en) | Hybrid flows containing a continuous flow | |
CN106933869B (zh) | 一种操作数据库的方法和装置 | |
CN111782675B (zh) | 生成数据库脚本的方法、装置及计算机可读存储介质 | |
CN108829884A (zh) | 数据映射方法及装置 | |
US11893026B2 (en) | Advanced multiprovider optimization | |
CN105183901A (zh) | 一种数据查询引擎读取数据库表的方法及装置 | |
CN104615713A (zh) | 一种基于多数据库类型的sql执行方法和装置 | |
CN102426612A (zh) | 条件对象查询方法及系统 | |
CN103544211A (zh) | 一种将对象转化为sql语句的通用查询系统及方法 | |
US10831784B2 (en) | Integration of relational calculation views into a relational engine | |
CN103678396A (zh) | 一种基于数据模型的数据备份方法和装置 | |
CN105556504A (zh) | 从物理流生成逻辑表示 | |
US10521431B2 (en) | Relational conversion of multiprovider operations in a calculation scenario for executing a query | |
CN107273525A (zh) | 函数式查询方法及系统 | |
CN109241153A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |