首页 > 代码库 > spring mvc+mybatis整合

spring mvc+mybatis整合

(1) 导入相关包,包结构如下图所示:


        (2) 修改src/applicationContext.xml文件,结果如下所示:

[java] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:tx="http://www.springframework.org/schema/tx"  
  6.     xsi:schemaLocation="  
  7.     http://www.springframework.org/schema/beans   
  8.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  9.     http://www.springframework.org/schema/tx   
  10.     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd   
  11.     http://www.springframework.org/schema/context   
  12.     http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  13.       
  14.     <!-- 引入jdbc配置文件 -->  
  15.     <context:property-placeholder location="classpath:jdbc.properties" />  
  16.   
  17.     <!--创建jdbc数据源 -->  
  18.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
  19.         destroy-method="close">  
  20.         <property name="driverClassName" value=http://www.mamicode.com/"${driver}" />  
  21.         <property name="url" value=http://www.mamicode.com/"${url}" />  
  22.         <property name="username" value=http://www.mamicode.com/"${username}" />  
  23.         <property name="password" value=http://www.mamicode.com/"${password}" />  
  24.     </bean>  
  25.   
  26.     <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->  
  27.     <bean id="transactionManager"  
  28.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  29.         <property name="dataSource" ref="dataSource" />  
  30.     </bean>  
  31.   
  32.     <!-- 创建SqlSessionFactory,同时指定数据源 -->  
  33.     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  34.         <property name="dataSource" ref="dataSource" />  
  35.     </bean>  
  36.       
  37.     <!-- 可通过注解控制事务 -->  
  38.     <tx:annotation-driven />  
  39.   
  40.     <!-- Mapper接口所在包名,Spring会自动查找其下的Mapper -->  
  41.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
  42.         <property name="basePackage" value=http://www.mamicode.com/"com.geloin.spring.mapper" />  
  43.     </bean>  
  44.       
  45. </beans>  

        (3) 在src下添加jdbc.properties

[java] view plaincopy
  1. driver=com.mysql.jdbc.Driver  
  2. url=jdbc:mysql://localhost:3306/ruisystem  
  3. username=root  
  4. password=root  


        (4) 在com.geloin.spring.entity包下添加实体类,实体类对应于数据表,其属性与数据表相同或多于数据表。

[java] view plaincopy
  1. /** 
  2.  * 
  3.  * @author geloin 
  4.  * @date 2012-5-5 上午10:24:43 
  5.  */  
  6. package com.geloin.spring.entity;  
  7.   
  8. /** 
  9.  *  
  10.  * @author geloin 
  11.  * @date 2012-5-5 上午10:24:43 
  12.  */  
  13. public class Menu {  
  14.     /** 
  15.      * 惟一标识 
  16.      */  
  17.     private Integer id;  
  18.     /** 
  19.      * 父ID 
  20.      */  
  21.     private Integer parentId;  
  22.     /** 
  23.      * 名称 
  24.      */  
  25.     private String name;  
  26.     /** 
  27.      * 对应的地址 
  28.      */  
  29.     private String url;  
  30.     /** 
  31.      * 是否显示在左侧 
  32.      */  
  33.     private Integer isShowLeft;  
  34.   
  35.     /** 
  36.      *  
  37.      * @author geloin 
  38.      * @date 2012-5-5 上午10:26:19 
  39.      * @return the id 
  40.      */  
  41.     public Integer getId() {  
  42.         return id;  
  43.     }  
  44.   
  45.     /** 
  46.      *  
  47.      * @author geloin 
  48.      * @date 2012-5-5 上午10:26:19 
  49.      * @param id 
  50.      *            the id to set 
  51.      */  
  52.     public void setId(Integer id) {  
  53.         this.id = id;  
  54.     }  
  55.   
  56.     /** 
  57.      *  
  58.      * @author geloin 
  59.      * @date 2012-5-5 上午10:26:19 
  60.      * @return the parentId 
  61.      */  
  62.     public Integer getParentId() {  
  63.         return parentId;  
  64.     }  
  65.   
  66.     /** 
  67.      *  
  68.      * @author geloin 
  69.      * @date 2012-5-5 上午10:26:19 
  70.      * @param parentId 
  71.      *            the parentId to set 
  72.      */  
  73.     public void setParentId(Integer parentId) {  
  74.         this.parentId = parentId;  
  75.     }  
  76.   
  77.     /** 
  78.      *  
  79.      * @author geloin 
  80.      * @date 2012-5-5 上午10:26:19 
  81.      * @return the name 
  82.      */  
  83.     public String getName() {  
  84.         return name;  
  85.     }  
  86.   
  87.     /** 
  88.      *  
  89.      * @author geloin 
  90.      * @date 2012-5-5 上午10:26:19 
  91.      * @param name 
  92.      *            the name to set 
  93.      */  
  94.     public void setName(String name) {  
  95.         this.name = name;  
  96.     }  
  97.   
  98.     /** 
  99.      *  
  100.      * @author geloin 
  101.      * @date 2012-5-5 上午10:26:19 
  102.      * @return the url 
  103.      */  
  104.     public String getUrl() {  
  105.         return url;  
  106.     }  
  107.   
  108.     /** 
  109.      *  
  110.      * @author geloin 
  111.      * @date 2012-5-5 上午10:26:19 
  112.      * @param url 
  113.      *            the url to set 
  114.      */  
  115.     public void setUrl(String url) {  
  116.         this.url = url;  
  117.     }  
  118.   
  119.     /** 
  120.      *  
  121.      * @author geloin 
  122.      * @date 2012-5-5 上午10:26:19 
  123.      * @return the isShowLeft 
  124.      */  
  125.     public Integer getIsShowLeft() {  
  126.         return isShowLeft;  
  127.     }  
  128.   
  129.     /** 
  130.      *  
  131.      * @author geloin 
  132.      * @date 2012-5-5 上午10:26:19 
  133.      * @param isShowLeft 
  134.      *            the isShowLeft to set 
  135.      */  
  136.     public void setIsShowLeft(Integer isShowLeft) {  
  137.         this.isShowLeft = isShowLeft;  
  138.     }  
  139.   
  140. }  


        (5) 在com.geloin.spring.mapper下添加实体类与数据表的映射关系(com.geloin.spring.mapper与applicationContext.xml中的配置一致)。

[java] view plaincopy
  1. /** 
  2.  * 
  3.  * @author geloin 
  4.  * @date 2012-5-5 上午10:26:34 
  5.  */  
  6. package com.geloin.spring.mapper;  
  7.   
  8. import java.util.List;  
  9.   
  10. import org.apache.ibatis.annotations.Param;  
  11. import org.apache.ibatis.annotations.Result;  
  12. import org.apache.ibatis.annotations.Results;  
  13. import org.apache.ibatis.annotations.Select;  
  14. import org.springframework.stereotype.Repository;  
  15.   
  16. import com.geloin.spring.entity.Menu;  
  17.   
  18. /** 
  19.  *  
  20.  * @author geloin 
  21.  * @date 2012-5-5 上午10:26:34 
  22.  */  
  23. @Repository(value = "menuMapper")  
  24. public interface MenuMapper {  
  25.   
  26.     @Select(value = "${sql}")  
  27.     @Results(value = { @Result(id = true, property = "id", column = "id"),  
  28.             @Result(property = "parentId", column = "c_parent_id"),  
  29.             @Result(property = "url", column = "c_url"),  
  30.             @Result(property = "isShowLeft", column = "c_is_show_left"),  
  31.             @Result(property = "name", column = "c_name") })  
  32.     List<Menu> operateReturnBeans(@Param(value = "sql") String sql);  
  33. }  


        其中,@Repository表示这是一个被Spring管理的资源,资源名称为menuMapper;@Select表示operateReturnBeans方法为一个select方法;@Results表示返回结果,@Result将返回结果中的字段名与实体类关联;@Param表示String sql这个变量是用于Mybatis的一个变量,其名称为sql(value值),该变量在@Select中调用(通过${sql}调用)。

        (6) 在com.geloin.spring.service中添加MenuService接口

[java] view plaincopy
  1. /** 
  2.  * 
  3.  * @author geloin 
  4.  * @date 2012-5-5 上午10:28:42 
  5.  */  
  6. package com.geloin.spring.service;  
  7.   
  8. import java.util.List;  
  9.   
  10. import com.geloin.spring.entity.Menu;  
  11.   
  12. /** 
  13.  *  
  14.  * @author geloin 
  15.  * @date 2012-5-5 上午10:28:42 
  16.  */  
  17. public interface MenuService {  
  18.     /** 
  19.      * 查询所有 
  20.      *  
  21.      * @author geloin 
  22.      * @date 2012-5-5 上午10:28:55 
  23.      * @return 
  24.      */  
  25.     List<Menu> find();  
  26. }  


        (7) 在com.geloin.spring.service.impl中添加MenuServiceImpl作为MenuService接口的实现

[java] view plaincopy
  1. /** 
  2.  * 
  3.  * @author geloin 
  4.  * @date 2012-5-5 上午10:29:22 
  5.  */  
  6. package com.geloin.spring.service.impl;  
  7.   
  8. import java.util.List;  
  9.   
  10. import javax.annotation.Resource;  
  11.   
  12. import org.springframework.stereotype.Repository;  
  13. import org.springframework.transaction.annotation.Transactional;  
  14.   
  15. import com.geloin.spring.entity.Menu;  
  16. import com.geloin.spring.mapper.MenuMapper;  
  17. import com.geloin.spring.service.MenuService;  
  18.   
  19. /** 
  20.  *  
  21.  * @author geloin 
  22.  * @date 2012-5-5 上午10:29:22 
  23.  */  
  24. @Repository(value = "menuService")  
  25. @Transactional  
  26. public class MenuServiceImpl implements MenuService {  
  27.   
  28.     @Resource(name = "menuMapper")  
  29.     private MenuMapper menuMapper;  
  30.   
  31.     /* 
  32.      * (non-Javadoc) 
  33.      *  
  34.      * @see com.geloin.spring.service.MenuService#find() 
  35.      */  
  36.     @Override  
  37.     public List<Menu> find() {  
  38.         String sql = "select * from tb_system_menu";  
  39.         return this.menuMapper.operateReturnBeans(sql);  
  40.     }  
  41.   
  42. }  


        其中,@Transactional表示该类被Spring作为管理事务的类,@Resource引入一个Spring定义的资源,资源名为menuMapper(name值),即为第七步定义的映射类。

        (8) 修改控制器LoginController

[java] view plaincopy
  1. /** 
  2.  * 
  3.  * @author geloin 
  4.  * @date 2012-5-5 上午9:31:52 
  5.  */  
  6. package com.geloin.spring.controller;  
  7.   
  8. import java.util.HashMap;  
  9. import java.util.List;  
  10. import java.util.Map;  
  11.   
  12. import javax.annotation.Resource;  
  13. import javax.servlet.http.HttpServletResponse;  
  14.   
  15. import org.springframework.stereotype.Controller;  
  16. import org.springframework.web.bind.annotation.RequestMapping;  
  17. import org.springframework.web.servlet.ModelAndView;  
  18.   
  19. import com.geloin.spring.entity.Menu;  
  20. import com.geloin.spring.service.MenuService;  
  21.   
  22. /** 
  23.  *  
  24.  * @author geloin 
  25.  * @date 2012-5-5 上午9:31:52 
  26.  */  
  27. @Controller  
  28. @RequestMapping(value = "background")  
  29. public class LoginController {  
  30.   
  31.     @Resource(name = "menuService")  
  32.     private MenuService menuService;  
  33.   
  34.     /** 
  35.      *  
  36.      *  
  37.      * @author geloin 
  38.      * @date 2012-5-5 上午9:33:22 
  39.      * @return 
  40.      */  
  41.     @RequestMapping(value = "to_login")  
  42.     public ModelAndView toLogin(HttpServletResponse response) throws Exception {  
  43.   
  44.         Map<String, Object> map = new HashMap<String, Object>();  
  45.   
  46.         List<Menu> result = this.menuService.find();  
  47.   
  48.         map.put("result", result);  
  49.   
  50.         return new ModelAndView("background/menu", map);  
  51.     }  
  52. }  


        通过map将从数据库中获取的值传递到jsp页面,"background/menu"值经context-dispatcher.xml转化后,变为/WEB-INF/pages/background/menu.jsp,即,方法toLogin的含义为:从数据库中获取菜单信息,然后将之存储到map中,通过map把菜单列表传递到/WEB-INF/pages/background/menu.jsp页面用于显示。

        (9) 编写/WEB-INF/pages/background/menu.jsp页面

[java] view plaincopy
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
  8. <title>Insert title here</title>  
  9. </head>  
  10. <body>  
  11.     <c:forEach items="${result }" var="item">  
  12.         ${item.id }--${item.name }--${item.parentId }--${item.url }--${item.isShowLeft }<br />  
  13.     </c:forEach>  
  14. </body>  
  15. </html>  


        (10) 显示结果


转:http://blog.csdn.net/geloin/article/details/7536968