高级项目进行3

 1、 如何使用hql查询出某张表的记录总数?

        方法一:

       public static int getCount(Query query)     
    
 if(query==null)     
 {     
  return 0;     
 }     
 ScrollableResults rs=query.scroll(ScrollMode.SCROLL_INSENSITIVE);     
 rs.last();     
 return (rs.getRowNumber()+1);   //rowNumber从0开始,为空时则为-1, 因此做加1操作
   方法二:

       获取表中的记录也可以用count的。语句如下:Session session=this.getSession;string hql="select count(tb) from table tb";Query query=session.createQuery(hql);int count=(Integer)query.uniqueResult();

   方法三: query.list().size;  //query.list()会先初始化query里面的对象.对于执行效率来讲不合理
 

 2、 今天在使用hibernate的scrollResult进行多表查询时出现了如下异常:

         org.hibernate.LazyInitializationException: could not initialize proxy - no Session。

        我是在查从表的同时顺带将从表给查出来了,查看从表的配置文件发现没有设置lazy="false"(因为我知道其默认值就是false)。

但是如果不手动地将其设置为false就会报错, 后当我手动设置后OK。

3、 知道了有一个专门的分页插件(pageBar).

 

4、  struts2的action中如何获取request与session等?

         在struts1.x中是很方便的, 而在struts2中则分为两种情况, 一种为IOC, 一种为非IOC。

   ————————非IOC————————————

  这种方式主要是利用了com.opensymphony.xwork2.ActionContext类以及org.apache.struts2.ServletActionContext类,具体的方法如下所示。

  获得request对象:
A . HttpServletRequest request = ServletActionContext.getRequest ();
B.ActionContext ct= ActionContext.getContext()
   HttpServletRequest request=
(HttpServletRequest)ct.get(ServletActionContext. HTTP_REQUEST );

获得session对象:
在Struts2中底层的session都被封装成了Map类型,我们称之为SessionMap,而平常我们所说的session则是指HttpSession对象,具体的获得方法如下所示。
A. ActionContext actionContext = ActionContext.getContext();   
 
       Map session = actionContext.getSession();   
B.Map session=(Map)ActionContext.getContext().get(ActionContext.SESSION);
得到这个SessionMap之后我们就可以对session进行读写了,如果我们想得到原始的HttpSession可以首先得到HttpServletRequest对象,然后通过request.getSession()来取得原始的HttpSession对象。一般情况下SessionMap已经可以完成所有的工作,我们不必再去碰底层的session了。

————————————IOC方式——————————

  action类实现ServletRequestAware接口,并新建一个HttpServletRequest request
public class UserLoginAction extends ActionSupport implements ServletRequestAware{
   public void setServletRequest(HttpServletRequest request) {
     this.request=request;
  }
然后可以生成的request得到对象,如request.getRemoteAddr()
action类实现SessionAware接口,并创建一个MAP对象session
public class UserLoginAction extends ActionSupport implements ServletRequestAware,SessionAware{
   public void setServletRequest(HttpServletRequest request) {
     this.request=request;
  }
public void setSession(Map session) {
  this.session=session; 
}

       ————————————————————————————————————————

下面先看一个采用第一种方式,在action中得到session的例子  
package s2.ex.action;   
 
 
import java.util.Map;   
 
 
import com.opensymphony.xwork2.ActionContext;   
 
import com.opensymphony.xwork2.ActionSupport;   
 
 
public class SessionTestAction extends ActionSupport {   
 
 
    public String execute() {   
 
     ActionContext actionContext = ActionContext.getContext();   
 
       Map session = actionContext.getSession();   
 
       session.put("USER_NAME", "Test User");   
 
       return SUCCESS;   
 
    }   
 
}  
在这个例子中,通过ActionContext得到session,并往session里放置一个key为USER_NAME,值为Test User的内容。  
   
下面是一个实现org.apache.struts2.interceptor.SessionAware接口来对session操作的例子  
package s2.ex.action;   
 
 
import java.util.Map;   
 
 
import org.apache.struts2.interceptor.SessionAware;   
 
 
import com.opensymphony.xwork2.ActionSupport;   
 
 
public class SessionTest1Action extends ActionSupport implements SessionAware {   
 
    private Map session;   
 
    public void setSession(Map session) {   
 
       this.session = session;   
 
 
    }   
 
    public String execute() {   
 
       this.session.put("USER_NAME", "Test User 1");   
 
       return SUCCESS;   
 
    }   
 
}  
   
在这个例子中实现了接口SessionAware中的setSession方法。  
   

 
    在一个项目中可能会有很多action都需要用到session,如果每个action都来实现org.apache.struts2.interceptor.SessionAware这个接口,可能会显得比较麻烦,所以建议作一个抽象的BaseAction类来实现org.apache.struts2.interceptor.SessionAware接口,以后所有的action只要继承这个BaseAction就可以了。  

  

    下面是一个如何在JSP中使用session的例子。  
<%@ page contentType="text/html; charset=UTF-8" %>   
 
<%@page pageEncoding="utf-8" %>   
 
<%@taglib prefix="s" uri="/struts-tags" %>   
 
<html>   
 
<head>   
 
    <title>Session Test</title>   
 
</head>   
 
 
<body>   
 
<h1><s:property value="#session.USER_NAME"/></h1>   
 
<h1></h1>   
 
</body>   
 
</html>  
 
   一般在项目中往往会往session里放置一个Object,必如说user,user里有个boolean admin和String userName,如果user里存在isAdmin的方法,在jsp中可以通过<s:if test="#session.user.admin">来判断用户有没有管理权限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值