bbossgroups持久层框架动态sql语句配置和使用

简介: 动态sql配置文件内容: 动态sql语句中包含两种类型的变量: #[service_requester_name] 这种变量将被转换成预编译绑定参数变量 $service_requester_code 这种变量直接被替换成相应的变量...
动态sql配置文件内容:
<?xml version="1.0" encoding="UTF-8"?>

<properties>
	<property name="getRequesterDaoListInfo">
		<![CDATA[
			select r.*, o.ORG_NAME as service_requester_org_name from TD_ESB_REQUESTER r left join TD_SM_ORGANIZATION o 
			 on r.SERVICE_REQUESTER_ORG = o.ORG_ID
			 where 1=1
			#if($service_requester_code && !$service_requester_code.equals(""))
			 and SERVICE_REQUESTER_CODE = #[service_requester_code]
			#end
			#if($service_requester_account && !$service_requester_account.equals(""))
			 and SERVICE_REQUESTER_ACCOUNT like #[service_requester_account]
			#end
			#if($service_requester_name && !$service_requester_name.equals(""))
			 and SERVICE_REQUESTER_NAME like #[service_requester_name]
			#end
			#if($service_requester_org && !$service_requester_org.equals(""))
			 and SERVICE_REQUESTER_ORG = #[service_requester_org]
			#end
			
			order by create_time desc
		]]>
	</property>
	
	
</properties>


动态sql语句中包含两种类型的变量:
#[service_requester_name] 这种变量将被转换成预编译绑定参数变量
$service_requester_code 这种变量直接被替换成相应的变量值

除了sql参数变量外,我们在sql中使用以下逻辑结构
#if/#elseif/#end 
来动态生成sql语句,以下是一个简单的结构实例:
#if( $foo < 10 ) 
#elseif( $foo == 10 ) 
#elseif( $bar == 6 ) 
#else 
#end 

根据传入的变量的值做相应的处理,从而在运行时动态生成sql语句,逻辑表达中使用变量的语法为$开头加变量名称:$service_requester_name。
判断变量是否为null的语法为:
#if($service_requester_name) 

逻辑表达式使用的Velocity模板引擎语法,非常灵活,我们可以在动态sql模板中使用几乎所有Velocity模板引擎的功能,具体使用方法可以参考Velocity模板引擎官网资料。

加载sql配置文件并定义ConfigSQLExecutor 组件:
    public static final String DBNAME = "stsmc";    
        private static ConfigSQLExecutor executor = new ConfigSQLExecutor("com/chinacreator/tjbb/dao/impl/stxftj.xml");   



只要确保com/chinacreator/tjbb/dao/impl/stxftj.xml文件存放在classpath环境中即可,一般是在classes目录下。

dao组件中执行动态sql并返回执行结果:

   
package com.chinacreator.esb.uddi.requester.dao.impl;  
      
    import com.chinacreator.esb.uddi.requester.dao.RequesterDao;  
    import com.chinacreator.esb.uddi.requester.entity.Requester;  
    import com.frameworkset.common.poolman.ConfigSQLExecutor;  
    import com.frameworkset.util.ListInfo;  
      
    public class RequesterDaoImpl implements RequesterDao {  
          
        public static final String dbName= "stsmc";    
        private static ConfigSQLExecutor executor = new ConfigSQLExecutor("com/chinacreator/tjbb/dao/impl/stxftj.xml");   
      
      
        public ListInfo getRequesterDaoListInfo(String sortKey, boolean desc,  
                long offset, int pagesize, Requester queryCondObj) throws Exception {  
            // 还是分页查询哦  
 
           queryCondObj.setService_requester_name("%" + 
           queryCondObj.getService_requester_name() + "%");//设定模糊查询条件值
           queryCondObj.setService_requester_account("%" + 
           queryCondObj.getService_requester_account() + "%");//设定模糊查询条件值
            return executor.queryListInfoBeanWithDBName(Requester.class,   
                    dbName, "getRequesterDaoListInfo", offset, pagesize, queryCondObj);  
        }  
      
    }  

这里的dbName是在poolman.xml文件中配置的一个数据源。上文方法演示了如何通过ConfigSQLExecutor 组件读取动态sql实现分页查询的功能。至于数据源的配置请参考博文:
http://yin-bp.iteye.com/blog/1112892

需要额外说明的是怎么对like查询的值进行处理,如何添加%号,需要在dao方法中添加%号,否则不能正常查询出结果,我们配置的动态sql语句中有两个查询条件是
SERVICE_REQUESTER_NAME like #[service_requester_name]

SERVICE_REQUESTER_ACCOUNT like #[service_requester_account]

我们在dao方法中如此设置%号:
 queryCondObj.setService_requester_name("%" + 
           queryCondObj.getService_requester_name() + "%");//设定模糊查询条件值
           queryCondObj.setService_requester_account("%" + 
           queryCondObj.getService_requester_account() + "%");//设定模糊查询条件值


相关文档:
bbossgroups 持久层模板sql变量参数设置的三种方式
目录
相关文章
|
3月前
|
SQL 数据采集 自然语言处理
NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比
NL2SQL之DB-GPT-Hub<详解篇>:text2sql任务的微调框架和基准对比
|
2月前
|
SQL 监控 安全
Flask 框架防止 SQL 注入攻击的方法
通过综合运用以上多种措施,Flask 框架可以有效地降低 SQL 注入攻击的风险,保障应用的安全稳定运行。同时,持续的安全评估和改进也是确保应用长期安全的重要环节。
173 71
|
9天前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
111 11
|
1月前
|
SQL 存储 人工智能
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation)框架,能够基于大型语言模型(LLMs)为数据库生成精确的 SQL 查询。Vanna 支持多种 LLMs、向量数据库和 SQL 数据库,提供高准确性查询,同时确保数据库内容安全私密,不外泄。
205 7
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
|
5月前
|
SQL Java 数据库
建模底层逻辑问题之ORM框架建模中,执行SQL的过程中被抽象和组织是如何实现的
建模底层逻辑问题之ORM框架建模中,执行SQL的过程中被抽象和组织是如何实现的
|
6天前
|
SQL 分布式计算 Java
Spark SQL向量化执行引擎框架Gluten-Velox在AArch64使能和优化
本文摘自 Arm China的工程师顾煜祺关于“在 Arm 平台上使用 Native 算子库加速 Spark”的分享,主要内容包括以下四个部分: 1.技术背景 2.算子库构成 3.算子操作优化 4.未来工作
|
1月前
|
SQL 安全 Java
除了Flask框架,还有哪些框架能防止SQL注入攻击?
这些框架都在安全方面有着较好的表现,通过它们的内置机制和安全特性,可以有效地降低 SQL 注入攻击的风险。然而,无论使用哪个框架,开发者都需要具备良好的安全意识,正确配置和使用框架提供的安全功能,以确保应用的安全可靠。同时,持续关注安全更新和漏洞修复也是非常重要的。
58 7
|
2月前
|
SQL 自然语言处理 数据库
XiYan-SQL:一种多生成器集成的Text-to-SQL框架
XiYan-SQL 是一种创新的多生成器集成Text-to-SQL框架,通过M-Schema增强模型对数据库结构的理解,结合ICL与SFT方法提升SQL生成质量和多样性,经实验证明在多个数据集上表现优异,特别是在Spider和SQL-Eval上取得了领先成绩。
|
2月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
83 4
|
3月前
|
SQL BI 网络安全
SQL Server2014的安装与配置
SQL Server2014的安装与配置
203 0