`
tw_loverr
  • 浏览: 6574 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Spring MVC整合Mybatis实例

阅读更多
本文基于Spring 注解,让Spring跑起来。本文使用Mysql数据库。
        (1) 导入相关包,包结构如下图所示:

        (2) 修改src/applicationContext.xml文件,结果如下所示:
[java] view plaincopy
<?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
[java] view plaincopy
driver=com.mysql.jdbc.Driver 
url=jdbc:mysql://localhost:3306/ruisystem 
username=root 
password=root 

        (4) 在com.geloin.spring.entity包下添加实体类,实体类对应于数据表,其属性与数据表相同或多于数据表。
[java] view plaincopy
/**
*
* @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中的配置一致)。
[java] view plaincopy
/**
*
* @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接口
[java] view plaincopy
/**
*
* @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接口的实现
[java] view plaincopy
/**
*
* @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
[java] view plaincopy
/**
*
* @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页面
[java] view plaincopy
<%@ 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) 显示结果
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics