• Spring 整合Mybatis实例


    演示样例下载地址:http://download.csdn.net/detail/geloin/4506640

            本文基于Spring 注解,让Spring跑起来。本文使用Mysql数据库。

            (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="${driver}" />  
    21.         <property name="url" value="${url}" />  
    22.         <property name="username" value="${username}" />  
    23.         <property name="password" value="${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="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) 显示结果


    版权声明:本文为博主原创文章,未经博主同意不得转载。

  • 相关阅读:
    剑指 Offer 51. 数组中的逆序对
    剑指 Offer 68
    剑指 Offer 68
    JS绑定事件三种方式
    图片懒加载原理及实现
    资源加载过程
    了解JS单线程和任务队列!
    JS函数作用域提升
    JS函数种类详解
    ES6之模版字符串
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5412484.html
Copyright © 2020-2023  润新知