`
wolfweis
  • 浏览: 20588 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于hibernate解析命名参数(named parameter)

阅读更多
最近因为要写一个自定义报表,所以需要把SQL的named parameter 匹配前台传过来的parameter,所以需要解析SQL获取里面的命名参数,然后就去研究hibernate怎么解析的,非常简单.hibernate源码我就不提供了(源码在:org.hibernate.engine.query.ParameterParser),下面提供精简过后的代码:
import java.util.ArrayList;

public class Test {

	public static void main(String[] args)
	{
		ArrayList<String> al = new ArrayList<String>();
		Test.parse("select * from sdf where a = :中文 and a >= to_date(:date,'yyyy-mm-dd hh24:mi:ss')", al);
		System.out.println("ssssss");
	}
	
	public static void parse(String sqlString,ArrayList<String> params){
		int stringLength = sqlString.length();
		boolean inQuote = false;
		for ( int indx = 0; indx < stringLength; indx++ ) {
			char c = sqlString.charAt( indx );
			if ( inQuote ) {\\如果标记为true,那么一直循环到结束的'
				if ( '\'' == c ) {
					inQuote = false;
				}
			}
			else if ( '\'' == c ) {\\这里第一次遇到'的时候打标记
				inQuote = true;
			}
			else if ( c == ':' ) {
				// named parameter
				int right = firstIndexOfChar( sqlString, " \n\r\f\t,()=<>&|+-=/*'^![]#~\\", indx + 1 );
				int chopLocation = right < 0 ? sqlString.length() : right;
				String param = sqlString.substring( indx + 1, chopLocation );
				if ( param == null || param.length() == 0) {
					throw new RuntimeException("Space is not allowed after parameter prefix ':' '"
							+ sqlString + "'");
				}
				params.add(param);
				indx = chopLocation - 1;
			}
			
		}
	}
	
	public static int firstIndexOfChar(String sqlString, String string, int startindex) {
		int matchAt = -1;
		for ( int i = 0; i < string.length(); i++ ) {
			int curMatch = sqlString.indexOf( string.charAt( i ), startindex );
			if ( curMatch >= 0 ) {
				if ( matchAt == -1 ) { // first time we find match!
					matchAt = curMatch;
				}
				else {
					matchAt = Math.min( matchAt, curMatch );
				}
			}
		}
		return matchAt;
	}
}

以上代码比较简单,不解释了.
分享到:
评论

相关推荐

    Hibernate HQL命名参数和Query接口的分页

    总结起来,熟练掌握Hibernate HQL的命名参数和Query接口的分页查询是提高数据操作效率的关键。同时,注意处理可能出现的数据库关键字冲突问题,确保ORM映射的正确性。通过这些技巧,开发者可以更好地控制和优化...

    让hibernate输出sql语句参数配置.doc

    Hibernate 配置参数详解 Hibernate 是一个流行的 ORM(Object-Relational Mapping)框架,广泛应用于 Java 企业应用开发中。为了提高 Hibernate 框架下的对象效率和开发效率,需要对其进行合理的配置。下面将详细...

    hibernate 配置属性参数详情(全)

    在SSH(Spring、Struts、Hibernate)整合的项目中,了解并优化Hibernate的配置参数对于提升应用性能至关重要。以下是一些关键的Hibernate配置属性及其用途: 1. **hibernate.dialect**:这个属性用于指定针对特定...

    Hibernate 在查询操作中要使用分页+命名参数+排序技术

    以上就是关于“Hibernate在查询操作中使用分页+命名参数+排序技术”的详细介绍。在实际开发中,熟练掌握这些技巧能帮助我们写出高效、安全且易于维护的代码。希望这篇文章对你有所帮助,更多关于Hibernate的源码分析...

    hibernate配置参数大全

    ### Hibernate配置参数详解 #### 一、数据库连接配置(JDBC) 在Hibernate中,与...以上是关于Hibernate配置参数的一些核心内容。通过合理地设置这些参数,可以有效地管理和优化Hibernate应用程序的性能和行为。

    Hibernate源码解析(二)

    在本篇《Hibernate源码解析(二)》中,我们将深入探讨Hibernate这一强大的Java对象关系映射(ORM)框架的内部工作原理。这篇博客旨在帮助开发者更好地理解Hibernate的核心机制,以便于更高效地利用它来处理数据库...

    Hibernate 参数配置详解

    ### Hibernate 参数配置详解 #### 一、概述 Hibernate 是一款流行的 Java 持久层框架,它通过提供一套丰富的 API 和配置选项来简化数据库访问。本文档将深入探讨 Hibernate 的核心配置参数及其功能,帮助开发者更...

    Hibernate注释深入解析

    【Hibernate注释深入解析】 在Java开发中,Hibernate是一个广泛使用的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式操作数据库。在Hibernate中,注释是一种强大的工具,可以简化配置,使得代码更加简洁...

    hibernate参数配置

    以下是关于Hibernate参数配置的一些关键知识点: 1. **hibernate.dialect**: 这个参数用于指定与特定数据库兼容的方言(Dialect),使得Hibernate能够生成针对该数据库优化的SQL语句。例如,如果你使用的是MySQL,...

    Hibernate 参数设置一览表

    Hibernate 参数设置一览表

    hibernate-jpa-named-query-xml-annotation-example.zip

    This tutorial show how to use Hibernate/JPA Named Queries. We start by explaining why we would use named queries. Next, we show an example of how to use named queries, either with annotations or XML ...

    hibernate-mapping参数详解

    在深入探讨`hibernate-mapping`参数之前,我们先理解一下Hibernate的核心概念。Hibernate是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。`hibernate-mapping`是Hibernate配置...

    Hibernate源码解析(一)

    本文将开启一系列关于Hibernate源码的解析,首先,我们将探讨Hibernate的核心组件和主要工作流程。 1. Hibernate概述 Hibernate是由 Gavin King 创建的一个开源项目,它提供了一种在Java应用中持久化对象到关系...

    Hibernate 参数设置一览表.doc

    参数设置是优化Hibernate性能的关键环节,以下是对文档中提到的一些重要Hibernate配置参数的详细解释: 1. **hibernate.dialect**:这个参数指定Hibernate使用的数据库方言(Dialect),确保Hibernate能生成适合...

    hibernate配置参数详解

    ### Hibernate配置参数详解 #### 一、数据库连接配置 在Hibernate框架中,为了与数据库进行交互,必须正确地配置数据库连接参数。以下是一些关键的配置项及其含义: 1. **`hibernate.connection.driver_class`**:...

    Hibernate数据持久层jar包源码解析

    《Hibernate数据持久层jar包源码解析》 在软件开发中,数据持久层是系统架构中的关键部分,它负责将应用程序的数据与数据库进行交互。Hibernate作为一款强大的Java对象关系映射(ORM)框架,极大地简化了这个过程。...

    hibernate配置参数一览表

    所有有关hibernate的相关的配置参数。

    Hibernate-Validate参数校验

    Hibernate-Validate参数校验

    Hibernate 参数设置一览表(强烈推荐)

    Hibernate 参数设置一览表 hibernate.dialect 一个Hibernate Dialect类名允许Hibernate针对特定的关系数据库生成优化的SQL.

    Hibernate源码解析(三)

    《Hibernate源码解析(三)》这篇文章主要探讨了Hibernate框架的深入源码解析,这是对 Hibernate 框架理解的进一步深化。在本篇中,作者聚焦于几个关键的组件和机制,帮助读者理解 Hibernate 如何高效地管理和操作...

Global site tag (gtag.js) - Google Analytics