public Users Logincheck(Users user)
{
String[] w={user.getUsername(),user.getUserpass()};
Object[] s={"username","userpass"};

String hql="from Users where username=:username and userpass=:userpass";

List users=getHibernateTemplate().findByNamedParam(hql, w, s);

if(users.size()>0)
{
user =(Users) users.get(0);
}
return user;
}这样写不对吗?该怎么写?谢谢!

解决方案 »

  1.   

    findByNamedParam(hql, w, s); 这个方法中的s 值你写死了还有hql语句
      

  2.   

    验证登陆 就是判断用户名和密码就可以了。。没必要把他封装吧。~if(users.size()>0) 这样如果数组为空就空指针。。判断=null
      

  3.   

    不至于吧,登陆验证 你就从form和可持久化对象里面对比就行了,何必这样写。改进下
      

  4.   

    public User findUser(String  name, String pwd){
    return (User)getSession().createQuery(
    "select User  from TUser a where a.name = ? " +
    "and a.pwd = ? ")
    .setParameter(0, name)
    .setParameter(1, pwd)
    .uniqueResult();
    }      看看运行时间!!
      

  5.   

    如果是SSH组合可以这样写:
    public Users Logincheck(Users user) 
    { String hql="from Users where username ='"+user.getUserName()+ "'and userpass='"+user.getUserPass()+"'"; 
    Session session = getSession();
    Query query = session.createQuery(hql);
    List list= query.list();
     
    if(users.size()>0) 

    user =(Users) users.get(0); 

    return user; 

    这样绝对没问题....
      

  6.   

    给你俩个验证登陆的方法希望可以帮到你
    public boolean checkLoginA(User u)
    {
    boolean boo=false;
    Dbcon dbc=new Dbcon();
    Connection con=dbc.getConnection();
    String sql="select password from users where username=? and usertype=?";
    try {
    PreparedStatement pstmt=con.prepareStatement(sql);
    pstmt.setString(1, u.getUsername());
    pstmt.setInt(2, u.getUsertype());
    ResultSet rs=pstmt.executeQuery();
    if(rs.next())
    {
    String password=rs.getString("password");
    if(password.equals(u.getPassword()))
    {
    boo=true;
    }
    }
    con.close();
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    return boo;
    }

    public boolean checkLoginB(User u)
    {
    boolean boo=false;
    Dbcon dbc=new Dbcon();
    Connection con=dbc.getConnection();
    String sql="select count(uid) from users where username=? and password=? and usertype=? ";
    try {
    PreparedStatement pstmt=con.prepareStatement(sql);
    pstmt.setString(1, u.getUsername());
    pstmt.setString(2, u.getPassword());
    pstmt.setInt(3, u.getUsertype());
    ResultSet rs=pstmt.executeQuery();
    if(rs.next())
    {
    if(rs.getInt(1)==1)
    {
    boo=true;
    }
    }
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    return boo;
    }
      

  7.   


    采用SSHAction:
    // 用户登录操作
    public ActionForward checkManager(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {
    ManagerForm managerForm = (ManagerForm)form;
    HttpSession session = request.getSession();
    ManagerForm managerform = (ManagerForm)objectDAO.getObjectForm("from ManagerForm where account='"+managerForm.getAccount()+"' ");
    if(managerform == null){
    request.setAttribute("errorNews", "您输入的帐号不存在!");
    } else if(!managerForm.getPassword().equals(managerform.getPassword())){
    request.setAttribute("errorNews", "您输入的密码不正确");
    } else{
    session.setAttribute("managerform", managerform);
    session.setAttribute("account", managerform.getAccount());
    }
    return mapping.findForward("checkManager");

    }
    objectDAO持久层方法:
    //以condition为查询条件, 查询一组数据, 该方法的返回类型为Object
    public Object getObjectForm(String condition){
    List list = null;
    Object object = null;
    list = this.getHibernateTemplate().find(condition);
    if(list.size() == 1){   //表示只有一条记录
    object = list.get(0);
    }
    return object;
    }objectDAO持久层 交给Spring管理.