1、引言
我们前面对mybatis的基础以及中级知识查询做了初步了解,比较它只是一个ORM框架。虽然独当一面,但是不能构造我们完整系统。接下来,我们讲讲他与Spring整合。以及顺带讲解一下Spring MVC。
2、Mybatis与Spring整合前奏
2.0 spring到底做了什么
。1、让spring管理我们的SqlsessionFactory
2、让spring管理mapper对象
3、让Spring管理数据源(从开始就在说)
这样看来,以前我们需要手工做的事情,根本就让spring自动化处理完毕!!!
结构:

2.1 整合jar包需要什么
新增jar:mybatis-spring、commons-dbcp、springwebmvc、spring-test、aspectjwaver、spring-jdbc
<span style="font-size:12px;"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ycy.mybatis01</groupId>
<artifactId>mybatis01</artifactId>
<packaging>war</packaging>
<version>1.0-mybatis01</version>
<name>mybatis01 Maven Webapp</name>
<url>http://maven.apache.org</url>
<build>
<finalName>mybatis01</finalName>
</build>
<!--junit测试-->
<dependencies>
<!--数据库驱动-->
<dependency>
<groupId>Mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.30</version>
</dependency>
<!--数据库连接池-->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<!--mybatis包-->
<!--ehcache核心包-->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.6.11</version>
</dependency>
<!--ehcache-Mybatis包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-ehcache</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<!--log4j官方推荐jar-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.3</version>
</dependency>
<!--log4j实现slf4j:因为Mybatis是用的slf4j-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.3</version>
</dependency>
<!--spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.2.0.RELEASE</version>
</dependency>
<!--spring-mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.3</version>
</dependency>
<!--事务管理-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.0</version>
</dependency>
<!--junit测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
</project></span><strong style="font-size: 18px;">
</strong>
2.2 整合spring
我们先思考一下怎么整合:mapper查询sql----》需要sqlsession----》找sqlsessionFactory-----》找1configLcation(sqlconfig)、2datasource-----》1sqlconfig、2dbcp(jdbc等);我们需要这么的思维哦,不要每次都去copy,要知道逻辑层次,记住了。
applicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" 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.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
<!-- 加载配置文件 -->
<context:property-placeholder location="classpath:/config/db.properties" />
<!-- 数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="5" />
</bean>
<!-- SqlsessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- mybatis配置文件 -->
<property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"/>
</bean>
<!-- 配置dao -->
<bean id="userDao" class="com.ycy.mybatis.dao.impl.UserMappermpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<!-- 配置mapper
MapperFactoryBean:用于生成mapper代理对象
-->
<!-- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="cn.itcast.mybatis.mapper.UserMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean> -->
</beans>
2.3 mapper
之前的mapper与一样设置的mapper.java
package com.ycy.mybatis.dao;
import com.ycy.mybatis.module.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* Created by Administrator on 2015/8/31 0031.
*/
public interface UserMapper {
public User getUserById(int id) throws Exception;
}
实现类(注意注解service)
package com.ycy.mybatis.dao.impl;
import com.ycy.mybatis.dao.UserMapper;
import com.ycy.mybatis.module.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Service;
import java.sql.SQLFeatureNotSupportedException;
import java.util.List;
/**
* Created by Administrator on 2015/8/31 0031.
*/
@Service
public class UserMappermpl extends SqlSessionDaoSupport implements UserMapper {
@Override
public User getUserById(int id) throws Exception {
SqlSession sqlSession=this.getSqlSession();
User user= sqlSession.selectOne("com.ycy.mybatis.dao.UserMapper.getUserById", id);
return user;
}
}
之前一样mapper一样设置mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--命名空间:分类管理sql隔离,方便管理-->
<mapper namespace="com.ycy.mybatis.dao.UserMapper">
<!--打开mapper二级缓存开关-->
<cache type="org.mybatis.caches.ehcache.EhcacheCache">
<property name="maxElementsInMemory" value="1000"/>
</cache>
<!--定义个ResultMap-->
<!--如果ResultMap定义在一个mapper.xml里面,直接使用resultMap的id ,如果不在同一个mapper要在resultMap前面加namespace-->
<resultMap id="userResultMap" type="User">
<id column="id" property="id" />
<result column="username" property="username" />
<result column="birthday" property="birthday"/>
<result column="sex" property="sex" />
<result column="address" property="address"/>
</resultMap>
<!--id标示一个sql语句,一个Statement,封装为一个MapperStatement-->
<!--parameterType:传入参数类型;resultType:输出结果类型,指定映射的pojo-->
<!--#{}标示一个占位符,-->
<!--查询用户-->
<!--oracle-->
<!-- SELECT * FROM USER WHERE username LIKE '%'||#{_parameter}||'%'-->
<!-- mysql-->
<select id="getUserById" parameterType="int" resultType="User" >
SELECT * FROM USER WHERE id=#{id}
</select>
</mapper>
2.4 测试
我这里就不用 ClassPathXmlApplicationContext; ApplicationContext;直接用spring.test,简单与方便。
package com.ycy.mybatis.springmybatisTest;
import com.ycy.mybatis.dao.UserMapper;
import com.ycy.mybatis.module.User;
import javafx.application.Application;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.applet.AppletContext;
/**
* Created by Administrator on 2015/9/15 0015.
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:spring/applicationContext.xml"})
public class Test11 {
@Autowired
private UserMapper userMapper;
@Test
public void test111() throws Exception {
User user=userMapper.getUserById(1);
System.out.println( user.getUsername());
}
}