J2EE数据库后台开发步骤(附HQL使用教程)
假设我们要建表X,那么我将需要执行以下步骤:
注意:在我们的项目中,我们将DAO文件和X.hbm.xml归入DAO包,将表的实例化放入model包,将Service Implement放入ServiceImpl包,将Service Interface放入Service包。另外,dao-background.xml保存dao-xml信息,service-background.xml保存service-xml信息。
1. 连接数据库。
2. 生成表x的DAO,实例化类和hbm.xml。
3. 将实例化类和hbm.xml移到DAO包
4. 修改hbm.xml,注释掉未添加的键值关联
5. 建立XServiceImpl文件,编写Impl代码
6. 提取Service Interface到Service包,类型规范为XService
7. 修改dao-background.xml和service-background.xml,即添加DAO和service信息
8. 新建JUNITtest,测试。
如果需要在项目中使用HQL(以分页为例),可以执行如下步骤。
说明:这里只包含基本的架构方式(参考《轻量级Jave EE》),可能有误。
1. 在DAO或者Service里添加HQL语句(本项目放入DAO包):
2. 注意提交事务和关闭session(这是后期开发遇到的问题)。
//added manually by Van_ruin public static List<ProductInfo> findAllRecordByPage(int start,int limit){ List<ProductInfo> productTypeInfos; Session session = HibernateUtil.currentSession(); Transaction tx = session.beginTransaction(); productTypeInfos = session.createQuery("from ProductInfo") .setFirstResult(start) .setMaxResults(limit) .list(); tx.commit(); HibernateUtil.closeSession(); return productTypeInfos; }
这里会发现Session类和HibernateUtil类都未导入,Session类来自于org.hibernate.Session;HibernateUtil则为自己新建(代码来自于《轻量级Jave EE》)。可以将这个类放到同目录下。
package com.background.dao; import org.hibernate.*; import org.hibernate.cfg.*; public class HibernateUtil { public static final SessionFactory sessionFactory; static { try { //采用默认的hibernate.cfg.xml来启动一个Configuration的实例 Configuration configuration = new Configuration() .configure(); //由Configuration的实例来创建一个SessionFactory实例 sessionFactory = configuration.buildSessionFactory(); } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } //ThreadLocal可以隔离多个线程的数据共享,因此不再需要对线程同步 public static final ThreadLocal<Session> session = new ThreadLocal<Session>(); public static Session currentSession() throws HibernateException { Session s = session.get(); //如果该线程还没有Session,则创建一个新的Session if (s == null) { s = sessionFactory.openSession(); //将获得的Session变量存储在ThreadLocal变量session里 session.set(s); } return s; } public static void closeSession() throws HibernateException { Session s = session.get(); if (s != null) s.close(); session.set(null); } }
2. 添加ServiceImpl中的函数(如果HQL已经放入Impl中,则不需要)
3. 添加ServiceInterface函数。
4. 测试。
简单实用的HQL语句:
1. 排序: from *(实体名) order by *(属性值) [desc]
2. 排序对象为外键的时候: from *(实体名) order by *(实体属性值).*(外键属性)
action开发流程:
1. 根据用例添加action方法。
2. 如果service内没有现成方法,添加service方法。
3. 如果需要用到HQL,在DAO中添加方法。
4. 添加strut信息。
5. 添加action信息。