Struts2+Spring3+Mybatis3 整合詳解


1.說明

介紹Struts+Spring的整合: Struts2+Spring3的兩種整合方式


本次Struts2+Spring3+Mybatis3 整合,struts的配置和web.xml沒有變化,參考上述的Struts+Spring整合。

Spring使用自動注入方式,重點解說一下Spring和MyBatis的整合過程。


2.打入jar包。

導入如圖所示的jar包:


3.Spring和Mybatis的配置文件


3.1   Spring.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:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/tx
     	   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<!-- 採用註釋的方式配置bean -->
	<context:annotation-config />
	<!-- 配置要掃描的包 -->
	<context:component-scan base-package="com.user"></context:component-scan>

	<!-- 數據庫配置文件位置 -->
	<context:property-placeholder location="classpath:jdbc.properties" />

	<!-- 配置dbcp數據源 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<!-- 隊列中的最小等待數 -->
		<property name="minIdle" value="${jdbc.minIdle}"></property>
		<!-- 隊列中的最大等待數 -->
		<property name="maxIdle" value="${jdbc.maxIdle}"></property>
		<!-- 最長等待時間,單位毫秒 -->
		<property name="maxWait" value="${jdbc.maxWait}"></property>
		<!-- 最大活躍數 -->
		<property name="maxActive" value="${jdbc.maxActive}"></property>
		<property name="initialSize" value="${jdbc.initialSize}"></property>
	</bean>

	<!-- 配置mybitasSqlSessionFactoryBean -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:mybatis.xml"></property>
	</bean>

	<!-- 配置SqlSessionTemplate -->
	<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
	    <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>

	<!-- 事務配置 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>

	<!-- 使用annotation註解方式配置事務 -->
	<tx:annotation-driven transaction-manager="transactionManager"/>

</beans>

3.2   mybatis.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<typeAliases>
		<typeAlias alias="user" type="com.user.domain.User"/>
	</typeAliases>
	<mappers>
		<mapper resource="com/user/domain/sqlMappers/user.xml" />
	</mappers>
</configuration>


3.3  jdbc.properties配置文件

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/UserDb
jdbc.username=root
jdbc.password=root
jdbc.maxActive = 2
jdbc.maxIdle =5
jdbc.minIdle=1
jdbc.initialSize =3
jdbc.maxWait =3000

##說明:附帶一下tb_user的SQL語句:

DROP TABLE IF EXISTS `tb_user`;

CREATE TABLE `tb_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

insert  into `tb_user`(`id`,`username`,`password`) values 
(1,'sysadmin','sysadmin'),
(2,'user','123456');


4. 源碼



4.1 Spring的LoginAction.java文件

package com.user.action;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionSupport;
import com.user.service.IUserService;


@Controller
@Scope("prototype")
public class LoginAction extends ActionSupport{
	
	private static final long serialVersionUID = 1L;
	
	@Autowired
	private IUserService userService;
	
	//前臺傳遞過來的參數
	private String username;
	private String password;
	
	public IUserService getUserService() {
		return userService;
	}
	public void setUserService(IUserService userService) {
		this.userService = userService;
	}
	public String getUsername() {
		return username;
	}
	public String getPassword() {
		return password;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	public String execute() throws Exception{
		System.out.println("in LoginAction!");
		if(userService.validateLogin(username, password)){
			return SUCCESS;
		}
		return ERROR;
	}
}



4.2  Service類

IUserService.java

package com.user.service;

public interface IUserService {
   public boolean validateLogin(String username,String password);
}

UserService.java

package com.user.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.user.dao.IUserDao;
import com.user.domain.User;
import com.user.service.IUserService;

@Service
@Transactional
public class UserService implements IUserService {
	@Autowired
	private IUserDao userDao;
	
	@Override
	public boolean validateLogin(String username, String password) {
		System.out.println("in UserService.validateLogin");
		User user = userDao.validateLogin(username,password);
		if (user!=null){
			return true;
		}
		return false;
	}
}


4.3 Domain類

User.java

package com.user.domain;

public class User{
	private String username;
	private String password;
	
	public User() {
		super();
	}
	public User(String username, String password) {
		super();
		this.username = username;
		this.password = password;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

user.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.user.domain.User"> 
	<!-- 用戶 -->
	<resultMap type="com.user.domain.User" id="userMap">
		<result property="username" column="username" />
		<result property="password" column="password" />
	</resultMap>
	
	<!-- 通過用戶名和密碼檢查數據庫中是否存在來教研登陸 -->
	<select id="validateLogin" parameterType="user" resultMap="userMap">
		select * 
		from tb_user
		where
		username=#{username} and password=#{password}
 	</select>
</mapper>


4.4  dao類

IUserDao.java

package com.user.dao;

import com.user.domain.User;

public interface IUserDao {
	 public User validateLogin(String username,String password);
}

UserDao.java類

package com.user.dao.impl;

import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.user.dao.IUserDao;
import com.user.domain.User;

@Repository
public class UserDao implements IUserDao {
	@Autowired
	private SqlSessionTemplate sqlSessionTemplate;
	
	private final String VALIDATE_LOGIN = "validateLogin"; 

	@Override
	public User validateLogin(String username, String password) {
		System.out.println("in UserDao.validateLogin");
		Object object = sqlSessionTemplate.selectOne(VALIDATE_LOGIN, new User(username,password));
		return (User)object;
	}
}


5.運行結果:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章