橙色闪光
2015-08-26 06:21
采纳率: 25%
浏览 2.1k

Struts2与Hibernate整合时无法读取数据库中的数据

小弟最近学习SSH框架,遇到一个问题,同时使用Struts2和Hibernate3.6时,Action中调用hibernateUtil的方法无法获取数据,而在测试类的main()方法里却能成功调用,小弟百思不得其解,恳请各位大神指点。

关键源代码如下:

业务逻辑ShowStuAction:

 public class ShowStuAction extends ActionSupport {

    private int page ;
    private  List<Student> result;

    public static void main(String args[]){
        List<Student> result = HibernateUtil.queryByPage("select stu from Student as stu",null,2, 20);
        System.out.println(result.size());
        for(Student s: result){
            System.out.println("学号" + s.getStu_no());
            System.out.println("姓名: " + s.getStu_name());
        }
    }

    public String execute(){

        result = HibernateUtil.queryByPage("select stu from Student as stu",null,1,20);
                if(result.isEmpty()){
                    System.out.println("Result is Empty");
                }
                return "success";
        }

hibernateUtil类关键代码:

 public class HibernateUtil {

        private static SessionFactory sessionFactory;

        /**
         * @return 获取会话工厂
         */
        public static SessionFactory getSessionFactory()
        {
            //读取Hibernate的配置文件  hibernamte.cfg.xml文件
            Configuration con=new Configuration().configure();
            SessionFactory sessionFactory=con.buildSessionFactory();
            return sessionFactory;
        }

        /**
         * @return 获取会话对象
         */
        public static Session getSession()
        {
            return getSessionFactory().openSession();
        }

                 /**
         * @param <T>
         * @param sql
         * @param param
         * @param page
         * @param size
         * @return 实现分页查询
         */
        @SuppressWarnings("unchecked")
        public static <T> List<T> queryByPage(String sql,String[] param,int page,int size)
        {
            System.out.println("QueryByPage");
            List<T> list=new ArrayList<T>();
            Session session=null;
            try
            {
                session=getSession();
                Query query=session.createQuery(sql);
                if(param!=null)
                {
                    for(int i=0;i<param.length;i++)
                    {
                        query.setString(i,param[i]);
                    }
                }
                //筛选条数
                query.setFirstResult((page - 1) * size);
                query.setMaxResults(size);
                list=query.list();
                for(Object t : query.list()){
                    System.out.println("nima");
                    System.out.println(t.toString());
                }
            }
            catch (Exception e)
            {
            }
            finally
            {
                if(session!=null)
                {
                    session.close();
                }
            }

            return list;
        }

hibernate3.6配置文件

 <hibernate-configuration>
    <session-factory>
        <property name="connection.driver">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/whu</property>
        <property name="connection.username">root</property>
        <property name="connection.password">123456</property>
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.cache.use_second_level_cache" >false</property>

        <mapping resource="pojo/Student.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

Struts2 配置文件

 <struts>
    <constant name="struts.configuration.xml.reload" value="true" />
    <constant name="struts.devMode" value="true" />
    <package name="stu" extends="struts-default">
        <action name="showStu" class="action.ShowStuAction" method="execute">
            <result name="success" >/content/show-stu-success.jsp</result>
        </action>
    </package>

</struts>

运行时,ShowStuAction中的main()方法可以成功地获取数据,而execute()方法中的数据总是空的,后台没有报错。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

7条回答 默认 最新

  • corncob 2015-08-26 06:32

    没有初始化集合,最好初始化一下,有get、set方法吗?

    打赏 评论
  • 另一花生 2015-08-26 11:01

    private List result; 你为啥是私有的集合呢

    没有报错的原因,是你没有在execute方法上面加异常抛出啊

    打赏 评论
  • xiaoxu562550031 2015-08-27 02:25

    应该是你视图层有问题吧,你把视图层的代码贴出来看看

    打赏 评论
  • 橙色闪光 2015-08-27 03:18

    我自己在Debug后发现根源问题在ShowStuAction调用hibernateUtil的QueryByPage方法时,query.list()语句没有取到数据,为啥就取不到尼

    打赏 评论
  • yuke198907 2015-08-27 04:49

    你直接在execute方法里输出试试看看有没有

    打赏 评论
  • Paul_Yin_xiu 2015-08-27 09:24

    Configuration con=new Configuration().configure();
    改成
    Configuration con=new Configuration().configure(“hibernamte.cfg.xml文件路径,从classpath开始用/隔开”);

    打赏 评论
  • 橙色闪光 2015-08-27 12:12

    out:项目编译输出目录src web 项目源代码

    打赏 评论

相关推荐 更多相似问题