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信息。


 

posted @ 2013-06-17 12:08  little_hsu  阅读(616)  评论(0编辑  收藏  举报