实现DAO层。DAO层主要完成对数据库的操作。
管理SessionFactory。前面操作数据库时,需要利用配置得到SessionFactory,而spring可以像管理普通Bean一样管理SessionFactory,无需开发者手动管理。初始化好后,Spring容器负责在其他DAO组件进行持久化时将SessionFactory注入对应的DAO组件。配置SessionFactory类似普通Bean,但要提前在applicationContext.xml中配置一个数据源,代码如下:
com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/dbFirstJBPM root 123
dbTable/User.hbm.xml org.hibernate.dialect.MySQLDialect true update 20
编写DAO接口。为了让业务逻辑组件依赖DAO接口,而不是实现类,更好解耦。主要包括增、删、改操作和根据业务需要的一些查询操作。例子中主要使用了根据用户名和密码查询数据库中是否存在记录的接口,内容如下:
package dao;
import dbTable.User;
public interface UserDao { public User findUserByNameAndPass(String user_name,String user_password);}
实现DAO组件。因为系统中使用了spring,可以基于springDAO实现DAO组件。spring提供了一个HibernateDaoSupport基类,利用其中的getHibernateTemplate()方法,可以很方便实现DAO组件。代码如下:
package dao;
import java.util.List;import org.springframework.orm.hibernate3.HibernateTemplate;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import dbTable.User;
public class UserDaoImpl extends HibernateDaoSupport implements UserDao { private HibernateTemplate ht; public User findUserByNameAndPass(String user_name,String user_password){ ht=getHibernateTemplate(); List userList=ht.find("from User ur where ur.user_name=? and ur.user_password=?",new String[]{user_name,user_password}); if(userList!=null && userList.size()>=1){ return (User)userList.get(0); } else return null; }}
配置DAO组件。上面的DAO组件基于Hibernate,必须有SessionFactory的支持。前面已经配置好由spring管理SessionFactory,所以需要接受容器注入。为使DAO组件接受spring容器注入SessionFactory引用,必须在组件中提供对应的setter方法。上面DAO中没有,但是它继承的HibernateDaoSupport中包含了对应的setter方法。这里只需要在applicationContext.xml中配置组件。如下: