其实 很早之前就想学习这个了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语言是难以理解 的。另...
通过Hibernate,开发者可以使用面向对象的方式来操作数据库,而无需关心底层的SQL语句。 1. **Hibernate介绍与动手入门体验**: - Hibernate引入:为了解决Java程序与数据库交互时的复杂性,通过ORM框架简化数据...
3. `commons-collections-3.2.jar` - Apache Commons Collections提供了各种集合框架的增强功能,如迭代器、比较器、堆和图等,可能在MyBatis的查询结果处理中发挥作用。 4. `antlr-2.7.2.jar` - ANTLR是一个强大的...
- **使用SQL QUERY**: 执行原生SQL语句。 #### 16. 过滤数据 - **过滤数据**: 使用Filter接口实现数据过滤。 #### 17. XML映射 - **XML映射**: 使用XML文件描述实体类和数据库表之间的映射关系。 #### 18. 性能...
这个集合中的.jar文件是Hibernate3的核心组件以及与其配合使用的其他依赖库,旨在简化数据库操作和对象关系映射(ORM)的过程。以下是这些库文件及其在Java开发中的作用: 1. **hibernate3.jar**:这是Hibernate ...
2. **Hibernate3.jar**:Hibernate是一个流行的Java ORM(对象关系映射)框架,它允许开发者使用Java对象来操作数据库,而无需编写SQL语句。Hibernate3是其旧版本,但依然广泛使用。它提供了一种对象持久化的解决...
在Java开发中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本资源包含了学习和使用Hibernate所必需的13个jar包,这些包主要分为三个部分...
在本工程中,iBatis 3作为数据访问层(DAO)工具,允许开发者编写SQL查询并将其绑定到Java对象上,实现了数据库操作的便捷和可维护性。 **CXF Web Service** CXF是一个开源的Web服务框架,用于创建和消费Web服务。...
在Hibernate中,ANTLR用于解析HQL(Hibernate Query Language)和SQL语句。 2. **commons-collections-3.1.jar**: Apache Commons Collections是Apache软件基金会提供的一个Java工具包,包含对集合操作的增强,如...
Hibernate利用这个库来实现其动态代理和字节码生成功能,比如为实体类生成代理对象,以及在运行时解析和生成SQL语句。 `antlr-2.7.6.jar`是ANTLR(ANother Tool for Language Recognition)库,它是一个强大的解析...
-- 显示SQL语句 --> <property name="show_sql">true <!-- 当前会话上下文 --> <property name="current_session_context_class">thread <!-- 自动更新数据库表结构 --> <property name="hbm2ddl.auto">update ...
配置数据库访问信息通常在`hibernate.cfg.xml`中进行,包括显示SQL语句、格式化SQL、以及自动创建或删除表的设置。例如,`<property name="hibernate.show_sql">true</property>`会将执行的SQL打印到控制台,便于...
首先,Hibernate是一个流行的对象关系映射(ORM)框架,它允许开发人员在Java应用中使用对象而不是SQL语句来操作数据库。Hibernate通过自动映射Java类到数据库表,简化了数据访问层的开发工作,提高了开发效率,并...
标题中的“hibernate3需要的jar包”指的是在使用Hibernate 3这个版本的Java对象关系映射(ORM)框架时,所必需的一些外部库文件。这些jar包是Hibernate正常运行的基础,它们提供了各种功能,使得开发人员可以方便地...
**mysql-connector-java-5.1.45.jar** - 这是MySQL数据库的JDBC驱动,使得Hibernate能够连接到MySQL数据库,执行SQL语句和管理数据库会话。 **hibernate-commons-annotations-5.0.1.Final.jar** - 包含了Hibernate...
`antlr-2.7.6.jar`是ANTLR(ANother Tool for Language Recognition)库,是一个强大的解析器生成器,Hibernate使用其解析HQL和Criteria查询,生成相应的SQL语句。 `log4j-1.2.11.jar`是Apache的日志工具,为...
Hibernate是一款开源的对象关系映射(ORM)框架,它允许Java开发者在Java应用程序中处理数据库操作,而无需直接编写SQL语句。这个压缩包包含了Hibernate开发所需的多个关键库,适合初学者进行学习和实践。 1. **...
1. Hibernate:Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发人员使用面向对象的方式来操作数据库,而无需直接编写SQL语句。通过Hibernate,Java对象可以被透明地保存、更新、查询和删除,简化了...