小弟新手别喷!!!我现在配置了hibernate.cfg.xml 写了一个User的实体类 建了个Table user_register 我想 通过hibernate来访问建好的table表,显示在浏览器上!我就想要个例子,最好有增删改查,谢谢各位大神了!!

解决方案 »

  1.   

    数据层:    /*一定要有工具给你自动生成的session工厂(如果你用的IDE是MyEclipse那么在添Hibernate      
    *将会给你自动生成)。
    */
       Session sess = HibernateSessionFactory.getSession();
       User u = new User();
       u.setName("张三");
       u.setAge("18");
       .....给属性赋值
       sess.save(u);  //添加
       sess.update(u);  //在保存的时候、一定要给User的Id属性赋值更新跟添加的区别就在Id(主键)属性
        sess.detele(u); //删除的时候、也要Id属性。    //sess.get()方法返回一个Object对象
        User user = sess.get(User.class,u.getId);  //根据编号获取一条记录(User.class要查询的类)。
        
        //其中User类名开头字母要大写(就是跟你的javaBean名称一样)——查询全部记录
        Query query = sess.CreateQuery("你的hql语句如:from User");
       List list = query.list();  //query.list()返回一个list集合
       //如果有参数
       //String hql = "from User where name = :name ";
       //Query query = sess.CreateQuery(hql);
      //query.setString("name","张三");  //还有很多中设值参数的方法、自己下去google一下。
      //List list = query.list();
       值得注意的是当你只要查询某张表中的某几个字段的时候、Hibernate会根据你要查询的字段的个数给你返回不同的类型(虽然qeury.list方法返回的都是list但是list中存储的类型不同)
     如:    String hql ="select u.name,u.age from User u";
        List list = query.list();
        //当你用对象去接收list集合中的值的时候...嘿嘿!!!
         for(int i = 0 ; i <list.size(); i++){
            User u = list.get(i);  //这句会出错,因为你list集合中存储的是数组不是对象
        }   那么什么时候是对象、什么时候是数组呢!
       好像、只查询一个字段的时候、返回的是Object、查询俩个、或者两个以上字段的都是数组(当然、我不确定哈~~~好想是这样的、LZ自己试一下! 我也试一下)
        我也只记得个大概、希望大侠们给说说、!其实呢!LZ最好还是买一本Hibernate的书好好啃啃!!!
      

  2.   

    忘了说了、在Hibernate中也可以使用sql语句!只需要将query.createQuery();换成:
    query.createSqlQuery();  用这个方法就行了!!!
      

  3.   

    感觉有点头大,我的写法是这样的public class UserAction extends ActionSupport{


    HttpServletRequest request = ServletActionContext.getRequest(); private static SessionFactory sf; public static void beforeClass() {
    sf = new AnnotationConfiguration().configure().buildSessionFactory();
    } public static void afterClass() {
    sf.close();
    }

    public String  getUserList(){
    Session s = sf.getCurrentSession();
    s.beginTransaction();
    List list = s.createSQLQuery("select * from user_register").list() ; 
    request.setAttribute("register",list);
    s.getTransaction().commit();
    return "getList";
    }

    }
    然后在JSP页面,利用EL表达式,遍历一下就可以了吧    <c:forEach var="register" items="${register}">
        <tr>
        <td>${register.id}</td>
        <td>${register.username}</td>
        <td>${register.email}</td>
        <td>${register.phone}</td>
        <td>${register.home}</td>
        <td><a href="${pageContext.request.contextPath}/user/register!delUser?user.id=${register.id}">删除</a></td>
        <td><a href="${pageContext.request.contextPath}/user/register!updateUser?user.id=${register.id}">修改</a></td>
        </tr>
        </c:forEach>这样不就显示了吗??但想的很简单,做起来才知道可能是错的,最少现在是在new Session()的时候报空指针,我明明new了工厂了呀,怎么会是空指针呢!!!
      

  4.   

    hiberbate好像不擅长干这个事儿,为啥不直接用JDBC呢?还方便直接。
      

  5.   

    如果你用ECLISE的话是有自动生成DAO方法的功能的,写都不用写,直接调用生成的增删改查就行了
      

  6.   

    我知道啊,我用过JDBC,DAO,javaBean不过在学Hibernate的时候说higernate是对JDBC的封装,我想用了JDBC 那不就是说不用再用那些繁锁的接接代码了嘛,我就把以前写的 方案重新改写了,查询我应该成功了,很简单,原本几个文件完成了步骤现在一个java文件就搞定了,感觉挺爽的不过现在增删改又出新问题了!!有代码的贴出来晒晒吧!!!