6. 整合Spring

6. 整合Spring

MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。

官方文档

源码仓库

官方整合示例

6.1 整合Spring-所有需要的jar包导入

pom.xml


<dependency>
    <groupId>com.mchangegroupId>
    <artifactId>c3p0artifactId>
    <version>0.9.5.5version>
dependency>


<dependency>
	<groupId>javax.servletgroupId>
	<artifactId>jstlartifactId>
	<version>1.2version>
dependency>

<dependency>
	<groupId>javax.servletgroupId>
	<artifactId>javax.servlet-apiartifactId>
	<version>3.1.0version>
	<scope>providedscope>
dependency>

<dependency>
	<groupId>javax.servlet.jspgroupId>
	<artifactId>jsp-apiartifactId>
	<version>2.1version>
	<scope>providedscope>
dependency>


<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-contextartifactId>
    <version>${springframework.version}version>
dependency>

<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-jdbcartifactId>
    <version>${springframework.version}version>
dependency>

<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-webmvcartifactId>
    <version>${springframework.version}version>
dependency>

<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-txartifactId>
    <version>${springframework.version}version>
dependency>

<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-ormartifactId>
    <version>${springframework.version}version>
dependency>

<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-aopartifactId>
    <version>${springframework.version}version>
dependency>

<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-aspectsartifactId>
    <version>${springframework.version}version>
dependency>

<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-testartifactId>
    <version>${springframework.version}version>
    <scope>testscope>
dependency>

6.2.整合Spring-引入MyBatis之前的配置

mybatis-config.xml

<configuration>
	<settings>
		<setting name="mapUnderscoreToCamelCase" value="true"/>
		
		<setting name="lazyLoadingEnabled" value="true"/>
		<setting name="aggressiveLazyLoading" value="false"/>
		<setting name="cacheEnabled" value="true"/>
	settings>
configuration>

EmployeeMapper.xml

<mapper namespace="club.coderhome.c06.spring.EmployeeMapper">

 	<select id="getEmpById" resultType="club.coderhome.c01.helloworld.bean.Employee">
		select * from employee where id = #{id}
	select>
	
 	<select id="getEmps" resultType="club.coderhome.c01.helloworld.bean.Employee">
		select * from employee
	select>
mapper>

EmployeeMapper

public interface EmployeeMapper {

	public Employee getEmpById(Integer id);

	public List<Employee> getEmps();
	
}
1234567

6.3.整合Spring-SpringMVC配置文件编写

web.xml


<web-app ...>
  
	<context-param>
		<param-name>contextConfigLocationparam-name>
		<param-value>classpath:applicationContext.xmlparam-value>
	context-param>

	
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
	listener>
	
	
	
	<servlet>
		<servlet-name>springservlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
		<load-on-startup>1load-on-startup>
	servlet>

	
	<servlet-mapping>
		<servlet-name>springservlet-name>
		<url-pattern>/url-pattern>
	servlet-mapping>
  
web-app>

spring-servlet.xml

<beans ...">

	
	
	<context:component-scan base-package="club.coderhome.c06" use-default-filters="false">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
	context:component-scan>
	
	
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/pages/">property>
		<property name="suffix" value=".jsp">property>
	bean>
	
	<mvc:annotation-driven>mvc:annotation-driven>
	<mvc:default-servlet-handler/>
beans>

6.4.整合Spring-Spring配置文件编写

applicationContext.xml

<beans ...>

	
	<context:component-scan base-package="club.coderhome.c06">
		<context:exclude-filter type="annotation"
			expression="org.springframework.stereotype.Controller" />
	context:component-scan>

	
	<context:property-placeholder location="classpath:c04/dbconfig.properties" />
	
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="jdbcUrl" value="${jdbc.url}">property>
		<property name="driverClass" value="${jdbc.driver}">property>
		<property name="user" value="${jdbc.username}">property>
		<property name="password" value="${jdbc.password}">property>
	bean>
	
	<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource">property>
	bean>

	
	<tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>
	...

6.5.整合Spring-Spring整合MyBatis关键配置

applicationContext.xml

	...
	
	
	<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource">property>
		
		<property name="configLocation" value="classpath:c06/mybatis-config.xml">property>
		
		<property name="mapperLocations" value="classpath:c06/*Mapper.xml">property>
	bean>
	
	
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactoryBean">constructor-arg>
		<constructor-arg name="executorType" value="BATCH">constructor-arg>
	bean>
	
	
	<mybatis-spring:scan base-package="club.coderhome.c06"/>
	
	
beans>

6.6.整合Spring-整合测试

EmployeeController.java

@Controller
public class EmployeeController implements Serializable{

	private static final long serialVersionUID = -5415910268862124882L;
	
	@Autowired
	EmployeeService employeeService;
	
	@RequestMapping("/getemps")
	public String emps(Map<String,Object> map){
		List<Employee> emps = employeeService.getEmps();
		map.put("allEmps", emps);
		return "list";
	}
}

EmployeeService.java

@Service
public class EmployeeService {

	@Autowired
	private EmployeeMapper employeeMapper;
	
	@Autowired
	private SqlSession sqlSession;
	
	public List<Employee> getEmps(){
		//
		//EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
		return employeeMapper.getEmps();
	}

}

list.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>员工列表title>
head>
<body>
	<table>
			<tr>
				<td>idtd>
				<td>lastNametd>
				<td>emailtd>
				<td>gendertd>
			tr>
		<c:forEach items="${allEmps}" var="emp">
			<tr>
				<td>${emp.id}td>
				<td>${emp.lastName}td>
				<td>${emp.email}td>
				<td>${emp.gender}td>
			tr>
		c:forEach>
	
	table>

body>
html>

最后,在浏览器输入http://localhost:8080/mybatis/getemps进行测试

你可能感兴趣的:(mybatis,缓存,mybatis,java)