S2SH 第一次整合的经历

好不容易把S2SH整合到了一块儿 记下来  之后用到了直接复制粘贴。。。 mysql

第一步:定义了各类model 实现getter()和setter()方法  以及配置name.hbm.xml web

 

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > spring

<hibernate-mapping package="com.yang.model">
 <class name="User" table="user_table">
  <id name="id" column="user_id">
   <generator class="identity" />
  </id>
  <property name="username" type="string" not-null="true" length="50" unique="true" />
  <property name="password" type="string" not-null="true" length="50" />
  <property name="email" type="string" length="100" />
  <property name="name" type="string" length="100" />
  <property name="phone" type="string" length="50" />
  <property name="date" type="string" length="50" />
  <set name="articles">
   <key column="article_id" />
   <one-to-many class="Article" />
  </set>
  <set name="comments">
   <key column="comment_id" />
   <one-to-many class="Comment" />
  </set>
  <set name="messages">
   <key column="message_id" />
   <one-to-many class="Message" />
  </set>
 </class>
</hibernate-mapping> sql

第二步:定义了DAO接口 里面定义了针对model的各类操做方法 数据库

这是我定义的一个UserDAO: apache

 public interface UserDAO {
         void addUser(User user);
         User getUserById(int id);
         void updateUser(User user);
         String login(String username,String password );
         User getUserByName(String username);
} session

第三部:定义DaoImpl类  这个类要继承了抽象类 HibernateDaoSupport 而且实现刚刚定义的DAO接口  app

UserDaoImpl的实现代码: jsp

package com.yang.daoImpl; ide

import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.yang.dao.UserDAO;
import com.yang.model.User;

public class UserDaoImpl extends HibernateDaoSupport implements UserDAO {

 @Override
 public void addUser(User user) {
  System.out.println(user.getUsername());
  System.out.println(user.getPassword());
  getHibernateTemplate().save(user);
 }

 @Override
 public User getUserById(int id) {
  getHibernateTemplate().get(User.class, id);
  return null;
 }

 @Override
 public void updateUser(User user) {
  getHibernateTemplate().save(user);
  
 }

 @Override
 public String login(String username,String password) {
  Session session = getSession();
  String hql="select password from User where username=?";
  Query query = session.createQuery(hql);
  query.setParameter(0,username);
  String str = (String) query.uniqueResult();
  if(password.equals(str))
   return "success";
  else
   return "input";
 }

 @Override
 public User getUserByName(String username) {
  Session session = getSession();
  String hql="select from User where username=?";
  Query query = session.createQuery(hql);
  query.setParameter(0,username);
  return (User)query.uniqueResult();
 }

}

第四步:定义Action类 继承ActionSupport  而且在这个Action的内部 咱们要定义好以前说过DaoImpl 而且要有相对应的get和set方法 这样才能在下一步经过spring注入到action。

第五步: 配置.xml文件

首先是web.xml

 

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>    //spring的配置

 <filter>
  <filter-name>struts-cleanup</filter-name>
  <filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
 </filter>

 <filter>
  <filter-name>sitemesh</filter-name>
  <filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
 </filter>

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts-cleanup</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>sitemesh</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

用到了sitemesh 因此在配置文件里面影响到了struts的配置 不用的话能够直接和前面的clean-up一块儿删掉

而后配置applicationContext.xml

<?xml version="1.0" encoding="GBK"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

 <!-- 定义数据源Bean,使用C3P0数据源实现 -->
 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  destroy-method="close">
  <!-- 指定链接数据库的驱动 -->
  <property name="driverClass" value="com.mysql.jdbc.Driver" />
  <!-- 指定链接数据库的URL -->
  <property name="jdbcUrl" value="jdbc:mysql://localhost/blog" />
  <!-- 指定链接数据库的用户名 -->
  <property name="user" value="root" />
  <!-- 指定链接数据库的密码 -->
  <property name="password" value="yang" />
  <!-- 指定链接数据库链接池的最大链接数 -->
  <property name="maxPoolSize" value="20" />
  <!-- 指定链接数据库链接池的最小链接数 -->
  <property name="minPoolSize" value="1" />
  <!-- 指定链接数据库链接池的初始化链接数 -->
  <property name="initialPoolSize" value="1" />
  <!-- 指定链接数据库链接池的链接的最大空闲时间 -->
  <property name="maxIdleTime" value="20" />
 </bean>

 <!--定义了Hibernate的SessionFactory -->
 <bean id="sessionFactory"
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="mappingResources">
   <list>
    <value>com/yang/model/User.hbm.xml</value>
    <value>com/yang/model/Message.hbm.xml</value>
    <value>com/yang/model/Comment.hbm.xml</value>
    <value>com/yang/model/Article.hbm.xml</value>
   </list>
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
    <prop key="show_sql">true</prop>
    <prop key="hibernate.hbm2ddl.auto">update</prop>
    <prop key="hibernate.jdbc.batch_size">20</prop>
   </props>
  </property>
 </bean>

 <bean id="transactionManager"
  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  <property name="sessionFactory" ref="sessionFactory" />
 </bean>

 <bean id="userDao" class="com.yang.daoImpl.UserDaoImpl">
  <property name="sessionFactory">
   <ref bean="sessionFactory" />
  </property>
 </bean>
 
 <bean id="articleDao" class="com.yang.daoImpl.ArticleDaoImpl">
  <property name="sessionFactory">
   <ref bean="sessionFactory" />
  </property>
 </bean>

 <bean id="userAction" class="com.yang.action.UserAction"  scope="prototype">
  <property name="userDao" ref="userDao" />
 </bean>
 
 <bean id="articleAction" class="com.yang.action.ArticleAction"  scope="prototype">
  <property name="articleDao" ref="articleDao" />
 </bean>

</beans>

完整的applicationContext.xml配置文件

咱们须要注意的是在配置DaoImpl bean的时候 必定要将sessionFactory引入进去

 <bean id="userDao" class="com.yang.daoImpl.UserDaoImpl">
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
</bean>

虽然在定义的时候DaoImpl的时候 没有声明这个参数 可是因为继承了HibernateDaoSupport 想要使用相关的方法就须要注入SessionFactory

而后在定义的Action的bean引入以前声明的DaoImpl

还须要配置struts.xml

 <action name="register" class="userAction" method="register" >
  <result name="success">login_success_page.jsp</result>
 </action>

配置action的时候 class的属性直接填写在applicationContext.xml声明的对应的bean id 就好了 spring 会帮咱们自动的注入。

第六步:完成界面。

相关文章
相关标签/搜索