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) 显示结果
版权声明:本文为博主原创文章,未经博主同意不得转载。
本文基于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) 显示结果
版权声明:本文为博主原创文章,未经博主同意不得转载。
相关文章推荐
- [改善Java代码]别让null值和空值威胁到变长方法
- 【项目管理和构建】十分钟教程,eclipse配置maven + 创建maven项目(三)
- java学习笔记3
- ios 和 java byte[]的兼容处理
- 【LeetCode-137】Single Number II
- eclipse启动时devices.xml报错 不具有面有效性。它必须是来自枚举的值。
- Java BIO、NIO、AIO、同步、异步
- 关于maven的依赖分析
- java中InputStream转化为byte[]数组
- java学习笔记2
- java从本地向另外一个地址发送请求
- Java抽象类和接口的区别
- 《疯狂Java讲义(第3版)》.(李刚)——前言
- java中的进制
- java web classpath
- MD5加密--Java
- SpringMVC 基于注解的Controller详解
- Java线程与内存模型
- eclipse 的开发人员的 android studio 手册
- mysql和Myeclipse的小问题