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
情况还是不宜乐观。
分享到:
相关推荐
Hibernate中的查询:HQL、Criteria、原生SQl的Demo,希望可以帮助大家理解Hibernate查询。
HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL语法入门学习HQL...
HQL语句 HQL语句 HQL语句 HQL语句 HQL语句
我培训时用的 Hibernate 课件, 个人能力范围... 内容如下:HQL 查询;Query 接口及其主要方法;Select 子句;更新与删除;引用查询;联合查询;子查询;数据加载方式;Sql 查询;分页查询;管理 Session;ThreadLocal 接口的使用
而对于HQL:Customer 是一个对象,Firstname 是 Customer对象的属性。相比之下SQL 语句非常灵活,但是没有编译时语法验证支持。 本节介绍基础语法:from子句,select子句,where子句,orderby子句,groupby子句并...
所以在网上找到了一个elipse插件 英文图文教程 https://www.hibernate.org/hib_docs/tools/reference/en/html/plugins.html 下载地址 http://www.oschina.net/p/hibernate+tools 附件中为本人配置的eclipse ...
hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全hql语句大全
Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询...
HQL语句大全HQL语句大全HQL语句大全HQL语句大全HQL语句大全
Hql PPt Hql PPt
hql模糊查询hql模糊查询hql模糊查询hql模糊查询
hive定义了一个类似于SQL的查询语 言:HQL,能够将用户编写的QL转化为相应的Mapreduce程序基于Hadoop执行。 本文讲解如何搭建一个Hive平台。假设 我们有3台机器:hadoop1,hadoop2,hadoop3。并且都安装好了Hadoop-...
hive定义了一个类似于SQL的查询语 言:HQL,能够将用户编写的QL转化为相应的Mapreduce程序基于Hadoop执行。 本文讲解如何搭建一个Hive平台。假设 我们有3台机器:hadoop1,hadoop2,hadoop3。并且都安装好了Hadoop-...
HQL是hibernate自己的一套查询
HQL查询依赖于Query类,每个Query实例对应一个查询对象,使用HQL查询按 如下步骤进行: (1)获取Hibernate Session对象; (2)编写HQL语句; (3)以HQL语句作为参数,调用Session的createQuery方法创建查询对象; (4)...
本文旨在为读者呈现不同的方式查询方式:HQL方式的查询、SQL原生态SQL方式的查询、以及Criteria方式的查询,拓展查询的不同实现思路,开阔视野、并涵盖了部分的Hibernate增删改的基本操作。
第一:关于cretiria的查询 第二:HQL查询 第三,本地SQL查询
之前写好SQL,再到代码里面来写,语句复杂的看的时不时细节会忘记,用sql转换hql工具,直接贴近了就可以了;
hql语句常规 方法 使用 了解hql语句
HQL查询是一种面向对象的查询语言,其中没有表和字段的概念,只有类、对象和属性的概念,HQL 是应用较为广泛的方式.这是本人对HQL知识点做的一个总结性的练习