您的位置:首页 > 编程语言 > Java开发

Spring 整合Mybatis实例

2016-04-20 14:15 603 查看
演示样例下载地址:http://download.csdn.net/detail/geloin/4506640

本文基于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) 显示结果



版权声明:本文为博主原创文章,未经博主同意不得转载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: