Spring 3.05+MyBatis 3.0.4整合非完全例

33541 ワード

注釈に基づくmybatisとspring統合:
http://huangmin001.iteye.com/blog/1185806
この文章は詳しく話していますから、一見の価値があります。
Maven+SpringMVC+Mybatis【オリジナルではなく、単純整理】【四】:
http://playgod1984.iteye.com/blog/984113の一番後ろにはidとマッピング関係が提示されています。
MyBatisの注釈の仕方が面倒なので、まだxmlが来ていないかもしれません。読みやすいです。だから、添付していません。興味があれば、自分で参考してください。
http://panyongzheng.iteye.com/blog/1604067
spring+springmvc+ibatis統合注釈方式例(データベース付き)
http://blog.csdn.net/mgb18986349193/article/details/8494494
この例も詳細ですが、Mapperインターフェースとxmlの中のsql idをマッピングしていません。必要ですか?考えてもいいです
Spring MVC 3.05+Spring 3.0.5+MyBatis 3.0.4全注釈例
http://www.2cto.com/kf/201108/98937.html
namespaceインターフェースとパブリックdaoの違いに基づいて、MyBatis 3.0から、mapperのnamespace属性に対して、耐久性オペレーティングクラスとして特定のインターフェースを指定できます。インタフェースでは、マッピングファイルのid属性値と同じ方法を定義します。MyBatisは自動的に結合し、対応するSQL文を実行します。このようなインターフェースの実現方式は、各Mapperのためにインターフェースを作る必要があります。もしシステムが大きくなれば、これらの種類を維持するのが面倒になります。
if exists(select 1)
            from  syssobject
           where  id=object_id('Users')
            and   type='U')
   drop table Users
go
=====================================================================================================================
//*Table:Users                                                 */
=====================================================================================================================
create table Users(
   id。                   要点                  not null
   name                 varrhar(50)          null
   password             varrhar(50)          null
   email                varrhar(50)          null
   remarks              varrhar(500)         null
   コンストラクションPK_USERS prmary key nonclusted(id)
)
go
SpringMVC
----------------------------------------
jars of SpringMVC
comple.springsource.com.mchange.v 2.c 3 p 0-0.9.12.jar
comple.sprigsource.net.sf.cglib-2.2.jar
comple.sprigsource.org.aopalliance-1.00.jar
comple.springsource.org.apache.com mmons.fileuplad-1.0.jar
compring.spring source.org.apache.com mmons.httpclient-3.jar
comple.spring source.org.apache.com mmons.lang-24.0.jar
comple.spring source.org.apache.com mmons.loging-1.1.jar
comple.spring source.org.apache.com mmons.pool-1.5.jar
comple.sprigsource.org.apache.log 4 j-1.15.jar
comple.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
comple.spring source.org.co dehaus.jackson.mapper-1.00.jar
commons-dbcp.jar
jortm.jar
org.springframe ework.aop-3.5.RELEASE.jar
org.springframe ework.asm-3.5.RELEASE.jar
org.springframe ework.aspects-3.05.RELEASE.jar
org.springframe ework.beans-3.5.RELEASE.jar
org.springframe ework.com ntect-3.05.RELEASE.jar
org.springframe exe.com re-3.5.RELEASE.jar
org.spring frame expression n-3.05.RELEASE.jar
org.springframe ework.instrument-3.5.RELEASE.jar
org.springframe ework.instrument.tomcat-3.05.RELEASE.jar
org.springframe ework.jdbc-3.5.RELEASE.jar
org.springframe ebook.orm-3.5.RELEASE.jar
org.springframe ework.oxm-3.5.RELEASE.jar
org.springframe ework.trantionn 3.05.RELEASE.jar
org.springframe ework.web-3.5.RELEASE.jar
org.springframe ework.web.portlet-3.05.RELEASE.jar
org.springframe ework.web.servlet-3.05.RELEASE.jar
org.springframe ework.web.struts-3.5.RELEASE.jar
persistence.jar
xappool.jar
-----------------------------------------------
web.xml設定appication Contact.xml、Spring MVCIbatis-servlet.xmlデフォルト位置
=========================================================================================
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
	<display-name></display-name>
	
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<!--   applicationContext.xml      -->
		<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<servlet>  
        <servlet-name>SpringMVCIbatisSmartClient</servlet-name>  
        <servlet-class>  
            org.springframework.web.servlet.DispatcherServlet  
        </servlet-class>  
        <load-on-startup>1</load-on-startup>  
        <init-param>  
	        <param-name>contextConfigLocation</param-name>
			<!--   servlet.xml      -->
	        <param-value>/WEB-INF/classes/SpringMVCIbatis-servlet.xml</param-value>
	    </init-param> 
    </servlet>  
    <servlet-mapping>  
        <servlet-name>SpringMVCIbatisSmartClient</servlet-name>  
        <url-pattern>*.do</url-pattern>  
    </servlet-mapping>  
	
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>
Spring MVCIbatis-servlet.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:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation=" http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.0.xsd  
    http://www.springframework.org/schema/mvc    
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
    
    <mvc:annotation-driven />
	<!--   Service     -->
	<context:component-scan base-package="com">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
	</context:component-scan>

	<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
	<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>

	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/pages/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean> 
</beans>
appication Contect.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"   
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"    
    xmlns:p="http://www.springframework.org/schema/p"    
    xmlns:aop="http://www.springframework.org/schema/aop"  
    xmlns:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans         
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd         
    http://www.springframework.org/schema/context         
    http://www.springframework.org/schema/context/spring-context-3.0.xsd      
    http://www.springframework.org/schema/aop   
    http://www.springframework.org/schema/aop/spring-aop-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/jdbc         
    http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd  
    http://www.springframework.org/schema/mvc   
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
    default-autowire="byName" default-lazy-init="true">
	
	<!--   Controller     -->
	<context:component-scan base-package="com"> 
	  <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> 
	</context:component-scan> 
</beans>
ハローController.java
=============================================================================================
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;


@Controller
public class HelloController {	
	@RequestMapping(value="sayHello")
	public ModelAndView sayHello(){
		ModelAndView view = new ModelAndView("sayHello");
		view.addObject("helloworld", "Hello World From Server.");
		return view;
	}
}
index.jsp
==============================================================================================
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
    <a href="sayHello.do">sayHello</a>
  </body>
</html>
WebRoot/pages/sayHello.jsp
========================================================================================
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>helloworld</title>
  </head>
  
  <body>
    <h1>${helloworld}</h1>
  </body>
</html>
MyBatis 3.0機能を追加
jars of Project
===========================================================================================
cglib-23.22.jar
comple.springsource.com.mchange.v 2.c 3 p 0-0.9.12.jar
comple.sprigsource.net.sf.cglib-2.2.jar
comple.sprigsource.org.aopalliance-1.00.jar
comple.springsource.org.apache.com mmons.fileuplad-1.0.jar
compring.spring source.org.apache.com mmons.httpclient-3.jar
comple.spring source.org.apache.com mmons.lang-24.0.jar
comple.spring source.org.apache.com mmons.loging-1.1.jar
comple.spring source.org.apache.com mmons.pool-1.5.jar
comple.sprigsource.org.apache.log 4 j-1.15.jar
comple.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
comple.spring source.org.co dehaus.jackson.mapper-1.00.jar
commons-dbcp.jar
commons-loging-11.jar
jortm.jar
junnit-4.8.1.jar
log 4 j-1.2.15.jar
mybatis-3.4.jar mybatis-spring-1.00.jar
gnl-2.6.9.jar
org.springframe ework.aop-3.5.RELEASE.jar
org.springframe ework.asm-3.5.RELEASE.jar
org.springframe ework.aspects-3.05.RELEASE.jar
org.springframe ework.beans-3.5.RELEASE.jar
org.springframe ework.com ntect-3.05.RELEASE.jar
org.springframe exe.com re-3.5.RELEASE.jar
org.spring frame expression n-3.05.RELEASE.jar
org.springframe ework.instrument-3.5.RELEASE.jar
org.springframe ework.instrument.tomcat-3.05.RELEASE.jar
org.springframe ework.jdbc-3.5.RELEASE.jar
org.springframe ebook.orm-3.5.RELEASE.jar
org.springframe ework.oxm-3.5.RELEASE.jar
org.springframe ework.trantionn 3.05.RELEASE.jar
org.springframe ework.web-3.5.RELEASE.jar
org.springframe ework.web.portlet-3.05.RELEASE.jar
org.springframe ework.web.servlet-3.05.RELEASE.jar
org.springframe ework.web.struts-3.5.RELEASE.jar
persistence.jar
spring-test-3.05.RELEASE.jar
sqljdbc 4.jar
xappool.jar
src/config/database.properties
=========================================================================================
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://localhost:1433; DatabaseName=SmartClientDemos
username=sa
password=sa
Uses.java
=====================================================================================
package com.pojo;
public class Users {	
	private long id;
	private String name;
	private String password;
	private String email;
	private String remarks;
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getRemarks() {
		return remarks;
	}
	public void setRemarks(String remarks) {
		this.remarks = remarks;
	}	
}
二つの方法:
1.DAO方式では、daoから直接にxmlのsql idを呼び出します。
IUsersDao.java
===========================================================================================
package com.dao;
import java.util.List;
public interface IUsersDao {
	public abstract List queryUsersByName(String name);
}
UsersDao.java
====================================================================================
package com.dao.impl;
import java.util.List;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Repository;
import com.dao.IUsersDao;
import com.pojo.Users;
@Repository
public class UsersDao extends SqlSessionDaoSupport implements IUsersDao{
	@Override
	public List queryUsersByName(String name){
		System.out.println("Users.queryUsersByName()");
		// com.mapper.IUsersMapper.queryUsersByName = (namespace+select/insert/update/delete)id
		return getSqlSession().selectList("com.mapper.IUsersMapper.queryUsersByName", name);
	}	
}
2.Mapper方式:A、実現類はインターフェースを実現する時、直接パッケージと使用インターフェース;b、インターフェースの方法はxmlの中のsql idと同じでなければなりません。
IUsersMapper.java
========================================================================================
package com.mapper;
import com.pojo.Users;
public interface IUsersMapper {
	public abstract Users queryUsersById(int id);
	public abstract void insertUser(Users user);
	public abstract void updateUser(Users user);

}
UsersMapper.java
=====================================================================================
package com.mapper.impl;
import com.mapper.IUsersMapper;
import com.pojo.Users;
public class UsersMapper implements IUsersMapper {
	private IUsersMapper usersMapper;
	@Override
	public Users queryUsersById(int id) {
		return usersMapper.queryUsersById(id);
	}	
	@Override
	public void insertUser(Users user) {
		System.out.println("UsersMapper insertUser");
		usersMapper.insertUser(user);
	}	
	@Override
	public void updateUser(Users user) {
		System.out.println("UsersMapper updateUser");
		usersMapper.updateUser(user);
	}
	public IUsersMapper getUsersMapper() {
		return usersMapper;
	}
	public void setUsersMapper(IUsersMapper usersMapper) {
		this.usersMapper = usersMapper;
	}	
}
注意:
public class UsersMapper implements
IUsers Mapper{
prvate
IUsers Mapper users Mapper;
)
インターフェースを実現しながら、自分で使う方法です。また、この方法の名前はxmlの中のIDに対応します。
service->mapper->DAO
http://www.idashu.me/Mybatis-development.htmlここの言い方はまた違っています。運行できるかどうかは分かりません。
service->mapper、DAOが少なくなりましたが、mapperはDAOです。
ファイルの保管場所に注意してください。
http://www.2cto.com/kf/201108/98937.html
namespaceインターフェースとパブリックdaoの違いに基づいて、MyBatis 3.0から、mapperのnamespace属性に対して、耐久性オペレーティングクラスとして特定のインターフェースを指定できます。インタフェースでは、マッピングファイルのid属性値と同じ方法を定義します。MyBatisは自動的に結合し、対応するSQL文を実行します。このようなインターフェースの実現方式は、各Mapperのためにインターフェースを作る必要があります。もしシステムが大きくなれば、これらの種類を維持するのが面倒になります。
二つの方法を同時に使用する例:
IUsers Service.java
==========================================================================================================
package com.service;
import com.pojo.Users;
public interface IUsersService {
	public abstract Users queryUsersById(int id);
	public abstract Users queryUsersByName(String name);
	public abstract void saveUser(Users user);
}
UsersServiceImpl.java
==========================================================================================================
package com.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.dao.IUsersDao;
import com.mapper.IUsersMapper;
import com.pojo.Users;
import com.service.IUsersService;

@Service(value="usersService")
@Transactional(rollbackFor=Exception.class)
public class UsersServiceImpl implements IUsersService {
	
	@Resource(name="usersMapper")
	private IUsersMapper usersMapper;
	
	@Resource(name="usersDao")
	private IUsersDao usersDao;
	
	@Override
	@Transactional(propagation=Propagation.REQUIRED, readOnly=true)
	public Users queryUsersById(int id){
		return usersMapper.queryUsersById(id);
	}
	
	@Override
	@Transactional(propagation=Propagation.REQUIRED, readOnly=true)
	public Users queryUsersByName(String name){
		List list = usersDao.queryUsersByName(name);
		System.out.println("list = "+list==null?"0":list.size());
		if(list!=null&&list.size()>0) return (Users)list.get(0);
		return null;
	}
	
	@Override
	@Transactional(propagation=Propagation.REQUIRED)
	public void saveUser(Users user){
		if(user.getId()<=0){
			System.out.println("insertUser");
			usersMapper.insertUser(user);
		}else{
			System.out.println("updateUser");
			usersMapper.updateUser(user);
		}		
		//throw new RuntimeException("@@ Rollback for Debug..........");		
	}
}
ハローController.java
==============================================================================================
package com.controller;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.pojo.Users;
import com.service.IUsersService;

@Controller
public class HelloController {	
	@Resource(name="usersService")
	private IUsersService usersService;
	
	@RequestMapping(value="sayHello")
	public ModelAndView sayHello(){
		ModelAndView view = new ModelAndView("sayHello");
		view.addObject("helloworld", "Hello World From Server.");		
		//insert
		Users user = new Users();
		user.setName("Pandy");
		user.setPassword("pandy");
		user.setEmail("[email protected]");
		user.setRemarks("nothing");
		
		usersService.saveUser(user);
		
		Users user1 = usersService.queryUsersByName(user.getName());
		//Users user1 = usersService.queryUsersById(0);
		if(user1!=null){
			System.out.println(user1.getName());
			view.addObject("userName", user1.getName());
		}else{
			System.out.println("Noting");
			view.addObject("userName", "Noting");
		}
		return view;
	}
}
com/mapper/xml/Users.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.mapper.IUsersMapper">  
    <select id="queryUsersById" parameterType="int" resultType="Users">  
        select id, name,password,email, remarks from Users where id = #{id}
    </select>
    
    <select id="queryUsersByName" parameterType="string" resultType="Users">  
        select id, name,password,email, remarks from Users where name = #{name}
    </select>
    
    <insert id="insertUser" parameterType="Users">
    	insert into Users(id, name,password,email, remarks) values(#{id}, #{name},#{password},#{email}, #{remarks})
    </insert>  
    
    <update id="updateUser">
    	update Users set name=#{name},password=#{password},email=#{email},remarks=#{remarks} where id=#{id}
    </update>
</mapper>
mybatis-config.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="Users" type="com.pojo.Users"/>  
    </typeAliases>  
    <!--   mapper.xml   -->
    <mappers>  
        <mapper resource="com/mapper/xml/Users.xml"/>  
    </mappers>  
</configuration> 
appication Contect.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"   
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"    
    xmlns:p="http://www.springframework.org/schema/p"    
    xmlns:aop="http://www.springframework.org/schema/aop"  
    xmlns:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans         
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd         
    http://www.springframework.org/schema/context         
    http://www.springframework.org/schema/context/spring-context-3.0.xsd      
    http://www.springframework.org/schema/aop   
    http://www.springframework.org/schema/aop/spring-aop-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/jdbc         
    http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd  
    http://www.springframework.org/schema/mvc   
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"
    default-autowire="byName" default-lazy-init="true">
    
    <context:component-scan base-package="com"> 
	  <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
	  <!-- <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> -->
	</context:component-scan> 
	<!--           -->
	<context:property-placeholder location="classpath:config/database.properties"/>  
     <!-- DataSource --> 
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
        <property name="driverClassName" value="${driver}"/>  
        <property name="url" value="${url}"/>  
        <property name="username" value="${username}"/>  
        <property name="password" value="${password}"/>  
    </bean>  
    <!--      --> 
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource" />  
    </bean>  
    <tx:annotation-driven transaction-manager="transactionManager"/>
    <!-- sqlSessionFactory   --> 
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
        <property name="configLocation" value="classpath:mybatis-config.xml" />  
        <property name="dataSource" ref="dataSource" />  
    </bean> 
    <!-- Mapper    --> 
    <bean id="usersMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">  
        <property name="mapperInterface" value="com.mapper.IUsersMapper"/>  
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>        
    </bean>     
</beans>
Spring MVCIbatis-servlet.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:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation=" http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.0.xsd  
    http://www.springframework.org/schema/mvc    
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
    
    <mvc:annotation-driven />
	<context:component-scan base-package="com">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
	</context:component-scan>

	<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
	<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>

	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/pages/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean> 
</beans>
log 4 j.properties
====================================================================================
#logger level default is INFO
log4j.rootLogger=info,console,file

#append to console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %p - %m%n

#append to file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/demo.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=10000
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d %p - %m%n


#ibatis logger config
log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug,stdout
WebRoot/pages/sayHello.jsp
====================================================================================================
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>helloworld</title>
  </head>
  
  <body>
    <h1>${helloworld}</h1>
    <br>
    <h3>${userName}</h3>
  </body>
</html>