Spring MVC整合Mybatis实例

码农的世界
期待各位码友在欣赏我的无私创作之时,也请大家多多支持我码农的世界,谢谢各位!
本文基于Spring 注解,让Spring跑起来。本文使用Mysql数据库。

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

这里写图片描述

    (2) 修改src/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:p="http://www.springframework.org/schema/p"  
        xmlns:context="http://www.springframework.org/schema/context"  
        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/tx   
        http://www.springframework.org/schema/tx/spring-tx-3.0.xsd   
        http://www.springframework.org/schema/context   
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">  

        <!-- 引入jdbc配置文件 -->  
        <context:property-placeholder location="classpath:jdbc.properties" />  

        <!--创建jdbc数据源 -->  
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
            destroy-method="close">  
            <property name="driverClassName" value="${driver}" />  
            <property name="url" value="${url}" />  
            <property name="username" value="${username}" />  
            <property name="password" value="${password}" />  
        </bean>  

        <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->  
        <bean id="transactionManager"  
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
            <property name="dataSource" ref="dataSource" />  
        </bean>  

        <!-- 创建SqlSessionFactory,同时指定数据源 -->  
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
            <property name="dataSource" ref="dataSource" />  
        </bean>  

        <!-- 可通过注解控制事务 -->  
        <tx:annotation-driven />  

        <!-- Mapper接口所在包名,Spring会自动查找其下的Mapper -->  
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
            <property name="basePackage" value="com.geloin.spring.mapper" />  
        </bean>  

    </beans>  

(3) 在src下添加jdbc.properties

    driver=com.mysql.jdbc.Driver  
    url=jdbc:mysql://localhost:3306/ruisystem  
    username=root  
    password=root  

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

    /** 
     * 
     * @author geloin 
     * @date 2012-5-5 上午10:24:43 
     */  
    package com.geloin.spring.entity;  

    /** 
     *  
     * @author geloin 
     * @date 2012-5-5 上午10:24:43 
     */  
    public class Menu {  
        /** 
         * 惟一标识 
         */  
        private Integer id;  
        /** 
         * 父ID 
         */  
        private Integer parentId;  
        /** 
         * 名称 
         */  
        private String name;  
        /** 
         * 对应的地址 
         */  
        private String url;  
        /** 
         * 是否显示在左侧 
         */  
        private Integer isShowLeft;  

        /** 
         *  
         * @author geloin 
         * @date 2012-5-5 上午10:26:19 
         * @return the id 
         */  
        public Integer getId() {  
            return id;  
        }  

        /** 
         *  
         * @author geloin 
         * @date 2012-5-5 上午10:26:19 
         * @param id 
         *            the id to set 
         */  
        public void setId(Integer id) {  
            this.id = id;  
        }  

        /** 
         *  
         * @author geloin 
         * @date 2012-5-5 上午10:26:19 
         * @return the parentId 
         */  
        public Integer getParentId() {  
            return parentId;  
        }  

        /** 
         *  
         * @author geloin 
         * @date 2012-5-5 上午10:26:19 
         * @param parentId 
         *            the parentId to set 
         */  
        public void setParentId(Integer parentId) {  
            this.parentId = parentId;  
        }  

        /** 
         *  
         * @author geloin 
         * @date 2012-5-5 上午10:26:19 
         * @return the name 
         */  
        public String getName() {  
            return name;  
        }  

        /** 
         *  
         * @author geloin 
         * @date 2012-5-5 上午10:26:19 
         * @param name 
         *            the name to set 
         */  
        public void setName(String name) {  
            this.name = name;  
        }  

        /** 
         *  
         * @author geloin 
         * @date 2012-5-5 上午10:26:19 
         * @return the url 
         */  
        public String getUrl() {  
            return url;  
        }  

        /** 
         *  
         * @author geloin 
         * @date 2012-5-5 上午10:26:19 
         * @param url 
         *            the url to set 
         */  
        public void setUrl(String url) {  
            this.url = url;  
        }  

        /** 
         *  
         * @author geloin 
         * @date 2012-5-5 上午10:26:19 
         * @return the isShowLeft 
         */  
        public Integer getIsShowLeft() {  
            return isShowLeft;  
        }  

        /** 
         *  
         * @author geloin 
         * @date 2012-5-5 上午10:26:19 
         * @param isShowLeft 
         *            the isShowLeft to set 
         */  
        public void setIsShowLeft(Integer isShowLeft) {  
            this.isShowLeft = isShowLeft;  
        }  

    }  

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

    /** 
     * 
     * @author geloin 
     * @date 2012-5-5 上午10:26:34 
     */  
    package com.geloin.spring.mapper;  

    import java.util.List;  

    import org.apache.ibatis.annotations.Param;  
    import org.apache.ibatis.annotations.Result;  
    import org.apache.ibatis.annotations.Results;  
    import org.apache.ibatis.annotations.Select;  
    import org.springframework.stereotype.Repository;  

    import com.geloin.spring.entity.Menu;  

    /** 
     *  
     * @author geloin 
     * @date 2012-5-5 上午10:26:34 
     */  
    @Repository(value = "menuMapper")  
    public interface MenuMapper {  

        @Select(value = "${sql}")  
        @Results(value = { @Result(id = true, property = "id", column = "id"),  
                @Result(property = "parentId", column = "c_parent_id"),  
                @Result(property = "url", column = "c_url"),  
                @Result(property = "isShowLeft", column = "c_is_show_left"),  
                @Result(property = "name", column = "c_name") })  
        List<Menu> operateReturnBeans(@Param(value = "sql") String sql);  
    }  

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

    (6) 在com.geloin.spring.service中添加MenuService接口
    /** 
     * 
     * @author geloin 
     * @date 2012-5-5 上午10:28:42 
     */  
    package com.geloin.spring.service;  

    import java.util.List;  

    import com.geloin.spring.entity.Menu;  

    /** 
     *  
     * @author geloin 
     * @date 2012-5-5 上午10:28:42 
     */  
    public interface MenuService {  
        /** 
         * 查询所有 
         *  
         * @author geloin 
         * @date 2012-5-5 上午10:28:55 
         * @return 
         */  
        List<Menu> find();  
    }  

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

    /** 
     * 
     * @author geloin 
     * @date 2012-5-5 上午10:29:22 
     */  
    package com.geloin.spring.service.impl;  

    import java.util.List;  

    import javax.annotation.Resource;  

    import org.springframework.stereotype.Repository;  
    import org.springframework.transaction.annotation.Transactional;  

    import com.geloin.spring.entity.Menu;  
    import com.geloin.spring.mapper.MenuMapper;  
    import com.geloin.spring.service.MenuService;  

    /** 
     *  
     * @author geloin 
     * @date 2012-5-5 上午10:29:22 
     */  
    @Repository(value = "menuService")  
    @Transactional  
    public class MenuServiceImpl implements MenuService {  

        @Resource(name = "menuMapper")  
        private MenuMapper menuMapper;  

        /* 
         * (non-Javadoc) 
         *  
         * @see com.geloin.spring.service.MenuService#find() 
         */  
        @Override  
        public List<Menu> find() {  
            String sql = "select * from tb_system_menu";  
            return this.menuMapper.operateReturnBeans(sql);  
        }  

    }  

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

    (8) 修改控制器LoginController
    /** 
     * 
     * @author geloin 
     * @date 2012-5-5 上午9:31:52 
     */  
    package com.geloin.spring.controller;  

    import java.util.HashMap;  
    import java.util.List;  
    import java.util.Map;  

    import javax.annotation.Resource;  
    import javax.servlet.http.HttpServletResponse;  

    import org.springframework.stereotype.Controller;  
    import org.springframework.web.bind.annotation.RequestMapping;  
    import org.springframework.web.servlet.ModelAndView;  

    import com.geloin.spring.entity.Menu;  
    import com.geloin.spring.service.MenuService;  

    /** 
     *  
     * @author geloin 
     * @date 2012-5-5 上午9:31:52 
     */  
    @Controller  
    @RequestMapping(value = "background")  
    public class LoginController {  

        @Resource(name = "menuService")  
        private MenuService menuService;  

        /** 
         *  
         *  
         * @author geloin 
         * @date 2012-5-5 上午9:33:22 
         * @return 
         */  
        @RequestMapping(value = "to_login")  
        public ModelAndView toLogin(HttpServletResponse response) throws Exception {  

            Map<String, Object> map = new HashMap<String, Object>();  

            List<Menu> result = this.menuService.find();  

            map.put("result", result);  

            return new ModelAndView("background/menu", map);  
        }  
    }  

通过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页面
    <%@ page language="java" contentType="text/html; charset=UTF-8"  
        pageEncoding="UTF-8"%>  
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    <html>  
    <head>  
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
    <title>Insert title here</title>  
    </head>  
    <body>  
        <c:forEach items="${result }" var="item">  
            ${item.id }--${item.name }--${item.parentId }--${item.url }--${item.isShowLeft }<br />  
        </c:forEach>  
    </body>  
    </html>  

(10) 显示结果
这里写图片描述

期待各位码友在欣赏我的无私创作之时,也请大家多多支持我码农的世界,谢谢各位!

码农的世界

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值