15.3 DAO层设计

15.3.1 Spring管理SessionFactory

通过Spring定义数据源,并配置和管理SessionFactory。该SessionFactory为其他DAO组件的持久化访问提供支持,代码如下所示。

        <! -- 定义数据源Bean -->
        <bean id="dataSource"
              class="org.springframework.jdbc.datasource.DriverManagerDataSource">
              <property name="driverClassName">
                  <value>com.mysql.jdbc.Driver</value>
              </property>
              <property name="url">
                  <value>jdbc:mysql://localhost/mystruts2</value>
              </property>
              <property name="username">
                    <value>root</value>
              </property>
              <property name="password">
                    <value>root</value>
              </property>
        </bean>
        <! -- 定义SessionFactory -->
        <bean id="sessionFactory"
              class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
              <property name="dataSource">
                  <ref bean="dataSource" />
              </property>
              <property name="hibernateProperties">
                  <props>
                        <prop key="hibernate.dialect">
                            org.hibernate.dialect.MySQLDialect
                            </prop>
                            <prop key="hibernate.show_sql">false</prop>
                        </props>
                  </property>
                  <property name="mappingResources">
                        <list>
                            <value>net/hncu/po/User.hbm.xml</value>
                        </list>
              </property>
        </bean>

15.3.2 创建DAO接口

新建UserDAO接口,该接口定义了两个方法,分别用来进行添加用户和根据用户名查找用户操作,代码如下所示。

        package net.hncu.dao;
        import net.hncu.po.User;
        public interface UserDAO {
              //添加用户
              public void add(User user);
              //根据用户名查找用户
              public User findUser(String username);
        }

15.3.3 创建DAO实现类

新建UserDAOImpl类,该类用来实现UserDAO接口。在该类中添加相应方法的具体操作,代码如下所示。

        package net.hncu.dao;
        import java.util.List;
        import net.hncu.po.User;
        import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
        public class UserDAOImpl extends HibernateDaoSupport implements UserDAO{
              //添加用户
              public void add(User user) {
                    getHibernateTemplate().save(user);
              }
              //根据用户名查找用户
              public User findUser(String username) {
                    List l = getHibernateTemplate().find("from User u where u.username = ? ", username);
                    if(l ! = null && l.size() >= 1) {
                              return (User) l.get(0);
                    }
                    return null;
              }
        }

15.3.4 配置DAO组件

在Spring配置文件中定义HibernateTemplate模板类,并为其注入SessionFactory实例。同样配置DAO组件,并为其注入HibernateTemplate实例,代码如下所示。

        <! -- 定义hibernateTemplate -->
        <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
            <property name="sessionFactory">
                  <ref bean="sessionFactory"/>
            </property>
        </bean>
        <! -- 配置DAO组件 -->
        <bean id="userDao" class="net.hncu.dao.UserDAOImpl">
            <property name="hibernateTemplate">
                  <ref bean="hibernateTemplate"/>
            </property>
        </bean>