李李的技术博客

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  13 随笔 :: 0 文章 :: 61 评论 :: 0 Trackbacks
https://bba96.dev.java.net/
源文件下载
https://bba96.dev.java.net/servlets/ProjectDocumentList?folderID=4149&expandFolder=4149&folderID=0


1. 核心持久层部分基于spring/hibernate,实现强大灵活的动态query功能,可独立使用。
2. 权限部分,基于RBAC,支持数据权限,依赖1部分的接口。
3. Action层,基于1以及webwork,良好架构,减少大量代码,支持view灵活进行query且有参数教验支持保证安全性。

简单说bba96就是基于hibernate/spring的快速开发框架,其中包含了对Hibernate Critiera,Projection的封装,通过一个强大而灵活的QueryObject对象,方便动态添加与删除条件。
通过统一的query与数据库交互,方便AOP,其中的RBAC权限模块(支持数据权限)即是通过AOP操作QueryObject对象来实现的。bba96核心可以跟流行的view整合,目前只有webwork整合的版本。

bba96 不再需要自己写DAO/SERVICE,借助简单的spring ioc即可配置使用缺省DAO/SERVICE,而且通过灵活方便,易扩展的后台持久层与webwork的整合,完全实现了快速开发的目的。


Get Up And Running Quick

Example:
   (1) enter the example/simple or emample/book folder.
       NOTE:all following operation is under the folder you entered
   (2) copy your JDBC driver (default mysql) to the lib directory
       -- webapps\ROOT\WEB-INF\lib
   (3) edit hibernate.properties for database info (default mysql)
       -- src\main\java\hibernate.properties
   (4) run "ant"
   (5) create database via the sql script generated at database\schema-export.sql
   (6) edit applicationContext.xml for database info (default mysql)
       -- webapps\ROOT\WEB-INF\applicationContext.xml (line 5 - 21)
   (7) start server and see this example


有使用上的讨论,请联系我 MSN: hotmail的帐号scorpio_leon
posted on 2005-11-09 00:51 李李 阅读(6084) 评论(45)  编辑  收藏 所属分类: 技术

评论

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2005-12-28 18:19 xrc8088
看了一下你的代码,我现在有一个问题,from A ,B 其中A,B是两个没有关联的对象,你的代码能不能实现?  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2005-12-28 23:37 李李
除非Critiera支持,目前不能,需要对象间有关联,因为内部还是Critiera得query方法。  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2005-12-29 12:38 xrc8088
谢谢你的回答,那么你的框架为什么不用HQL来封装,我觉的要灵活,强大一些!  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2005-12-29 16:37 李李
HQL应该跟Critiera+Projections比较,虽然我没有仔细比较过,不过没感觉HQL强大多少?我看Critiera+Projections都能实现嘛,或者你举个例子让我看看。 MSN: hotmail的帐号scorpio_leon  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2005-12-30 12:35 xrc8088
比如有一复杂的查询,要求动态产生查询语句(不仅仅是字段的值变化,字段也产生变化),不知道能否完成?还有你现在的web端用的是ww,能否用Struts?如果你有Struts整合的代码,能否给我一份?Email:xuruchao8088@yahoo.com.cn  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2005-12-30 21:02 李李
这个很容易实现,只要有关联,bba96在动态产生查询语句方面比较强大的,特别是方便的别名无限关联,以及复杂的逻辑关系组合。具体看QueryObject,QueryParam。
不过暂时还没有struts整合的代码,而且以后struts ti将以webwork为核心,所以我也不打算为现有的struts做整合了,所谓不能整合只是不方便jsp调用,但是action层是直接支持的,不须特别整合。  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2005-12-31 08:47 xrc8088
谢谢你的回答,在struts中BaseAction的代码是不是和你的代码中DefaultActionSupport的代码有相似的地方(ww我不熟悉),我现在的工程底层的想采用你的框架,所以要问的详细一些。  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2005-12-31 17:44 李李
DefaultActionSupport一部分是简化webwork持久化操作,另一部分就是解析jsp或者properties传递的参数,后面这部分是类似的,直接就可以用。我的框架已经应用在我以及其他用户开发的很多工程中,你可以放心采用,建议取cvs上最新的。  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-02 18:39 xrc8088
我在用的过程中,有一个问题,好像不能用String作为主键,怎么办?  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-02 19:06 李李
cvs最新的不限制主键类型  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-02 21:50 xrc8088
cvs username/pwd serverAdd?  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-03 10:41 李李
host:cvs.dev.java.net
repository path:/cvs
user:guest
password:(空)
然后
check out bba96  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-09 12:25 xrc8088
李李 :你好,我现在在写代码的时候碰到了一些问题:1,我做查询的时候,假设字段的值都不填,或者填的不全,或者都填写,你的代码好像不能自己来判断?还是要我们自己来if-else?比如下面的代码:
DynaActionForm tradeInfoForm = (DynaActionForm) form;


String startTime = (String) tradeInfoForm.get("startTime");

String endTime = (String) tradeInfoForm.get("endTime");

String tradeType = (String) tradeInfoForm.get("tradeType");

String terminalId = (String) tradeInfoForm.get("terminalId");

Date startTime2 = null;

Date endTime2 = null;

try {

if (startTime != null && startTime.trim().length() > 0) {
startTime2 = DateUtil.StringToDate(startTime);
}

if (endTime != null && endTime.trim().length() > 0) {

endTime2 = DateUtil.StringToDate(endTime);
}


} catch (ParseException e) {


e.printStackTrace();
}

String[] names = new String[] { startTime, endTime, tradeType,
terminalId };
String[] operators = new String[] { QueryParam.OPERATOR_GT,
QueryParam.OPERATOR_LT, QueryParam.OPERATOR_EQ,
QueryParam.OPERATOR_EQ };
Object[] values = new Object[] { startTime2, endTime2, tradeType,
terminalId };

int total = entityManager.countAll(TradeInfo.class,names,operats,values);
logger.debug("TradeInfo TotalCount " + total);

List result = entityManager.findAll(TradeInfo.class,names,operats,values);

如果不填的话,出现"The operator can only be set 'is' or '=' or 'is not' or '!=' when value is NULL!"异常,
  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-09 12:35 xrc8088
补充,简单的说就是,通过上面的代码,我可以查询我想要的结果,我不用对查询条件进行排列组合,不知道可不可以,我看了一下源码,好像是可以,但是上面的语句为什么是错误的?  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-09 21:35 李李
The operator can only be set 'is' or '=' or 'is not' or '!=' when value is NULL!"
这个异常就是告诉你现在的值是null,对应的操作符只能是=, !=, is, is not。

因为查询的字段有可能是对象,null是有意义,所以要忽略view传过来的参数,应该由Action这层处理,缺省的页面传递过来,有参数名的值,没填的时候就是空,因此在我的webwork action中对空串作了忽略处理,同时还已经作了string到一般对象的转换,你的jsp中可以这样写endTime_Date。以下这一段通过自动处理都能省掉,你可以参考一下,用struts也能实现。

String startTime = (String) tradeInfoForm.get("startTime");

String endTime = (String) tradeInfoForm.get("endTime");

String tradeType = (String) tradeInfoForm.get("tradeType");

String terminalId = (String) tradeInfoForm.get("terminalId");

Date startTime2 = null;

Date endTime2 = null;

try {

if (startTime != null && startTime.trim().length() > 0) {
startTime2 = DateUtil.StringToDate(startTime);
}

if (endTime != null && endTime.trim().length() > 0) {

endTime2 = DateUtil.StringToDate(endTime);
}


} catch (ParseException e) {


e.printStackTrace();
}

String[] names = new String[] { startTime, endTime, tradeType,
terminalId };
String[] operators = new String[] { QueryParam.OPERATOR_GT,
QueryParam.OPERATOR_LT, QueryParam.OPERATOR_EQ,
QueryParam.OPERATOR_EQ };
Object[] values = new Object[] { startTime2, endTime2, tradeType,
terminalId };

  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-13 14:25 rason
能否实现在互相关联的实体间的查询,
比如hibernate参考文档中的例子,怎么能在这个框架中实现:
createCriteria(Cat.class)
.add( Restrictions.like("name", "F%")
.createCriteria("kittens")
.add( Restrictions.like("name", "F%")
.list();  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-13 20:57 李李
find(Cat.class, new String[]{"name", "kittens:kitten.name"}, new String[]{"like", "like"}, new Object[]{"F%", "F%"})
这是action/service的写法,若你用webwork,框架中支持直接从jsp解析参数,就比较方便了。

冒号后表示别名,还可以继续进行关联查询如 kittens:kitten.propeties:property.name,没有层次的限制。   回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-16 09:07 rason
好!我就准备在这个项目中使用这个框架。
有什么问题,还望多指教。  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-16 12:09 李李
用CVS上的吧,现在release的只支持Long的主键,CVS上的去掉了这个限制
有问题可以加我的MSN或者到这里讨论
http://forum.bba96.com/forum.jspa?forumID=29&start=0
还将加入权限控制的模块,由于一直在赶项目,还来不及把权限发布,因为还有一些需要调整的代码。  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-16 17:13 rason
李李,你的MSN是?  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-16 23:04 李李
上面有写,MSN: hotmail的帐号scorpio_leon   回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-18 16:17 dfdf
关联查询时,如果两个实体是many-to-many,在主控方查出来后,怎么显示出来?因为在many的一方有Set集合,在页面显示有问题?  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-18 16:23 李李
不太明白,页面显示有什么问题?Set一样可以iterator  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-19 09:46 dfdf
已经解决,谢谢  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-01-21 18:40 李李
CVS上已加入前台传入的参数校验以及额外增加参数的功能,都可以通过配置properties文件实现,增加了安全性及灵活性  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-02-22 20:49 xrc8088
李李 ,稳定版什么时候出来?  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-02-23 10:11 李李
现在cvs上的也是比较稳定的,暂时没有发现bug。几个项目从1.0开始都在用  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-03-02 18:03 老仲
projections.setProperty(new String[]{"id","itemcode","content"});

输出页面上怎么写?
  回复  更多评论
  

# re: 快速开发框架bba96 正式加入dev.java.net的Java Enterprise Projects 2006-03-02 22:24 李李
内部就是调用hibernate的projections.setProperty,hibernate支持什么结构就是什么结构  回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) 2006-03-21 22:54 xrc
能不能在你的bba96中加入调用存储过程的代码
  回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) 2006-03-22 10:55 李李
可以的
我会给findByHQL加上names, values的参数,就可以调用了,但是这样的调用受hibernate的一些限制,参考
http://www.hibernate.org/hib_docs/v3/reference/en/html_single/#sp_query
确实想不受限制,也可直接使用session.connection()获得jdbc connection来调用
CVS上的CoreEntityManager有public Object getCurrentSession()的方法,类型转化为ore.hibenate.Session即可,缺省此方法不在EntityManager中提供。
谢谢你的关注,请多提意见  回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) 2006-03-22 13:45 xrc
谢谢你的回答,我准备在项目中用你的代码,不知有什么限制?  回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) 2006-03-22 15:04 李李
bba96使用LGPL发布,跟hibernate一样的。  回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) 2006-04-13 19:07 dddd
to:李李 我在使用bba96的时候,对于父子关系的查询,出现了异常,could not reslove property ,用到了属性的别名,我在线等你的回答!  回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) 2006-04-14 01:52 李李
根据MSN的交流,上面的情况是没有正确引用关联表属性,这也是hibernate使用者容易犯的错误。
举个hsql的例子,假设child:parent关系多对一,id是主键
select from Child child where child.parent.id = 1 正确
select from Child child where child.parent.name = 'name' 错误
select from Child child left join child.parent p where p.name = 'name' 正确
多(child)这边本来就记录了一(parent)的主键,parent的时候id是可以取得的,而hibernate多对一默认关联使用代理Proxy,这个parent的代理就是先拿到id作代理准备的,parent.id就取到了,但是parent的其它属性就需要显式连接才可以取到。
同理,相应的bba96的代码就是
parent.id 正确
parent.name 错误
parent:p.name 正确
  回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) 2006-04-15 07:49 dddd
谢谢你的回答,问题我已经全部解决!
  回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) 2006-07-18 10:30 xiaochen
代码QueryWebUtils.java中如下参数
age,>,20
[and:a]id,>,100
[and:a]id,!=,200
[or:or_b]salary,>,200
[or:or_b]salary,<,400
[or:and_a]age,=,60
[or:and_a]title,=,manager
[not:or_a]age,=,30
[not:or_a]title,=,cto
生成sql:(age>20 and (age=60 or title=cto)) or (age=60 or title=cto) and not (age=60 or title=cto)
为什么id和salary丢失了?
而在DefaultActionSupport中如下参数
age,>,20
[and:a]id,>,100
[and:a]id,!=,200
[or:b]salary,>,200
[or:b]salary,<,400
[or:a]age,=,60
[or:a]title,=,manager

then the generated sql like this:
age > 20 and (id > 100 and id != 200) or (salary > 200 and salary < 400) or (age = 60 and title = manager)
两者解析的方法有什么不同?
另外在public static QueryParam generateQueryParam(String[] names, String[] operators, Object[] values)
中有bug:判断andParameters != null却取得 notParameters.keySet();
if (andParameters != null) {
QueryParam innerQueryParam = new QueryParam();
for (String key : notParameters.keySet()) {
……
}
}
麻烦你解答一下,另外如果方便的话,说明一下参数的含义,从jsp--〉action--〉service有什么不同之处?谢谢你  回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) 2006-07-18 16:44 李李
为什么id和salary丢失了?
--抱歉,这里遗漏了
DefaultActionSupport是旧的版本,QueryWebUtils.java是tiger中重构过的版本,解析的方法是一致的,最新的以tiger版本为准
notParameters.keySet(); 这里是bug,谢谢指正,马上修正

这里的用法仅是为了允许jsp的参数带有简单逻辑组合,可以自动处理为service可识别的参数类型  回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) 2006-07-21 22:34 小陈故事
谢谢解答,请把cvs上的bug修正
if (andParameters != null) {
QueryParam innerQueryParam = new QueryParam();
for (String key : notParameters.keySet()) {
.....
}
}
queryParam.andParameter(innerQueryParam);
}
if (orParameters != null) {
QueryParam innerQueryParam = new QueryParam();
for (String key : notParameters.keySet()) {
... }
queryParam.orParameter(innerQueryParam);
}

把这段中的notParameters.keySet() 改为相应的
andParameters.keySet())
orParameters.keySet()   回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) 2006-07-23 13:40 李李
已提交,谢谢  回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) 2009-01-12 10:03 heby
垃圾  回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) [未登录] 2009-08-24 21:40
各位大侠
哪位有上述博主提到的源代码,请发给我一份
在下不胜感激
ldh199816@hotmail.com  回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) [未登录] 2009-08-24 21:41
@刘
ldh19816@hotmail.com  回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) [未登录] 2011-03-01 15:20
87438194@qq.com
各位大侠
哪位有上述博主提到的源代码,请发给我一份
在下不胜感激
  回复  更多评论
  

# re: 基于hibernate/spring的含RBAC权限模块的快速开发框架(目前与webwork整合) 2011-03-03 12:02
40736130@qq.com
各位大侠
哪位有上述博主提到的源代码,请发给我一份
在下不胜感激
  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: