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