SpringMVC与Ibatis框架整合所使用版本
Ibatis 2.3.4
Spring 3.0
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" >
<!-- 字符过滤_防止添加到数据库中的数据为乱码 -->
< filter >
< filter-name > characterEncodingFilter </ filter-name >
< filter-class > org.springframework.web.filter.CharacterEncodingFilter </ filter-class >
< init-param >
< param-name > encoding </ param-name >
< param-value > UTF-8 </ param-value >
</ init-param >
< init-param >
< param-name > forceEncoding </ param-name >
< param-value > true </ param-value >
</ init-param >
</ filter >
< filter-mapping >
< filter-name > characterEncodingFilter </ filter-name >
< url-pattern > /* </ url-pattern >
</ filter-mapping >
< servlet >
< servlet-name > springmvc </ servlet-name >
< servlet-class > org.springframework.web.servlet.DispatcherServlet </ servlet-class >
< load-on-startup > 1 </ load-on-startup >
</ servlet >
< servlet-mapping >
< servlet-name > springmvc </ servlet-name >
< url-pattern > / </ url-pattern >
</ servlet-mapping >
< listener >
< listener-class > org.springframework.web.context.ContextLoaderListener </ listener-class >
</ listener >
< context-param >
< param-name > contextConfigLocation </ param-name >
< param-value > classpath:applicationContext*.xml </ param-value >
</ context-param >
< welcome-file-list >
< welcome-file > index.jsp </ welcome-file >
</ welcome-file-list >
</ web-app >
springmvc-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:mvc ="http://www.springframework.org/schema/mvc"
xmlns:context ="http://www.springframework.org/schema/context"
xsi:schemaLocation ="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd" >
< context:component-scan base-package ="com.archie" />
< mvc:annotation-driven />
<!-- 视图解析器 -->
< bean id ="viewResolver"
class ="org.springframework.web.servlet.view.InternalResourceViewResolver" >
< property name ="viewClass"
value ="org.springframework.web.servlet.view.JstlView" ></ property >
< property name ="prefix" value ="/WEB-INF/views/" ></ property >
< property name ="suffix" value =".jsp" ></ property >
</ bean >
<!-- 异常解析器 -->
< bean id ="simpleMappingExceptionResolver"
class ="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" >
< property name ="exceptionMappings" >
< props >
< prop
key ="org.springframework.web.multipart.MaxUploadSizeExceededException" > common/fileerror </ prop >
</ props >
</ property >
</ bean >
</ beans >
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:mvc ="http://www.springframework.org/schema/mvc"
xmlns:context ="http://www.springframework.org/schema/context"
xmlns:aop ="http://www.springframework.org/schema/aop"
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/mvc
http://www.springframework.org/schema/mvc/spring-mvc-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/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" default-autowire ="byName" >
<!-- 自动扫描 -->
< context:component-scan base-package ="com.archie" />
<!-- 强制使用CGLIB代理 -->
< aop:aspectj-autoproxy proxy-target-class ="true" />
<!-- DataSource数据源 -->
< bean id ="dataSource" class ="org.apache.commons.dbcp.BasicDataSource"
destroy-method ="close" >
< property name ="driverClassName" >
< value > com.mysql.jdbc.Driver </ value >
</ property >
< property name ="url" >
< value > jdbc:mysql://localhost:3306/springweb_ibatis </ value >
</ property >
< property name ="username" >
< value > root </ value >
</ property >
< property name ="password" >
< value > root </ value >
</ property >
</ bean >
<!-- Spring iBatis SqlMapClient -->
< bean id ="sqlMapClient" class ="org.springframework.orm.ibatis.SqlMapClientFactoryBean" >
< property name ="configLocation" value ="classpath:sqlmap-config.xml" />
< property name ="dataSource" ref ="dataSource" />
</ bean >
<!-- 事务管理DataSourceTransactionManager -->
< bean id ="txManager"
class ="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< property name ="dataSource" ref ="dataSource" />
</ bean >
<!-- 启动spring注解功能 -->
< tx:annotation-driven transaction-manager ="txManager" />
< aop:config >
< aop:pointcut id ="baseServiceMethods" expression ="execution(* com.archie.dao.*.*(..))" />
< aop:advisor advice-ref ="txAdvice" pointcut-ref ="baseServiceMethods" />
</ aop:config >
< aop:aspectj-autoproxy />
< tx:advice id ="txAdvice" transaction-manager ="txManager" >
< tx:attributes >
< tx:method name ="select*" read-only ="true" propagation ="REQUIRED" />
< tx:method name ="find*" read-only ="true" propagation ="REQUIRED" />
< tx:method name ="save*" propagation ="REQUIRED" isolation ="REPEATABLE_READ" />
< tx:method name ="update*" propagation ="REQUIRED" isolation ="REPEATABLE_READ" />
< tx:method name ="add*" propagation ="REQUIRED" isolation ="REPEATABLE_READ" />
< tx:method name ="delete*" propagation ="REQUIRED" isolation ="REPEATABLE_READ" />
</ tx:attributes >
</ tx:advice >
</ beans >
sqlmap-config.xml
<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd" >
< sqlMapConfig >
< sqlMap resource ="sqlMap/User.xml" />
</ sqlMapConfig >
BaseDao.java
package com.archie.dao;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.ibatis.sqlmap.client.SqlMapClient;
/**
* BaseDao,Dao需继承此Dao
*
* @author archie2010 since 2011-3-3 下午10:52:36
*/
public class BaseDao extends SqlMapClientDaoSupport {
@Resource(name = " sqlMapClient " )
private SqlMapClient sqlMapClient;
@PostConstruct
public void initSqlMapClient() {
super .setSqlMapClient(sqlMapClient);
}
}
UserDao.java
package com.archie.dao;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;
import com.archie.model.User;
import com.archie.util.Pages;
/**
* UserDao
*
* @author archie2010
*
* since 下午10:31:52
*/
@Component
public class UserDao extends BaseDao {
/**
* 添加
*
* @param user
* @return
*/
public boolean addUser(User user) {
User u = (User) getSqlMapClientTemplate().insert( " insertUser " , user);
return u != null ? true : false ;
}
/**
* 删除
*
* @param uid
* @return
*/
public boolean deleteUser( int uid) {
int res = getSqlMapClientTemplate().delete( " deleteUserByID " , uid);
return res > 0 ? true : false ;
}
/**
* 查询
*
* @param uid
* @return
*/
public User getUserByUid( int uid) {
return (User) getSqlMapClientTemplate().queryForObject( " findUserByID " ,
uid);
}
/**
* 查询所有
*
* @return
*/
@SuppressWarnings( " unchecked " )
public List < User > getAllUsers() {
return getSqlMapClientTemplate().queryForList( " findAllUser " );
}
/**
* 修改
*
* @param user
* @return
*/
public boolean updateUser(User user) {
int res = getSqlMapClientTemplate().update( " updateUserByUser " , user);
return res > 0 ? true : false ;
}
/**
* 查询(根据用户名密码)
*
* @param user
* @return
*/
public User getUserByUnameUpwd(User user) {
return (User) getSqlMapClientTemplate().queryForObject(
" selectByUnameAndUpwd " , user);
}
/**
* 记录总数
*
* @return
*/
public int getAllUserCount() {
return (Integer) getSqlMapClientTemplate().queryForObject(
" findAllUserCount " );
}
/**
* 分页
*
* @param pageNo
* @return
*/
@SuppressWarnings( " unchecked " )
public Pages < User > getUserByPageNo( int pageNo) {
Pages < User > pages = new Pages < User > (getAllUserCount());
pages.setPageSize( 5 );
List < User > userList = new ArrayList < User > ();
userList = getSqlMapClientTemplate().queryForList( " findPageUser " ,
pages.getStart(pageNo));
pages.setPageList(userList);
return pages;
}
}
SpringMVC的Controller
UserController .java
package com.archie.web;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.archie.model.User;
import com.archie.service.UserService;
import com.archie.util.Pages;
/**
* BaseDao,Dao需继承此Dao
*
* @author archie2010 since 2011-3-3 下午10:52:36
*/
@Controller
@RequestMapping( " /user/* " )
public class UserController {
@Resource
private UserService userService;
private final String LIST = " redirect:/user/list/1 " ;
/**
* 登录
* @param user
* @param session
* @return
*/
@RequestMapping( " /login " )
public ModelAndView login(@Valid User user,BindingResult result,HttpSession session){
if ( ! result.hasErrors()){
User loginUser = userService.login(user);
if (loginUser != null ){
session.setAttribute( " USER " , loginUser);
return new ModelAndView( " redirect:/user/list/1 " );
} else {
return new ModelAndView( " redirect:/ " );
}
} else {
ModelAndView view = new ModelAndView();
view.setViewName( " redirect:/ " );
view.addObject( " error " , result.getAllErrors());
return view;
}
}
/**
* 跳转至添加页
* @return
*/
@RequestMapping(value = " /new " ,method = RequestMethod.GET)
public ModelAndView toAdd(){
return new ModelAndView( " user/add " );
}
/**
* 保存
* @param user
* @return
*/
@RequestMapping(value = " /new " ,method = RequestMethod.POST)
public ModelAndView add(@Valid User user,BindingResult result){
if (result.hasErrors()){
return new ModelAndView( " user/add " , " error " , result.getAllErrors());
} else {
userService.addUser(user);
return new ModelAndView(LIST);
}
}
/**
* 根据ID删除
* @param id
* @return
*/
@RequestMapping(value = " /del/{id} " )
public ModelAndView delete(@PathVariable int id){
userService.deleteUser(id);
return new ModelAndView(LIST);
}
/**
* 跳转至编辑页面
* @param id
* @return
*/
@RequestMapping(value = " /edit/{id} " )
public ModelAndView edit(@PathVariable int id){
User user = userService.getUserById(id);
return new ModelAndView( " user/edit " , " user " ,user);
}
/**
* 编辑
* @param user
* @return
*/
@RequestMapping(value = " /edit " )
public ModelAndView update(@Valid User user,BindingResult result){
ModelAndView view = new ModelAndView();
if (result.hasErrors()){
view.addObject( " error " , result.getAllErrors());
view.setViewName( " user/edit " );
return view;
} else {
userService.updateUser(user);
return new ModelAndView(LIST);
}
}
/**
* 分页
* @param pageNo
* @return
*/
@RequestMapping(value = " /list/{pageNo} " )
public ModelAndView list(@PathVariable int pageNo){
Pages < User > pages = userService.getUserByPageNo(pageNo);
return new ModelAndView( " user/main " , " pages " ,pages);
}
}