好不容易把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 會幫咱們自動的注入。
第六步:完成界面。