`
lllyq
  • 浏览: 34622 次
  • 性别: Icon_minigender_1
  • 来自: Shanghai
社区版块
存档分类
最新评论

基于hibernate的开源通用查询框架 -- bba96介绍

    博客分类:
  • java
阅读更多

新开bba96圈子 http://bba96.group.iteye.com/

bba96 框架当前版本 2.2,包含:

bba96-core 核心框架,封装Hibernate Criteria,提供方便的查询以及分页支持,查询参数

bba96-struts 基于Struts2的开发框架,依赖core,提供便捷的CRUD以(分页支持),通过设置form的参数就可以实现复杂的分页查询

bba96-security 安全框架,依赖core,借助core query的简捷实现数据权限(未更新)

项目主页:http://bba96.dev.java.net
bba96 下载:https://bba96.dev.java.net/servlets/ProjectDocumentList?folderID=7768&expandFolder=7768&folderID=7768

或者在圈子里下载: http://bba96.group.iteye.com/group/share

如何使用bba96

1. bba96-core查询例子(未完)


对象关系如上图 Teacher-Group, Group-Student, Student-Exercise分别是one-to-many关系,Teacher-Student 则是many-to-many的关系

 java代码显示有问题,还是上图吧







优势在于
1. 分页信息的支持(自动count相应条件的total count)
2. 查询字段简化,不用关心关联信息,包括Projections中的order, groupby都可以用
对exercise的查询,伪码如 where student:s.group:g.level = 3 and student:s.teacher:t.name = 'wang' order by stduent:s.name 这里面有很多个关联,跟hql/sql相比,bba96 query 更面向对象,你只需要关心业务逻辑
3. 统一的查询入口,包括统一的查询参数结构,全面hql/sql的parse还是比较困难的,而bba96的query结构比较简单(复杂的都封装起来了),你可以运行期重构query,会用aop的同学应该有很多想像空间,例如数据权限

注:2.3.0版本已加入安全框架(2007-10)

分享到:
评论
29 楼 lllyq 2007-08-01  
28 楼 dino2007 2007-08-01  
链接无效
27 楼 wl1985 2007-07-31  
学习一下,感觉不是很好使用,
26 楼 hantsy 2007-07-27  
在java.net上,很早就注意这个项目了
包括了webwork的集成
25 楼 lllyq 2007-07-26  
Chamjoneu 写道
一个问题: 能不能解决openseesioninview问题

OSIV的什么问题?
bba96只是对Criteria的封装,不是要解决什么具体OSIV的问题,不过倒是可以很方便的解决一些由于LAZY引起的n+1的query问题,也就是即使设定了LAZY,用的时候也很方便关闭LAZY,转用fetch方式。

如: student.exercises是one-to-many,一个页面要同时显示student及所属exercise时,非LAZY就就是1条sql,而LAZY时有n个student就有1+n条sql发出,但是在别的地方确实需要LAZY,那么用bba96只要在原来的query部分加一个Fetch条件即可实现非LAZY的效果
24 楼 lllyq 2007-07-26  
出门请戴口罩 写道
这样,也许更通用一些
public class CommonQuery{
   public Object getById(Long id);
   public List getList(String condition);
   public Page getPage(String condition,int pageIndex,int pageSize);
}

...


基本上condition用string来表示是不够的
1. 没有类型信息
2. 难以拆分与组装条件/orderby/groupby/聚集函数等,跟hql/sql区别不大

bba96内部有自定义的query对象,解决了以上的问题,至于pageIndex还是startIndex无关紧要,都可以支持
23 楼 Chamjoneu 2007-07-26  
一个问题: 能不能解决openseesioninview问题
22 楼 出门请戴口罩 2007-07-25  
这样,也许更通用一些
public class CommonQuery{
   public Object getById(Long id);
   public List getList(String condition);
   public Page getPage(String condition,int pageIndex,int pageSize);
}

...
21 楼 apollo1234 2007-07-25  
支持,找时间好好拜读下
20 楼 andiyang 2007-07-20  
这个东西真是好东东,我已经用了一年了
19 楼 lllyq 2007-07-20  
downpour 写道

另外问一句,一旦系统很大,SQL调优就显得很重要。作为最简单的调优方式之一,调整where语句的互相之间的顺序,你这个产品如何帮我完成。

我后来想了一下,是需要想办法好好处理一下,是下一个版本的方向
18 楼 lllyq 2007-07-20  
yyjn12 写道
帖子主题看了,内容都没看,就想说句,已经够乱的了,就别在框架外面再套框架了.

我们的java web应用开发本来就很难,要学的东西很多,配置信息很散.

乱!乱!乱!

hibernate本来就是个难以真正用的好的框架,很多java的框架都是如此,本身是好东西,就是难以学精学通,难以用的好.

难!难!难!

您若有才,就一改现状,自己从头写出优秀的,易用的框架吧.


会者不难,难者不会
用别人框架得到的只是一时,理解别人的设计思想才可以获得真正的积累
多看多写吧

另外前一楼说访问不到,可能时dev.java.net有点问题,过会再试试看,现在的dev.java.net已经比原来好很多了
17 楼 yyjn12 2007-07-20  
帖子主题看了,内容都没看,就想说句,已经够乱的了,就别在框架外面再套框架了.

我们的java web应用开发本来就很难,要学的东西很多,配置信息很散.

乱!乱!乱!

hibernate本来就是个难以真正用的好的框架,很多java的框架都是如此,本身是好东西,就是难以学精学通,难以用的好.

难!难!难!

您若有才,就一改现状,自己从头写出优秀的,易用的框架吧.
16 楼 laojiang 2007-07-20  
我这里怎么访问不了项目的页面呢?
15 楼 xlincn 2007-07-20  
大哥。我应该是最早的用户吧。呵呵。
2005年。刚工作不久。公司有一个很小的系统要我来搞定。我准备用jsp+servlet来搞定。但是老大看我聪明。可爱。就要我用webwork + spring + hibernate来做。说对我有好处。由于我没有玩过这3个东东。我的老大就找他的同学。也就是大哥您。拿了一个好东东给我。也就是bba96。

用后感:
决对是好东东。

ps:
大哥不会炒作。bba96加入过springside的webwork实现的吧。应该借springsied来炒作嘛。


14 楼 ronghao 2007-07-20  
支持lz一把,实际在项目中我已经用到了这个开源项目,只不过开始bba96并不支持分页。在实际应用中我用它来做数据权限,AOP的方式。这种面向对象的查询方式非常适合动态的改变查询条件。
13 楼 lllyq 2007-07-19  
用户名 guest 即可,不需要密码
cvs -d :pserver:guest@cvs.dev.java.net:/cvs checkout bba96

补充一点可以简单属性查询后,甚至可以将查询条件的定义推迟到jsp,也就是说可以动态增减查询条件,参见bba96-struts(struts2),查询参数支持过滤,增强安全性

不看好Criteria也是一种说法,就好像有人喜欢模版有人喜欢jsp,jsp尽管麻烦,且难以维护,但是局部非常可靠

所有的查询参数最后归结到一个QueryParam,这个QueryParam有两种模式,simple模式就是一个简单条件,advanced模式就是可以有三个QueryParam的集合and, or ,not,其中的QueryParam可无限嵌套,改变参数顺序可以在调整QueryParam位置,通过多嵌套一层改变顺序,变成sql也就是多一个括号
12 楼 downpour 2007-07-19  
感觉和Hibernate自带的Criteria比较类似,只是加了分页支持。说说和Criteria的差别吧。

另外对于无法直观看到hql或者sql的产品,我一向不太感冒,给我的感觉就是不大直观,关系型数据库发展了那么多年,不是一句简单的OO思想就能涵盖的。所以我从来不看好像Criteria这样的产品。不是说面向对象的坏话,只是我认为既然是数据库查询,就避免不了写查询语句,其他的方式无法替代。

另外问一句,一旦系统很大,SQL调优就显得很重要。作为最简单的调优方式之一,调整where语句的互相之间的顺序,你这个产品如何帮我完成。
11 楼 Godlikeme 2007-07-19  
很抱歉,还是没搞明白,开发和应用框架的谨慎原则lz应该能够理解。
改天拜读源码。
10 楼 梦秋雨 2007-07-19  
问一下,CVS的用户名密码不公开?那怎么开源的?只能去下载包?找了半天没找到用户密码

相关推荐

Global site tag (gtag.js) - Google Analytics