`

antlr3学习以及简单的应用--使用sql语句查询集合中的对象

阅读更多

 

  其实 很早之前就想学习这个了antlr,可是因为种种原因,一直到最近才有时间来学,本来这篇文章应该是在年前写的,结果刚好回家去了,而家里又没有电脑‍.

       说了这么多废话,现在进入正题!antlr它是一个词法和语法的解析工具,你可以理解它为一个解析一门语言结构的工具,这里的语言不仅仅包括了常用的计算机语言,即使是你自己发明的语言,只要你能将这种语言描述出来,就可以用它来解析,强大吧^ ^ .所以,我一般把它当做一个"翻译家",使用它可以实现不用语言之间的交流,所以,I have a dream,所有的计算机语言是不是可以有统一的一天,至少语法和常用api是统一的???

        其实,在hibernate中也可以看到它的身影,强大的hql,就是基于antlr来实现的,实际上基于之前我说的,你可以理解为它自己发明了一种语言,并将这门语言和sql进行了翻译.

        接下来,我简单的介绍一下antlr的使用吧.(以下都以antlr-3.4为例)

        首先,我们想象一下,如果我们学习一门语言(无论是计算机语言还是自然语言),是不是首先要学习这门语言的词法和语法??这里说的词法就是一门语言的基本组成元素,比如我们英文中的单词,计算机语言中的关键字,而语法,就不用我说了吧.所以,如果我们希望antlr能学会一门语言就需要让它知道这两个元素的组成结构.而这两个元素在antlr中对应的是语法解析器和词法解析器.   

        我们要开始写这两个解析器了,首先我们要知道一些基本知识,语言描述文件一般是写在一个.g为后缀的文件中,而语法解析器的名字一般以小写开头,而词法解析器一般以大写开头

        具体怎么写,我这里就不介绍了,这里推荐一篇文章吧http://chzhou.blog.sohu.com/116306746.html

        到这里,我假定你已经对antlr有一定的了解了( 众人: - -!!! ),接下来,我将实现一个通过sql语句来查询java中对象集合的功能,比如我们可能经常需要在一个对象集合中,获取某个属性的集合,或者说我们需要找到符合某种条件的对象.

        (1)写出语法文件(因为我的需求比较简单,所以我解析的也是简单的sql语句,形如select field1,field2 from table1 where field1 = 'aaa'这样的),文件中附件中的QuerySql.g

       (2)配合生成的QuerySqlLexer,QuerySqlParser并利用反射来实现需求

       (3)测试下我们的代码

      @Test

	public void testQueryFromPojoList_selectSome() throws Exception {
		List<MockUser> users = Arrays.asList(new MockUser(1,"tom",new Date()),new MockUser(2,"jerry",new Date()));
		List<Map<String, ?>> result = converter.queryFromPojoList("select id,name from users where name='tom'", users);
		System.out.println("testQueryFromPojoList_selectSome:" + result);
	} 

      MockUser的构造函数为:

 

      public MockUser(Integer id, String name, Date birthday) { 

              this.id = id;//唯一标示

              this.name = name;//用户名

              this.birthday = birthday;//出生日期

      }
 

 

      MockUser 为一个测试用户类,最后输出的结果为:

      testQueryFromPojoList_selectSome:[{id=1, name=tom}]

 

最新代码请到https://github.com/hongliuliao/sql4nosql查看

分享到:
评论

相关推荐

    SQL语言到自然语言自动翻译的研究

    SQL的主要功能在于它能够连接来自不同表中的信息, 从而用一条SQL语句就可以执行复杂的程序集合。尽管SQL语言很强大,但是对于 那些没有或者只有很少数据库和计算机科学相关知识的人来说,SQL语言是难以理解 的。另...

    Hibernate学习笔记(1-13)

    通过Hibernate,开发者可以使用面向对象的方式来操作数据库,而无需关心底层的SQL语句。 1. **Hibernate介绍与动手入门体验**: - Hibernate引入:为了解决Java程序与数据库交互时的复杂性,通过ORM框架简化数据...

    有用的东西 mybatis

    3. `commons-collections-3.2.jar` - Apache Commons Collections提供了各种集合框架的增强功能,如迭代器、比较器、堆和图等,可能在MyBatis的查询结果处理中发挥作用。 4. `antlr-2.7.2.jar` - ANTLR是一个强大的...

    Hibernate学习.pdf

    - **使用SQL QUERY**: 执行原生SQL语句。 #### 16. 过滤数据 - **过滤数据**: 使用Filter接口实现数据过滤。 #### 17. XML映射 - **XML映射**: 使用XML文件描述实体类和数据库表之间的映射关系。 #### 18. 性能...

    Hibernate3-lib

    这个集合中的.jar文件是Hibernate3的核心组件以及与其配合使用的其他依赖库,旨在简化数据库操作和对象关系映射(ORM)的过程。以下是这些库文件及其在Java开发中的作用: 1. **hibernate3.jar**:这是Hibernate ...

    java包集合

    2. **Hibernate3.jar**:Hibernate是一个流行的Java ORM(对象关系映射)框架,它允许开发者使用Java对象来操作数据库,而无需编写SQL语句。Hibernate3是其旧版本,但依然广泛使用。它提供了一种对象持久化的解决...

    hibernate所需的13个(1个mysql驱动包+3个日志包+9个hibernate-required包)jar包

    在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本资源包含了学习和使用Hibernate所必需的13个jar包,这些包主要分为三个部分...

    spring2.5+ibatis3+web service cxf 例子MyEclipse工程

    在本工程中,iBatis 3作为数据访问层(DAO)工具,允许开发者编写SQL查询并将其绑定到Java对象上,实现了数据库操作的便捷和可维护性。 **CXF Web Service** CXF是一个开源的Web服务框架,用于创建和消费Web服务。...

    Hibernate常用jar包集合

    在Hibernate中,ANTLR用于解析HQL(Hibernate Query Language)和SQL语句。 2. **commons-collections-3.1.jar**: Apache Commons Collections是Apache软件基金会提供的一个Java工具包,包含对集合操作的增强,如...

    hibernate必备jar包

    Hibernate利用这个库来实现其动态代理和字节码生成功能,比如为实体类生成代理对象,以及在运行时解析和生成SQL语句。 `antlr-2.7.6.jar`是ANTLR(ANother Tool for Language Recognition)库,它是一个强大的解析...

    struts2.1.8 + spring2.5.6 + hibernate3.3.2整合

    -- 显示SQL语句 --&gt; &lt;property name="show_sql"&gt;true &lt;!-- 当前会话上下文 --&gt; &lt;property name="current_session_context_class"&gt;thread &lt;!-- 自动更新数据库表结构 --&gt; &lt;property name="hbm2ddl.auto"&gt;update ...

    hibernate的一点总结

    配置数据库访问信息通常在`hibernate.cfg.xml`中进行,包括显示SQL语句、格式化SQL、以及自动创建或删除表的设置。例如,`&lt;property name="hibernate.show_sql"&gt;true&lt;/property&gt;`会将执行的SQL打印到控制台,便于...

    hibernate+proxool+Oracle库文件

    首先,Hibernate是一个流行的对象关系映射(ORM)框架,它允许开发人员在Java应用中使用对象而不是SQL语句来操作数据库。Hibernate通过自动映射Java类到数据库表,简化了数据访问层的开发工作,提高了开发效率,并...

    hibernate3需要的jar包

    标题中的“hibernate3需要的jar包”指的是在使用Hibernate 3这个版本的Java对象关系映射(ORM)框架时,所必需的一些外部库文件。这些jar包是Hibernate正常运行的基础,它们提供了各种功能,使得开发人员可以方便地...

    hibernatjar包

    **mysql-connector-java-5.1.45.jar** - 这是MySQL数据库的JDBC驱动,使得Hibernate能够连接到MySQL数据库,执行SQL语句和管理数据库会话。 **hibernate-commons-annotations-5.0.1.Final.jar** - 包含了Hibernate...

    hibernate全包

    `antlr-2.7.6.jar`是ANTLR(ANother Tool for Language Recognition)库,是一个强大的解析器生成器,Hibernate使用其解析HQL和Criteria查询,生成相应的SQL语句。 `log4j-1.2.11.jar`是Apache的日志工具,为...

    Hibernate jar包通用版

    Hibernate是一款开源的对象关系映射(ORM)框架,它允许Java开发者在Java应用程序中处理数据库操作,而无需直接编写SQL语句。这个压缩包包含了Hibernate开发所需的多个关键库,适合初学者进行学习和实践。 1. **...

    hibernate的所有必备jar包

    1. Hibernate:Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发人员使用面向对象的方式来操作数据库,而无需直接编写SQL语句。通过Hibernate,Java对象可以被透明地保存、更新、查询和删除,简化了...

Global site tag (gtag.js) - Google Analytics