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;
}
}