Spring MVC整合Mybatis实例
示例下载地址:http://download.csdn.net/detail/geloin/4506640本文基于Spring 注解,让Spring跑起来。本文使用Mysql数据库。
(1) 导入相关包,包结构如下图所示:
(2) 修改src/applicationContext.xml文件,结果如下所示:
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
view plaincopy
[*]driver=com.mysql.jdbc.Driver
[*]url=jdbc:mysql://localhost:3306/ruisystem
[*]username=root
[*]password=root
(4) 在com.geloin.spring.entity包下添加实体类,实体类对应于数据表,其属性与数据表相同或多于数据表。
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中的配置一致)。
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接口
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接口的实现
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
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页面
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) 显示结果
页:
[1]