问题描述
- Struts2与Hibernate整合时无法读取数据库中的数据 2C
- 小弟最近学习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""null2 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""null120); 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 sqlString[] paramint pageint 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(iparam[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()方法中的数据总是空的,后台没有报错。
解决方案
没有初始化集合,最好初始化一下,有get、set方法吗?
解决方案二:
private List result; 你为啥是私有的集合呢
没有报错的原因,是你没有在execute方法上面加异常抛出啊
解决方案三:
应该是你视图层有问题吧,你把视图层的代码贴出来看看
解决方案四:
我自己在Debug后发现根源问题在ShowStuAction调用hibernateUtil的QueryByPage方法时,query.list()语句没有取到数据,为啥就取不到尼
解决方案五:
你直接在execute方法里输出试试看看有没有
解决方案六:
Configuration con=new Configuration().configure();
改成
Configuration con=new Configuration().configure(“hibernamte.cfg.xml文件路径,从classpath开始用/隔开”);
时间: 2024-10-28 18:16:08