随笔-54  评论-0  文章-2  trackbacks-0

    趁今天休息,把昨天不会的知识总结一下,这几天小汤给我们带项目,给大家的感觉就是老师水平很高,我们还得苦修几年才行啊,小汤经验挺丰富的,以至于我们 遇到问题时,他一问这个对象可以有吗?下面万籁无声时,小汤一般就说“这个可以有”,好了,还是总结知识点吧:
1.HIbernate创建查询,首先拿到session,再
 List list = session .createQuery(//
                  " FROM Department d WHERE d.parentId = ?")//
                 .setParameter(0,值)//
    .list();
之后测试,一般对于CRUD操作,都要单元测试。
注意:
  用//格式固定格式,Hibernate源码就是这样固定格式的
2.用到的标签(不熟练的)举例:
<html:link action="/dept?method=editUI&id=${department.id}">修改< /html:link>
<html:link action="/dept?method=del&id=${department.id}&parentId=${parent.id}" onclick="return window.confirm('您确定要删除这条记录吗?')">删除</html:link>

3.外键可以为空

4.游离:数据库中有,但没有和session关联,Hibernate根据id判定是否是游离状态,如果你id有值 ,则不是游离。
我在网上查了一下什么是游离对象?
游离对象的特征。游离对象具有以下特征:
(1) 不再位于Session的缓存中,也可以说,游离对象不被Session关联。
(2) 游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录(前提条件是没有其他程序删除了这条记录)。

游离对象与临时对象的相同之处在于,两者都不被Session关联,因此Hibernate不会保证它们的属性变化与数据库保持同步。游离对象与临时对象 的区别在于:前者是由持久化对象转变过来的,因此可能在数据库中还存在对应的记录,而后者在数据库中没有对应的记录。

Session的以下方法使持久化对象转变为游离对象:
(1) 当调用Session的close()方法时,Session的缓存被清空,缓存中的所有持久化对象都变为游离对象。如果在应用程序中没有引用变量引用这 些游离对象,它们就会结束生命周期。
(2)Session的evict()方法能够从缓存中删除一个持久化对象,使它变为游离状态。当Session的缓存中保存了大量的持久化对象,会消耗 许多内存空间,为了提高性能,可以考虑调用evict()方法,从缓存中删除一些持久化对象。但是多数情况下不推荐使用evict()方法,而应该通过查 询语言,或者显式的导航来控制对象图的深度。

感觉这段话说的挺好的,就copy下来

5.注册时间转换器
   转换器为便于在项目中易于维护,放在一个Servlet中,然后将Servlet配置在web.xml中
时间转换器:
Java代码
package cn.itcast;   
import java.text.ParseException;   
import java.text.SimpleDateFormat;   
import java.util.Date;   
 
import org.apache.commons.beanutils.Converter;   
 
public class UtilDateConverter implements Converter {   
 
    private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");   
 
    public Object convert(Class type, Object value) {   
        if (value == null) {   
            return value;   
        }   
        if (value instanceof Date) {   
            return value;   
        }   
        if (value instanceof String) {   
            try {   
                return format.parse((String) value);   
            } catch (ParseException ignore) {   
            }   
        }   
        return null;   
    }   
}  

Servlet类:
Java代码
package cn.itcast;   
import java.util.Date;   
import javax.servlet.ServletException;   
import javax.servlet.http.HttpServlet;   
 
import org.apache.commons.beanutils.ConvertUtils;   
 
public class InitConvert extends HttpServlet {   
    @Override   
    public void init() throws ServletException {   
        //注册转换器   
        ConvertUtils.register(new UtilDateConverter(), Date.class);   
    }   
}  

web.xml配置:
<servlet>
    <servlet-name>InitConvert </servlet-name>
    <servlet-class>cn.itacst.InitConvert </servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
 
6. ActionForward 动态传参问题:
  ActionForward af = mapping.findForward(“toList”);
return new ActionForward(af.getPath+"&parentId="+af,af.getRedirect);



好了,今天就写到此吧,明天还要上课,睡了!





































posted on 2010-02-07 00:25 d66380022 阅读(157) 评论(0)  编辑  收藏