`
什么向往
  • 浏览: 80129 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

mybatis3.0+spring3.0+struts2整合

 
阅读更多

由于spring暂不支持ibatis3,但是mybatis3自己开发了一套针对spring的支持,所以整合中引入了mybatis_spring的jar包。

具体的项目结构图如下

 

 

在整合之前,参考了不少网上的资料,但是发现其中有过多的配置文件,我在配置中,依靠mybatis本身的映射机制以及spring的注解机制,把配置文件尽量的减少了。可以参考http://diqizhan.iteye.com/blog/582150的配置。

 

 

主要的配置文件applicationContext.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:aop="http://www.springframework.org/schema/aop"
     xmlns:tx="http://www.springframework.org/schema/tx"
     xmlns:jdbc="http://www.springframework.org/schema/jdbc"
     xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-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/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		 <property name="driverClassName"  value="com.mysql.jdbc.Driver" />  
    	<property name="username" value="root" />  
    	<property name="password" value="root" />  
    	<property name="url"  value="jdbc:mysql://127.0.0.1:3306/test1" />  
	</bean>
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
        <!-- define the SqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
   		<property name="typeAliasesPackage" value="com.whatlookingfor.domain" />
    </bean>
    <context:component-scan base-package="com.whatlookingfor.service" />
	<context:annotation-config />
	<tx:annotation-driven />

    <!-- 从base 包中搜索所有下面所有 interface,并将其注册到 Spring Bean容器中,其注册的class bean是MapperFactoryBean。 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.whatlookingfor.mapper" />
    </bean>
 
    
</beans>

 

使用一个MapperScannerConfigurer,它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBeans。

 

basePackage属性是让你为映射器接口文件设置基本的包路径。你可以使用分号或逗号作为分隔符设置多于一个的包路径

 

 

 

没有必要去指定SqlSessionFactory 或SqlSessionTemplate,因为MapperScannerConfigurer将会创建MapperFactoryBean,之后自动装配。

 

 

@service是用于服务层的类文件。

@Autowired用来注入。

例如

@Autowired

private ConsumerMapper consumerMapper;

相当于new了一个ConsumerMapper的类。

需要在配置文件中进行以下配置

 

 写道
<context:component-scan base-package="com.whatlookingfor.service" />
<context:annotation-config />
<tx:annotation-driven />
 

 

 

 写道
<property name="typeAliasesPackage" value="com.whatlookingfor.domain" />

 

 用来定义javabean的包位置,这样在mybatis的sql映射文件中,就可以该包下的类的简写(首字母小写)来定义,而不用定义该类的所在包的位置

 

 

 

 

web.xml 代码如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/applicationContext.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
		<filter>
		 <!-- 配置Struts2核心Filter的名字 -->
		<filter-name>struts2</filter-name>
		<!-- 配置Struts2核心Filter的实现类 --> 
		<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
		
	</filter>
	 <!-- 配置Filter拦截的URL -->
	<filter-mapping>
	<!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 -->  
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>
 

主要是配置了项目启动时,加载的配置文件contextConfigLocation的文件,以及struts的一些基本配置。

 

 

接下来以一个验证登陆的实例来说明

 

登陆页面主要代码如下:

 

 

	 $("#to_submit").click(function(){

		 $.post(
				"checkConsumer.action",
				{
					account:$("#account").val(),
					password:$("#password").val(),
					validation_code:$("#validation_code").val()
				},
				function(data,textStats){
					if(data.mess=="success"){
						window.location.href="jsp/demo1.jsp";
					}else{
						$("#message").html("<font color='red'>"+data.mess+"</font>");   
					}
					
					
				},"json"
		 );
 

 

 

我主要用的是jquery的ajax提交,点击id为 to_submit的登陆按钮后,所做的操作是执行 checkConsumer.action。

 

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>

<!-- 在这里可以include多个struts的配置文件 -->
	<!-- 
	<include file="struts-default.xml" />
	 -->
	 <constant name="struts.i18n.encoding" value="utf-8"></constant>

	<package name="main" extends="json-default">
		<global-results>
			<result name="login">login.jsp</result>
		
		</global-results>
		
		<action name="checkConsumer" class="com.whatlookingfor.action.ConsumerAction" method="checkConsumer">
			<result type="json" name="mess"></result>
		</action>

	</package>
		
</struts>

 

 

由于是ajax的提交,我选择了json格式的返回值,所以在项目中,我还引入了json的jar包。因此在配置中多了几项内容。

 

<package name="main" extends="json-default">

 

 

<result type="json" name="mess"></result>

 

 

如果不需要格式的返回值,那么改为struts的默认格式

 

<package name="main" extends="struts-default">

 

 

<result name="success">login.jsp</result>

 

 

 

ConsumerAction.java的代码如下:

 

package com.whatlookingfor.action;


import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import com.opensymphony.xwork2.ModelDriven;
import com.whatlookingfor.domain.Consumer;
import com.whatlookingfor.service.ConsumerService;

public class ConsumerAction implements ModelDriven<Consumer>{

	/**
	 * 
	 */
	private static final long serialVersionUID = -3532748434595941668L;
	
	@Autowired 
	private ConsumerService consumerService;
	//通过实现ModelDriver接口,获取页面的consumer对象。必须定义个new model。
	private Consumer consumer=new Consumer();
	
	private String mess;

	public String getMess() {
		return mess;
	}

	public void setMess(String mess) {
		this.mess = mess;
	}


	public String checkConsumer() {
		Consumer consu=new Consumer();
		consu=consumerService.getConsumer(consumer);
		//根据consu对象(数据库查询的信息)与consumer对象(从页面获取的信息),进行登录信息的验证比较

		this.mess="密码错误";
		return "mess";

	}


/**
 * 实现ModelDriver的必须实现的方法
 * */
	public Consumer getModel() {
		return consumer;
	}


}

 

 

该action类 实现了ModelDriven的接口,具体机制,各位到网上去查阅。

 

在action类中,通过@Autowired 创建了一个ConsumerService的实例。 

 

ConsumerService.java的代码如下

 

package com.whatlookingfor.service;


import java.util.List;

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

import com.whatlookingfor.domain.Consumer;
import com.whatlookingfor.mapper.ConsumerMapper;

@Service
public class ConsumerService {
	@Autowired
	private ConsumerMapper consumerMapper;

	public Consumer getConsumer(Consumer consumer) {
		
		return consumerMapper.getConsumer(consumer);
	}

	
}
 

 

 

@service以及Autowired上面已经大概介绍过。

 

ConsumerMapper接口类的代码如下:

 

package com.whatlookingfor.mapper;

import java.util.List;

import com.whatlookingfor.domain.Consumer;

/**
 * @author Administrator
 *
 */
public interface ConsumerMapper {
	/**
	 * 
	 * */
	public Consumer getConsumer(Consumer consumer);
	
	
}
 

ConsumerMapper.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.whatlookingfor.mapper.ConsumerMapper">

  <select id="getConsumer" resultType="Consumer" parameterType="Consumer">
  	SELECT * FROM TB_CONSUMER WHERE ACCOUNT=#{account}
  </select>
  
</mapper>

 

Consumer.java的代码如下:

 package com.whatlookingfor.domain;

import java.io.Serializable;

import com.whatlookingfor.base.PageInfo;

public class Consumer extends PageInfo<Consumer> implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -4075669481168367315L;
	
	private String account;
	private String password;
	
	

	public String getAccount() {
		return account;
	}
	public void setAccount(String account) {
		this.account = account;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	
}
 

 

 

OK,至此,所有的代码已经全部贴完。

数据库就一张表 TB_CONSUMER,有两个字段 account,和password。 

 

主要引入的jar包有spring的核心包,struts2的核心包,mybatis3.0的jar包,mybatis_spring 1.0jar包,json的jar包(jsonplugin-0.32.jar),使用的时候注意0.32和0.34的区别。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics