struts2+spring+hibernate集成(annotation版)

来源:互联网 发布:linux 切换root 编辑:程序博客网 时间:2024/05/22 17:51

费话不多说......

(1)由于本人最常用的是Oracle,所以本例就采用Oracle为例,下面是建表语句:

--用户表create table t_user( user_id number primary key not null,--编号 user_name varchar2(24),--姓名 user_sex varchar2(4),--性别 user_class varchar2(24)--班级);create sequence user_seqstart with 1increment by 1;insert into t_user values(user_seq.nextval,'张一','男','大班');insert into t_user values(user_seq.nextval,'张二','男','大班');insert into t_user values(user_seq.nextval,'张三','男','大班');insert into t_user values(user_seq.nextval,'张四','男','大班');insert into t_user values(user_seq.nextval,'张五','男','大班');insert into t_user values(user_seq.nextval,'李一','女','小班');insert into t_user values(user_seq.nextval,'李二','女','小班');insert into t_user values(user_seq.nextval,'李三','女','小班');insert into t_user values(user_seq.nextval,'李四','女','小班');insert into t_user values(user_seq.nextval,'李五','女','小班');select * from t_user;


(2)spring配置文件,个人主要分成两个,便于管理,放到src目录下,

首先是数据源配置applicationContext-datasource.xml

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"  destroy-method="close">        <property name="driverClass"><value>oracle.jdbc.driver.OracleDriver</value></property>        <property name="jdbcUrl"><value>jdbc:oracle:thin:@localhost:1521:ORCL</value></property>                      <property name="user"><value>scott</value></property>                <property name="password"><value>tiger</value></property>              <property name="minPoolSize"><value>5</value></property>        <property name="maxPoolSize"><value>50</value></property>        <property name="maxIdleTime"><value>1800</value></property>        <property name="acquireIncrement"><value>5</value></property>        <property name="maxStatements"><value>0</value></property>        <property name="maxStatementsPerConnection"><value>100</value></property>        <property name="initialPoolSize"><value>5</value></property>        <property name="acquireRetryAttempts"><value>30</value></property>        <property name="breakAfterAcquireFailure"><value>false</value></property>        <property name="testConnectionOnCheckout"><value>false</value></property>        <property name="idleConnectionTestPeriod"><value>1800</value></property>  </bean><!-- 注入jdbcTemplate,查询数据时使用 --><bean id="jdbcTemplete" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean><!--              <context:annotation-config></context:annotation-config>         -->         <!-- 如果配置了自动扫描,则上面的可以注释掉 -->         <context:component-scan base-package="com.test"></context:component-scan></beans>



然后是sessionFactory以及事务相关配置 applicationContext-hibernate.xml,将实体bean以及事务交给spring来管理:

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"><bean id="sessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"><property name="dataSource" ref="dataSource"></property><property name="hibernateProperties">     <props>            <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9iDialect</prop>            <prop key="hibernate.show_sql">false</prop>            <prop key="hibernate.format_sql">false</prop>            <prop key="hibernate.hbm2ddl.auto">update</prop>            <prop key="hibernate.connection.release_mode">auto</prop>         </props>    </property>   <property name="mappingDirectoryLocations">   <list>      <value>classpath:com/test/model/</value>   </list>   </property></bean><bean name="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">     <property name="sessionFactory" ref="sessionFactory"></property>    </bean>    <bean name="baseTransaction" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">  <property name="transactionManager" ref="transactionManager"></property>  <property name="proxyTargetClass" value="true"></property>  <property name="transactionAttributes">  <props>  <prop key="create*">PROPAGATION_REQUIRED</prop>  <prop key="save*">PROPAGATION_REQUIRED</prop>  <prop key="update*">PROPAGATION_REQUIRED</prop>  <prop key="edit*">PROPAGATION_REQUIRED</prop>  <prop key="del*">PROPAGATION_REQUIRED</prop>  <prop key="copy*">PROPAGATION_REQUIRED</prop>  <prop key="sync*">PROPAGATION_REQUIRED</prop>  <prop key="*">readOnly</prop>  </props>  </property>  </bean></beans>


(3)接下来就是struts的配置文件了,同样放到src目录下,struts.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" ><struts><constant name="struts.ui.theme" value="simple" /><constant name="struts.ui.templateDir" value="template" /><constant name="struts.ui.templateSuffix" value="ftl" /><constant name="struts.devMode" value="true"></constant><constant name="struts.configuration.xml.reload" value="true"></constant><package name="default" extends="struts-default"><action name="userAction" class="com.test.user.action.UserAction"><result name="all">/all.jsp</result><!-- 此处代码配置forward跳转,可不必理会 --><result name="all_group">/all_group.jsp</result></action></package></struts>



(4)接下来就是最核心的web.xml配置了,代码如下:

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><filter><filter-name>struts</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts</filter-name><url-pattern>/*</url-pattern></filter-mapping><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext-*.xml</param-value></context-param>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>


相关配置做好了,接下来就开始以用户添加和查询为例......
(5)User.java,实体Bean

package com.test.model;import java.io.Serializable;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.SequenceGenerator;import javax.persistence.Table;@Entity@Table(name="t_user",catalog="scott")public class User implements Serializable{private int user_id;private String user_name;private String user_sex;private String user_class;public User(){}public User(String user_name,String user_sex,String user_class){this.user_name = user_name;this.user_sex=user_sex;this.user_class=user_class;}@Id@Column(name="user_id")@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="user_seq")@SequenceGenerator(sequenceName="user_seq",name="user_seq")public int getUser_id() {return user_id;}public void setUser_id(int user_id) {this.user_id = user_id;}@Column(name="user_name",length=24)public String getUser_name() {return user_name;}public void setUser_name(String user_name) {this.user_name = user_name;}@Column(name="user_sex",length=4)public String getUser_sex() {return user_sex;}public void setUser_sex(String user_sex) {this.user_sex = user_sex;}@Column(name="user_class",length=24)public String getUser_class() {return user_class;}public void setUser_class(String user_class) {this.user_class = user_class;}}

(6)新建接口类:UserService.java

package com.test.user.service;import java.util.List;import org.springframework.stereotype.Service;import com.test.model.User;@Servicepublic interface UserService {/************* * 创建用户 *  * @param user * @throws Exception */public void createUser(User user) throws Exception;/************ * 获取用户列表 *  * @return * @throws Exception */public List<User> getAllUser() throws Exception;}

(6)新建UserDao,实现增加和查询的功能,继承HibernateDaoSupport ,代码如下:

package com.test.user.dao;import java.util.ArrayList;import java.util.List;import javax.annotation.Resource;import org.hibernate.SessionFactory;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.support.rowset.SqlRowSet;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import org.springframework.stereotype.Repository;import com.test.model.User;@Repositorypublic class UserDao extends HibernateDaoSupport {private JdbcTemplate jdbcTemplate;@Resourcepublic void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}@Resourcepublic void setSessionFactoryOverride(SessionFactory sessionFactory) {super.setSessionFactory(sessionFactory);}public void createUser(User user) throws Exception {this.getHibernateTemplate().save(user);}@SuppressWarnings("unchecked")public List<User> getAllUser() throws Exception {// return this.getHibernateTemplate().find("from User");// 用jdbcTemplate查询List<User> list = new ArrayList<User>();SqlRowSet rs = this.jdbcTemplate.queryForRowSet("select user_id,user_name,user_sex,user_class from t_user");while (rs.next()) {User user = new User();user.setUser_id(rs.getInt("user_id"));user.setUser_name(rs.getString("user_name"));user.setUser_sex(rs.getString("user_sex"));user.setUser_class(rs.getString("user_class"));list.add(user);}return list;}}


(7)新建UserServiceImpl.java,注入UserDao,调用UserDao里的方法,实现UserServie接口,代码如下:

package com.test.user.service.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Component;import com.test.model.User;import com.test.user.dao.UserDao;import com.test.user.service.UserService;@Componentpublic class UserServiceImpl implements UserService {@Resourceprivate UserDao userDao;@Overridepublic void createUser(User user) throws Exception {this.userDao.createUser(user);}@Overridepublic List<User> getAllUser() throws Exception {return this.userDao.getAllUser();}}

(8)接下来理所应当就是我们的控制器UserAction.java类了

package com.test.user.action;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.annotation.Resource;import org.springframework.stereotype.Controller;import com.opensymphony.xwork2.ActionSupport;import com.test.model.User;import com.test.user.service.UserService;@Controllerpublic class UserAction extends ActionSupport {@Resourceprivate UserService userService;private List<User> userList = new ArrayList<User>();public List<User> getUserList() {return userList;}public void setUserList(List<User> userList) {this.userList = userList;}public String getAllUser() {try {//this.userList = this.userService.getAllUser();//全查询this.userList = new ArrayList<User>();System.out.println(this.userList.size());} catch (Exception e) {e.printStackTrace();}return "all";}}

(10)为了避免麻烦就不用jsp页面进行演示,直接用Junit进行测试,添加jar包junit-4.8.2.jar,测试代码如下:


package com.test.test;import java.util.List;import org.junit.AfterClass;import org.junit.BeforeClass;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.test.user.service.UserService;public class UserTest {private static UserService userService;@BeforeClasspublic static void setUpBeforeClass() throws Exception {System.out.println("JUnit start......");ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext-*.xml");userService=(UserService) app.getBean("userServiceImpl");}@AfterClasspublic static void afterClass() throws Exception {System.out.println("JUnit end......");}@Testpublic void getAllUser(){try {System.out.println("用户数:"+this.userService.getAllUser().size());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}//@Test//public void addUser(){//System.out.println("添加用户......");//User user=new User("刘星","男","小班");//try {//this.userService.createUser(user);//} catch (Exception e) {//// TODO Auto-generated catch block//e.printStackTrace();//}//}}

(注:本例已测试通过)