能用编码方式实现的奏尽量表用HQL语句
解决方案 »
- hibernate配置文件错误 BasUserInfo is not mapped [from BasUserInfo]
- 关于在Action里导出Excel
- 请教论坛能人帮我改改这段代码,就几行,谢谢了
- 应届生没项目经验怎么办?
- 求助jsp连接mysql数据出错、
- 求救,websphere内存泄漏
- 各位帮帮我,为什么在网上复制的文字,添加到我的数据库,添加出错误呢,请大师帮看看
- JAVA吕大型项目中的问题
- 『出错』log4j的问题
- 测试ejb时抛出异常,请指教!
- 请教两个Java, Struts的问题--- 急!是申请工作的email题目, 请大虾帮忙。
- weblogic8.1每隔一段时间就会就会当机!给100分求高手!
其实如果我们要转换类型的话,在hibernate代码里面还要要写的,对吧,比如我们要把一个字段转成date型,那我们在程序中to_date()一下,这与数据库就有关了,因为每个数据库函数都有些不同,如果用了特定的函数,那hibernate也要修改,所以说的数据库换了,对程序没什么影响 ,这句话是不对的,像上面的那个情况就是要修改 还有就是像复杂的操作,比如要用事务来做的,那就一定要用procedure来做了,用hibernate要在程序中写很大一段hql代码。所以这种情况,数据库修改了,还是对项目有影响 的
http://sourceforge.net/projects/velocityweb
其实如果大家能用心在JDBC进行封装,还是可以架构自己的平台的,完全不用hibernate,而且控制更加的灵活。当然,我觉得ibatis也可以。其实我个人感觉hibernate也做不到跨数据库,如果项目业务关系复杂的话(我们一般做的项目都是电信的),你必定会用到与数据库相关的函数。而且有时还真应该用procedure.所以数据库换了,程序代码和procedure也必须相应修改。不知大家怎么看,
我想问一下:这样做与直接使用JDBC有什么区别。可能大家要说,用hibernate至少省去了连接database的那段代码,但是我们并不要先一次作数据库查询时都要写的,我们可以把它写在一个action基类中,这个类 extends Action(在华为项目中如此实现)。这样所有的数据库操作的地方都用写那么一段连数据库的代码。
--------------------------------------------------------------------------
你可以再多加一些东西,让这个语句自动完成对象关系的映射。这里好像与“省去了连接database的那段代码”没任何关系吧?不知道你为什么会这样想。hibernate决不是为了省去几行代码。下面再谈谈使用procedrue,在一般的商业项目中(不是demo),一般的业务都是较复杂的,所以操作数据库时很多时候都是要用procedure来做,如果用hibernate代码的话,要用事务,还在写一大堆的代码,所以我们就是用procedure实现,再在hibernate中进行调用,但我要问的是,这与用jdbc中调用有什么区别啊,没有什么区别。
------------------------------------------------------------------------
不知道你用的是hibernate2还是hibernate3,不知道你有没有了解过hibernate3的session-per-request模式,如果使用这个模式开发,只需在应用程序开始配置好一个过滤器,以后你就再也不需要和事物打交道了,你的代码中只需要和业务相关的代码。而且hibernate3中的异常也已经改为不需查异常了。不知道我说的这个你知道不知道
严重同意:TinyJimmy(Jimmy) ( ) 信誉:105
楼主的问题层次是不是浅了点啊?我认为你根本不了解hibernate.
private FilterConfig filterConfig;
private SessionFactory sf;
private Logger logger = LogManager.getLogger(HibernateFilter.class); public void init(FilterConfig filterConfig) throws ServletException {
logger.debug("初始化session factory");
sf = HibernateUtil.getSessionFactory();
} //Process the request/response pair
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws ServletException,
IOException {
logger.debug("进入hibernate filter");
try {
logger.debug("开启事务");
sf.getCurrentSession().beginTransaction(); chain.doFilter(request, response); logger.debug("关闭事务");
sf.getCurrentSession().getTransaction().commit(); } catch (Throwable ex) {
ex.printStackTrace();
try {
if (sf.getCurrentSession().getTransaction().isActive()) {
logger.debug("发生异常,回滚事务");
sf.getCurrentSession().getTransaction().rollback();
}
} catch (Throwable rbEx) {
logger.debug("发生异常,回滚事务失败");
rbEx.printStackTrace();
} // Let others handle it... maybe another interceptor for exceptions?
throw new ServletException(ex);
} finally {
logger.debug("结束hibernate filter");
} } //Clean up resources
public void destroy() {
}
}
连ibatis都比它强,ibatis实现SQL纯配置化和可定制缓存+DAO模式我觉得就是即实用也足够!
有人说你不用hibernate那些个程序员把SQL给你写得到处都是:JSP上、JAVABEAN里...你都不知道他会写到哪里去...
把SQL扔到JSP上的程序员就能把hibernate用好用神?我不信。
String hql="select forumBean.username,fromBean.age from ForumBean as forumBean";
if(form==null)
{
return list(session,hql,1,10);
}
else
{
String where="";
return list(session,hql,form.getPageNo(),form.getPageSize());
}
------------------------------------------------------------------------
从这段代码可以看出楼主和楼主的同仁们对MVC还没有理解,对struts和hibernate各自所处的地位和作用也不很清楚,只是一味的赶时髦用了这些个框架!
一直没用。
先写bean,在类的注释及方法注释中写hibernate 的XDoclet标记,用Ant生成hbm文件,生成数据库的表,写一个程序将所有基础数据插入表.这样所有的bean的改动都可以一次性同步
2、使用Criteria来创建查询(不是用HQL),省去了在写HQL或SQL或存储过程的大量排错时间
3、不同数据库间可移植。有以上三点足以解决使用SQL的不足,或许有人说到效率问题(谁能保证每个程序的写的效率都很高?),但与它节约的开发时间比,很多时候是微不足道的。
我水平不够 我不用 我用ibatis 感觉挺好用
select username,age from User where "+scope,paras.toArray());
--------------------
多余的,这样的优化hibernate会替你做,也就是所谓的lazy-load,但是代价就是长连接,也就是说,在你调用getter的时候,session必须不是关闭的。1、维护代码与数据库的表的同步方便:
先写bean,在类的注释及方法注释中写hibernate 的XDoclet标记,用Ant生成hbm文件,生成数据库的表,写一个程序将所有基础数据插入表.这样所有的bean的改动都可以一次性同步
-----------------------------
代码的健壮依赖于 bean,xdoclet标签,ant等等,你不觉得太容易出错了吗?而且还有个可怕的开源代码的升级彼此不协同而且不负责任。3、不同数据库间可移植。
-----------------------------
数据库间的移植有没有hibernate都不会简单,如果你认为仅仅修改了hibernate conf文件中的方言就完成了移植,我只能说相关人员的数据库能力不过关。
-----------------------------
在数据库的表有变动时,你认为依赖人力维护代码容易,还是依赖工具维护容易,你有没有照我说的试过?数据库间的移植有没有hibernate都不会简单,如果你认为仅仅修改了hibernate conf文件中的方言就完成了移植,我只能说相关人员的数据库能力不过关。
-----------------------------你认为直接用SQL时移植的工作量大还是用Hibernate时的移植工作量大?
如果是新设计的数据库,还是比较方便的。