hibernate里封装的BascAction

java小愤青 发布于 2013/07/31 00:06
阅读 334
收藏 0
过去做项目,公司是用的SSH,很简单的分层结构,Action-DAO,就这两层,但我发现别的公司会有action,bascAction,action接口和抽象类,service也是如此,dao并非每张表都有一个,而是大家共用一个bascDAO,泛型,反正就是很多,每一层都有抽象类,接口,基础类,这个可能是为了项目本身的开发规范化,但我想知道bascDAO里面的泛型方法,实际上只能大多只能用hql,如果我想写sql的话怎么弄呢,在bascDAO里面或者写一个DAO继承bascDAO,在这个DAO里面写一个方法执行sql,那我想问问,我sql的创立是在service里面吧,不然我怎么共用一个方法呢...问的可能不好,就这么讲吧,我想在DAO中写一个方法,执行SQL,是执行所有我需要执行的sql,但sql从哪里产生呢,总不能从service里面写sql吧,能不能....兄弟虽然搞了多年SSH项目,都是以快为准,但从没深入了解过,哎....
加载中
0
王瑞平
王瑞平
sql在action写好,传入service
java小愤青
java小愤青
action和service里面不应该出现sql吧,好纠结啊,如果在service里面出现了sql,此sql执行结果不方便被其他service调用吧
0
王瑞平
王瑞平

action可以有sql

cretia哪种方式就是在action拼写sql

java小愤青
java小愤青
会被经理骂的
0
魔力猫
魔力猫

号称多年SSH居然这样。。。。

无语吐糟。

java小愤青
java小愤青
多年打酱油...
0
今夜吴眠

放哪得看项目的规范,或定出这样的规范,但是

最好不要放在action,里。另楼主的困惑,我以前也有过。你的SSH思想是action  调 service , service调 dao,这是潜规则似的。。

我现在弄的是action 调 service ,service 调 service 或 dao, dao 也可以调dao(这种情况很少)。

java小愤青
java小愤青
dao是不是自己纯手写的?过去都是自动生成的那种,每个表都对应一个,哎,看来过去我的写法实在不怎么招人待见,所以现在才决心要换个写法
0
做有梦想的人
做有梦想的人

引用来自“王瑞平”的答案

sql在action写好,传入service
sql写在service里啊,然后传给dao层执行,当然如果用hibernate就是hql
做有梦想的人
做有梦想的人
回复 @java小愤青 : service层本来时编写业务逻辑的啊,不同的业务只需封装自己所需查询的语句,然后传给dao层处理,不存在复写的问题。
萧萧恋
萧萧恋
回复 @java小愤青 : 你别的Action 可以注入这个Service 然后调用这个方法啊!
java小愤青
java小愤青
这样的话,在别的service中调用此方法很不方便啊,比如我查询了一个list,在另一个service也需要查询,是不是sql要复写呢
0
空云万里晴
空云万里晴
sql不是写在DAO层吗,干嘛非得共用一个方法,要用原生sql的类应该不是很多吧?
java小愤青
java小愤青
用泛型的话不用再去每个表都有对应的DAO啦,那样子东西太多了
0
HostSugar
HostSugar

完全可以在baseDao 写一个hibernate操作原生sql的方法

或者 

baseDao 中引入spring jdbcTemplate ,直接操作sql很方便

萧萧恋
萧萧恋
回复 @java小愤青 : 就在BaseDao 里面定义 一个使用Hibernate操作SQL的通用的方法,也可以使用SpringJDBCTemplate 来操作SQL 都是可以的!
java小愤青
java小愤青
sql的源头是在哪里产生的呢,service层吗
0
萧萧恋
萧萧恋

可以定义一个BizService 所有的service都继承这个类 也可以添加一些 常用的方法 比如不需要事务处理的 一些通用分页方法 等等。。。 action 里面的BaseAction 可以直接注入BizService 可以方便调用。

java小愤青
java小愤青
感觉写的代码好漂亮
0
XzhiF
XzhiF
看企业级应用模式,有一模式叫query object,可以将查询参数封装为对象,这个对象可以自己产生拼装hql,也可以有工具类。将这个类传到dao中是一种方式额。不过也可以用active record模式也是可以的,具体看业务复杂度和需求,没有绝对的方式额,哥们
java小愤青
java小愤青
恩,目前为止,确实没有绝对100%完美的方式
返回顶部
顶部