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.运行结果:



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