1.单表操作
ssh框架建好后选择自动生成bean和dao层的代码
2.多表操作
方法一: 例子:用户和视频,uid在视频表中为外键
//根据user的id查询关联表
public Object findAllByVideo(int id) {
log.debug("finding all User instances");
try {
String queryString = "select u from Video v,User u where v.user.id=u.id and v.id="+id;
return getHibernateTemplate().find(queryString).get(0);
} catch (RuntimeException re) {
log.error("find all failed", re);
throw re;
}
}
方法二:如果是自动生成的bean和dao可以利用session直接获取
//session直接获取
public Object findAllByVideo2(Class entityClass,int id){
return getSession().get(entityClass, id);
}
在service层:
Video video = (Video)videoDAO.findAllByVideo2(Video.class, 4);
如果要在web上用方法二,那么要在web.xml上添加以下代码不然会报:no session,如果不在web上运行,必须加session.close手动关闭session
<!-- 配置Spring的OpenSessionInViewFilter,以解决懒加载异常 -->
<filter>
<filter-name>OpenSessionInViewFilter</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInViewFilter</filter-name>
<url-pattern>/(写action的名字)</url-pattern>
</filter-mapping>
不然会报:no session
3.分页
hibernate 自带的query类有setFirstResult()和setMaxResults()两个方法,很方便,可以无需用sql分页语句,直接查询你想分页的所有信息就可以了
//根据字段分页2
public List<TVideo> findAllByPage2(String value,int currentPage, int pageSize){
Session session = getSession();
Query query = session.createQuery("from TVideo where VStatus="+"'"+value+"'");
query.setFirstResult((currentPage-1)*pageSize);
query.setMaxResults(pageSize);
return query.list();
}