struts2+spring+hibernate集成(annotation版)

費話不多說......

(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_seq
start with 1
increment 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"?>
<beans
	xmlns="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"?>
<beans
	xmlns="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;

@Service
public 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;

@Repository
public class UserDao extends HibernateDaoSupport {

	private JdbcTemplate jdbcTemplate;

	@Resource
	public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
		this.jdbcTemplate = jdbcTemplate;
	}

	@Resource
	public 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;

@Component
public class UserServiceImpl implements UserService {
	@Resource
	private UserDao userDao;

	@Override
	public void createUser(User user) throws Exception {
		this.userDao.createUser(user);

	}

	@Override
	public 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;

@Controller
public class UserAction extends ActionSupport {

	@Resource
	private 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;
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		System.out.println("JUnit start......");
		ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext-*.xml");
		userService=(UserService) app.getBean("userServiceImpl");
	}

	@AfterClass
	public static void afterClass() throws Exception {
		System.out.println("JUnit end......");
	}
	
	
	@Test
	public void getAllUser(){
		try {
			System.out.println("用戶數:"+this.userService.getAllUser().size());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.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();
//		}
//	}

}

(注:本例已測試通過)

發佈了28 篇原創文章 · 獲贊 10 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章