用hibernate3.2跟着书做个登陆学习下
表user 里面放个private UserId id;   UserId 里是 name password email
这些都是系统自己生成的. 
--------------------
UserId id =new UserId();
id.setUserName(logForm.getUser());
id.setUserPs(logForm.getPassw());
User user=new User();
---------------------
我将这样的user传到了下面方法(也是系统的)可是我登陆里名字密码随便写 List里把我user表里所有东西都返回了...
也就是怎么提交都会登陆成功.
-------------------------------------------------------------------------
public List findByExample(User instance) {
log.debug("finding User instance by example");
try {
List results = getSession().createCriteria("user.User").add(
Example.create(instance)).list();
log.debug("find by example successful, result size: "
+ results.size());
return results;
} catch (RuntimeException re) {
log.error("find by example failed", re);
throw re;
}
}
----------------------------------------------------------------------
登陆验证
    public static boolean login(User user){
     IUserDAO dao =DAOFactory.getUserDAO();
     try{  
   List userlist= dao.findByExample(user);
     if(!userlist.isEmpty()){
     System.err.println("用户登录成功!");
     return true;
     }else{
     System.err.println("用户登录失败!");
     return false;
     }
   }catch(HibernateException e){
   System.err.println("无法进行登录验证!");
    return false;
   }finally{
   try{
       dao.getSession().close();
       }catch(Exception e){
       System.err.println("Session对象无法关闭");
       }
   }
    }
-------------------------------------------------------------------
能讲下findByexample怎么用最好 找半天也没找到答案 

解决方案 »

  1.   

    前台传入一个user,由控制层调用 findByexample 方法进行查找并返回,然后再由控制层进行用户判断。
      

  2.   

    你说的就是直接调DAO.结果一样 为了万一 我该了下 还不行
      

  3.   

     结贴给分 呵呵!!!!不要用boolean ,如果你要把用户名 显示出来呢?public List findByExample(User instance) { 
    log.debug("finding User instance by example"); 
    try { 
    List results = getSession().createCriteria("user.User").add( 
    Example.create(instance)).list(); 
    log.debug("find by example successful, result size: " 
    + results.size()); 
    return results; 
    } catch (RuntimeException re) { 
    log.error("find by example failed", re); 
    throw re; 


    //关键部分
    public List logion(String names, String password){

      List list = null;
      Users users = new Users();
      users.setNames(names);
      users.setPasswords(password);
      UsersDAO dao = new UsersDAO();
      List list2 = dao.findByExample(users);
      Iterator or = list2.iterator();
      if(or.hasNext()){//如果是对就对 错就错
      users = (Users)or.next();
      System.out.println("ok");
      }else{
      System.out.println("no");
      }
      return list;
    }
      

  4.   

     结贴给分 呵呵!!!!不要用boolean ,如果你要把用户名 显示出来呢?public List findByExample(User instance) { 
    log.debug("finding User instance by example"); 
    try { 
    List results = getSession().createCriteria("user.User").add( 
    Example.create(instance)).list(); 
    log.debug("find by example successful, result size: " 
    + results.size()); 
    return results; 
    } catch (RuntimeException re) { 
    log.error("find by example failed", re); 
    throw re; 


    //关键部分
    public List logion(String names, String password){

      List list = null;
      Users users = new Users();
      users.setNames(names);
      users.setPasswords(password);
      UsersDAO dao = new UsersDAO();
      List list2 = dao.findByExample(users);
      Iterator or = list2.iterator();
      if(or.hasNext()){//如果是对就对 错就错
      users = (Users)or.next();
      System.out.println("ok");
      }else{
      System.out.println("no");
      }
      return list;
    }
      

  5.   

    users里是没有setNames的只有 setId();
    你这样findByExample什么都不返回了 可能都会出错 我传过UserId进去
      

  6.   


    我的意思是返回 user 实例,但是你在判断的时候把 userlist 中的 password 和 username 取出来进行比较。
      

  7.   

    findByexample()返回的是list.主要问题是不论我传进去的password username值是什么  返回的list里是我 user表里的所有用户。相当于select *from user还有我这里的User里放的是个UserId id.    都是系统生成的
      

  8.   

    findByexample()返回的是list.主要问题是不论我传进去的password username值是什么  返回的list里是我 user表里的所有用户。相当于select *from user还有我这里的User里放的是个UserId id.    都是系统生成的
      

  9.   

    大哥 把全部代码copy出来吧。
    表user 里面放个private UserId id;  UserId 里是 name password email 
    这里我不知道你为什么将UserId独立出来一个实体类,直接用个User实体类就搞掂了。
    还有:
    List results = getSession().createCriteria("user.User").add( 
    Example.create(instance)).list(); CreateCriteria()方法接受的是User.class作为参数吧..................
    我也痛苦中..............
      

  10.   

    大哥 把全部代码copy出来吧。
    表user 里面放个private UserId id;  UserId 里是 name password email 
    这里我不知道你为什么将UserId独立出来一个实体类,直接用个User实体类就搞掂了。
    还有:
    List results = getSession().createCriteria("user.User").add( 
    Example.create(instance)).list(); CreateCriteria()方法接受的是User.class作为参数吧..................
    我也痛苦中..............
      

  11.   


    UserId id =new UserId(); 
    id.setUserName(logForm.getUser()); 
    id.setUserPs(logForm.getPassw()); 
    User user=new User();user.setId(id);//这里可能不是这么写 不过这个意思可能写的不对  用的是组合主键么
    你只把用户名密码set到UserId里 不把UserId放到user实体里 
    应该是用空实体user去查 当然是all的结果了
      

  12.   

    回11楼
    里我不知道你为什么将UserId独立出来一个实体类,--这个我也不明白,是自动生成的。
    你下面说的代码也是findByExample里的 都是生成的。
    我用的是myeclipse6.5GA 里的hibernate3.2 不过我无论换什么都会有那个userId类
    回12
    User user=new User(id)
    user.setId(id);都用了 不是用的空user 我测试时候 能看到我传的值其实就调了一下findbyexample();传了个user.
      

  13.   

    哦 我一般都使用 hibernate3.1
    3.2 没有用过
      

  14.   

    1.建立web项目添加hibernate能力
    2.创建映射文件。生成如下类
       AbstractUser       里面只有一个属性private UserId id;
       AbstractUserId     里面有3个属性对应表user字段;3属性为 name password email
       User               继承 extends AbstractUser 
       UserId             继承 extends AbstractUserId
       IBaseHibernateDAO  接口 方法是public Session getSession();
       BaseHibernateDAO   上面的实现类
       UserDAO            DAO   extends BaseHibernateDAO 可以通过getSession()得session
       就这几个类
       我就是调用public List findByExample(User instance)是UserDAO里的方法。具体实现已经   在copy在上面了。
     3.我写个test测试了下。基本上list都返回表user全部内容
       package user;
    import java.util.List;
    public class Test {
          public static void main(String[] args) {
    // TODO Auto-generated method stub
          System.out.println("开始");
          UserDAO dao=new UserDAO();
          User user=new User();
          UserId id=new UserId();
          id.setUserName("aff");
          id.setUserPs("af");
          user.setId(id);
          List list=dao.findByExample(user);
          if(!list.isEmpty()){
           System.out.println("success"); 
          }else{
           System.out.println("fail"); 
          }
          System.out.println("结束");
    }
    }

    3.1我也生成UserId父子类 你的不生成??