`
aa87963014
  • 浏览: 154419 次
  • 性别: Icon_minigender_1
  • 来自: 布尼塔尼亚
社区版块
存档分类
最新评论

FreyjaJdbcTemplate特性一:HQL

 
阅读更多

freyja2大特点:hql+cache

 

freyja可以无缝替换掉hibernate,才怪。

 

freyja主要功能是为了实现对jdbc操作的封装而不是替换hibernate,但是为了替换掉项目中的hibernate,freyja实现了简单的hql语法(而且也实现不了复杂的)

举个例子来看下freyja大概支持哪些hql/sql语法(理论上支持全sql映射)

 

 

select x.n,x.id,x.name,devscore,u.uid,cityId from User u left join ( select * from ( select i.userId as n,i.id,h.cityId from UserInfo i left join Hero h  on h.userId = i.userId ) a) x on x.n = u.uid

这里面有User UserInfo Hero 3个对象
  
select army.name,number from ArmyProduce  where army.name = 'h' and number = 1

select * from ArmyProduce a where a.army.name = 'h' and number = 1
这里面有ArmyProduce 和Army 2个对象

ArmyProduce 和Army 是一对多关系

 @Entity

 

@Table(name = "t_army_produce")
public class ArmyProduce {
	@Id
	@GeneratedValue
	@Column(name = "Id", unique = true, nullable = false)
	private Long id;

	@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
	@JoinColumn(name = "ARMY_ID")
	private Army army;

	@Column(name = "NUMBER")
	private Integer number;

	@Column(name = "userId")
	private Long userId;

}

 可以看出和hibernate一样支持jpa规范的annotation注解没有什么区别。

但是只目前只支持ManyToOne注解,而且没有延迟加载。(其他的注解如ManyToMany不会去支持。)主键也只支持自动增长,当然其他的一些主键如uuid应该会加进来。

 

Freyja的做法是使用jsqlparser这个工具把hql结构化,然后根据annotation转化为sql。freyja支持/不支持部分写法取决于2点:

 

1、jsqlparser能否识别该写法。2、能否转化为sql。

 

理论上1通过那么2也会通过。这个也是我正在努力的一个方面。

jsqlparser的作者估计把太多脑细胞放在select语法上面了。update和delete的语法只支持非常简单的部分:

 

update table set xx='1',oo='2' where xx='3'
delete from table where xx='3'

 

 大概就这种形式。

freyja改造加上hql语法支持之后变成了:

 

update ArmyProduce set number = 1 where army.name = 'h' and number = 2
delete from ArmyProduce where army.name = 'h' and number = 1

 

 情况还是不宜乐观。

 

 

FreyjaJdbcTemplate特性一:HQL 

 

FreyjaJdbcTemplate特性二:cache

 

FreyjaJdbcTemplate特性三:JdbcTemplate 

 

 

分享到:
评论

相关推荐

    Hibernate中的查询:HQL、Criteria、原生SQl

    HQL是Hibernate提供的一种面向对象的查询语言,它类似于SQL,但语法结构更贴近于Java对象。HQL的优势在于它可以直接操作对象和对象的属性,而不仅仅是数据库表和列。例如,查询所有User对象: ```java String hql =...

    关于HQL相关的论文

    《HQL:数据库查询语言在Hibernate中的应用与优化》 HQL,全称为Hibernate Query Language,是Hibernate框架中用于操作对象关系映射(ORM)的一种强大的查询语言。它类似于SQL,但面向对象,使得开发者可以以类和...

    Spring--HQL-chaxun.zip_HQL

    在Spring框架中,Hibernate Query Language(HQL)是一种强大的工具,用于执行对象关系映射(ORM)查询。HQL是面向对象的查询语言,与SQL类似但更专注于处理Java对象而不是数据库表。在这个名为“Spring--HQL-chaxun...

    Hibernate_HQL大全

    #### 一、HQL概述 HQL,即Hibernate Query Language,是一种强大且面向对象的查询语言,由Hibernate框架提供。尽管HQL的语法结构与SQL相似,但其设计理念完全不同,HQL是专门为面向对象的数据查询而设计的。它能够...

    精通HQL.doc

    - 虽然HQL与SQL相似,但并非所有SQL特性都适用于HQL,因为HQL是面向对象的,而非面向关系的。 - HQL可以和Criteria API结合使用,提供更强大的查询能力。 - 使用HQL可以更好地利用Hibernate的缓存机制,提高性能。 ...

    HQL是hibernate自己的一套查询

    在上面的示例中,我们首先通过`HibernateUtil.getSession()`方法获取到一个`Session`实例,然后定义了一个HQL查询语句,该语句用于从`Admin`表中查询`aname`为`name`的所有记录。最后通过`createQuery`方法创建查询...

    Hibernate注解方式、HQL查询

    在Java世界中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据。本篇将详细探讨Hibernate的注解方式以及HQL(Hibernate Query Language)查询...

    hql 的使用

    Hibernate Query Language (HQL) 是 Hibernate 框架提供的一种面向对象的查询语言,用于在 Java 应用中检索和操作持久化对象。HQL 与 SQL 相似,但更专注于对象而非数据库表。在使用 HQL 时,你需要了解以下几个关键...

    hibernate的hql语句

    【hibernate的HQL语句】是Hibernate框架中用于操作数据库的重要组成部分,它是一种面向对象的查询语言,类似于SQL,但更加强调对象的概念。HQL能够处理复杂的对象关系,如继承、多态和关联,使得在进行SSH(Spring、...

    HQL语句的语法

    - `select new list(p.name, p.address) from Person as p` 创建一个包含name和address的列表。 - `select new ClassTest(p.name, p.address) from Person as p` 创建`ClassTest`类的新实例,传入name和address。 ...

    Hibernate-HQL.rar_HQL_hibernate hql

    3. 动态HQL:通过Criteria API或Query接口,可以构建动态的HQL查询,无需预先知道完整的查询语句。 4. 分页查询:使用setFirstResult和setMaxResults方法实现分页,如“query.setFirstResult(0).setMaxResults(10)...

    HQL初级出门增删查找例子

    HQL(Hibernate Query Language)是Hibernate提供的一个面向对象的查询语言,它类似于SQL,但更加面向对象,能够与Hibernate的实体类进行交互。 标题“HQL初级出门增删查找例子”指的是这个压缩包包含了一些基础的...

    03-HQL实用技术.pdf

    ### HQL实用技术知识点概述 #### 一、配置关联关系 **1.1 单向一对多关联关系** - **定义**: 单向一对多关联指的是一个父对象可以拥有多个子对象,但子对象并不知道它的父对象是谁。 - **配置方法**: - 在父对象...

    精通HQL(word格式)

    同样,对于多对一、一对多、多对多的关系,HQL也能提供简洁的查询语法。 【默认数据库表和数据】 在学习HQL时,通常会基于一个预先设定的数据库环境。在这个例子中,使用了一个名为joblog的数据库,包含三个表:...

    HQL进阶语句

    HQL 支持 JOIN 语法来实现这一需求。例如,假设我们有一个 Address 表与 User 关联,我们可以这样做: ```java String hql = "from User user join fetch user.address where user.id = :userId"; Query query = ...

    Hibernate HQL.txt

    Hibernate HQL是一种面向对象的查询语言,它允许开发人员以一种更加自然的方式来表达数据库查询,而无需直接编写SQL语句。HQL提供了类似于SQL的强大查询能力,但更符合面向对象编程的思维方式,这使得它在处理持久化...

    Hibernate查询语言(HQL)

    - **支持高级特性**:HQL 支持复杂的查询操作,如联接、分组、排序等,并且可以很好地处理一对多和多对多的关系。 - **语法简洁**:HQL 的语法相对简洁,易于理解和编写。 #### 三、HQL 基础查询 - **基本的 ...

    HQL与SQL的区别

    **HQL** 是Hibernate框架中的一种查询语言,它是SQL的一个面向对象的抽象层,旨在简化Java应用程序与数据库之间的交互。HQL支持类名、属性名作为查询语句的一部分,使得查询更接近于面向对象的思维方式,而不是直接...

    hql文档详解 相信对初步的朋友有帮助

    #### 一、HQL简介与特点 HQL(Hibernate Query Language)是Hibernate提供的查询语言,它提供了丰富的查询功能。HQL作为推荐的标准查询方式,在HQL查询过程中,它不仅支持标准SQL查询语法,还提供了一种面向对象的...

    Hibernate数据检索(HQL)笔记

    HQL 是一种面向对象的查询语言,它支持 SQL 的大部分功能,并提供了一些面向对象的特性。HQL 查询通常用于检索特定条件下的对象集合或单个对象。 ##### 1. HQL 语法特点: - **面向对象**:HQL 使用类和属性名来...

Global site tag (gtag.js) - Google Analytics