零基础学Struts
上QQ阅读APP看书,第一时间看更新

16.3 DAO层设计

16.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>

16.3.2 创建DAO接口

新建UserDAO接口,该接口中定义了5个方法,分别用来进行添加用户、删除用户、更新用户、查询所有用户和按ID查询用户操作,代码如下所示。

        package net.hncu.dao;
        import java.util.List;
        import net.hncu.po.User;
        public interface UserDAO {
              //添加用户
              public void save(User user);
              //删除用户
              public void delete(int id);
              //更新用户
              public void update(User user);
              //查询所有用户
              public List queryAll();
              //id查询用户
              public User queryByID(int id);
        }

16.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 save(User user) {
                    this.getHibernateTemplate().save(user);
              }
              //删除用户
              public void delete(int id) {
                    this.getHibernateTemplate().delete(
                            this.getHibernateTemplate().get(User.class, id));
              }
              //更新用户
              public void update(User user) {
                    this.getHibernateTemplate().saveOrUpdate(user);
              }
              //查询所有用户
              public List queryAll() {
                    return this.getHibernateTemplate().find("from User");
              }
              //id查询用户
              public User queryByID(int id) {
                    return (User) this.getHibernateTemplate().get(User.class, id);
              }
        }

16.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>