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

Spring 2.0 只支持 iBatis 2.0。那么,我们就想将 MyBatis3 的支持添加到 Spring 3.0 中。不幸的是,Spring 3.0 的开发在 MyBatis 3.0 官方发布前就结束了。 由于 Spring 开发团队不想发布一个基于未发布版的 MyBatis 的整合支持,如果要获得 Spring 官方的支持,只能等待下一次的发布了。基于在 Spring 中对 MyBatis 提供支持的兴趣,MyBatis 社区认为,应该开始召集有兴趣参与其中的贡献者们,将对 Spring 的集成作为 MyBatis 的一个社区子项目。

MyBatis-Spring 需要以下版本:

MyBatis-Spring MyBatis Spring Framework Spring Batch Java
2.0 3.5+ 5.0+ 4.0+ Java 8+
1.3 3.4+ 3.2.2+ 2.1+ Java 6+

1. 安装mybatis-spring

要使用 MyBatis-Spring 模块,只需要在类路径下包含 mybatis-spring-2.0.6.jar 文件和相关依赖即可。

如果使用 Maven 作为构建工具,仅需要在 pom.xml 中加入以下代码即可:

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version>
</dependency>

2. 快速上手

要和 Spring 一起使用 MyBatis,需要在 Spring 应用上下文中定义至少两样东西:

  • 一个 SqlSessionFactory
  • 至少一个数据映射器类

在 MyBatis-Spring 中,可使用 SqlSessionFactoryBean来创建 SqlSessionFactory。 要配置这个工厂 bean,只需要把下面代码放在 Spring 的 XML 配置文件中:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" />
</bean>
@Configuration
public class MyBatisConfig {@Beanpublic SqlSessionFactory sqlSessionFactory() throws Exception {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(dataSource());return factoryBean.getObject();}
}

【注意】:SqlSessionFactory 需要一个 DataSource(数据源)。这可以是任意的 DataSource,只需要和配置其它 Spring 数据库连接一样配置它就可以了。

假设你定义了一个如下的 mapper 接口:

public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{userId}")User getUser(@Param("userId") String userId);
}

那么可以通过 MapperFactoryBean 将接口加入到 Spring 中:

<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" /><property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

需要注意的是:所指定的映射器类必须是一个接口,而不是具体的实现类。在这个示例中,通过注解来指定 SQL 语句,但是也可以使用 MyBatis 映射器的 XML 配置文件。

配置好之后,你就可以像 Spring 中普通的 bean 注入方法那样,将映射器注入到你的业务或服务对象中。MapperFactoryBean 将会负责 SqlSession 的创建和关闭。 如果使用了 Spring 的事务功能,那么当事务完成时,session 将会被提交或回滚。最终任何异常都会被转换成 Spring 的 DataAccessException 异常。

使用 Java 代码来配置的方式如下:

@Configuration
public class MyBatisConfig {@Beanpublic UserMapper userMapper() throws Exception {SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory());return sqlSessionTemplate.getMapper(UserMapper.class);}
}

要调用 MyBatis 的数据方法,只需一行代码:

public class FooServiceImpl implements FooService {private final UserMapper userMapper;public FooServiceImpl(UserMapper userMapper) {this.userMapper = userMapper;}public User doSomeBusinessStuff(String userId) {return this.userMapper.getUser(userId);}
}

3. 实例

下面是一个实例:

(1)项目结构

(2) Blog.java

package com.company.org.pojo;import lombok.Data;@Data
public class Blog {private int id;private String title;private int readcount;
}

(3)BlogMapper.java

package com.company.org.mapper;import com.company.org.pojo.Blog;import java.util.List;public interface BlogMapper {public List<Blog> selectBlog();
}

(4)BlogMapper.xml

<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.company.org.mapper.BlogMapper"><select id="selectBlog" resultType="Blog">select id, title, readcount from article limit 10;</select></mapper>

(5)BlogMapperIpl.java

package com.company.org.mapper;import com.company.org.pojo.Blog;
import org.mybatis.spring.SqlSessionTemplate;import java.util.List;public class BlogMapperIpl implements BlogMapper {// 在原来,我们的所有操作都是用sqlSession来执行;// 现在,的hi用SqlSessionTemplateprivate SqlSessionTemplate sqlSession;public void setSqlSession(SqlSessionTemplate sqlSession){this.sqlSession = sqlSession;}@Overridepublic List<Blog> selectBlog() {BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);return mapper.selectBlog();}
}

(6)mybatis-config.xml

<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" ><!-- configuration 核心配置文件 -->
<configuration><typeAliases><typeAlias type="com.company.org.pojo.Blog" alias="Blog"/></typeAliases></configuration>

(7)spring-dao.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!-- DataSource:使用Spring的数据源替换Mybatis的配置  --><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/csdn_blog?useSSL=true&amp;userUnicode=true&amp;characterEncoding=utf8&amp;autoReconnect=true&amp;failOverReadOnly=false"/><property name="username" value="root"/><property name="password" value="123456"/></bean><!-- sqlSessionFactory   --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource" /><!-- 绑定Mybatis配置文件 --><property name="configLocation" value="classpath:mybatis-config.xml"/><property name="mapperLocations" value="classpath:com/company/org/mapper/*.xml"/></bean><bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><!-- 只能用构造器注入sqlSessionFactory,因为它没有set方法 --><constructor-arg index="0" ref="sqlSessionFactory"/></bean><bean id="blogMapper" class="com.company.org.mapper.BlogMapperIpl"><property name="sqlSession" ref="sqlSession"/></bean></beans>

(8)MyTest.java

import com.company.org.mapper.BlogMapper;
import com.company.org.pojo.Blog;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import java.io.IOException;
import java.util.List;public class MyTest {@Testpublic void test() throws IOException {ApplicationContext context = new ClassPathXmlApplicationContext("spring-dao.xml");BlogMapper blogMapper = context.getBean("blogMapper", BlogMapper.class);List<Blog> blogList = blogMapper.selectBlog();for (Blog blog : blogList){System.out.println(blog);}}
}

(9)pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>springProject-24</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.4</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.4</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.6</version></dependency><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></dependency></dependencies><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build></project>

【Spring】mybatis-spring相关推荐

  1. 【小家Spring】聊聊Spring中的数据绑定 --- DataBinder本尊(源码分析)

    每篇一句 > 唯有热爱和坚持,才能让你在程序人生中屹立不倒,切忌跟风什么语言或就学什么去~ 相关阅读 [小家Spring]聊聊Spring中的数据绑定 --- 属性访问器PropertyAcce ...

  2. 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突

    [转]MyBatis学习总结(四)--解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...

  3. mysql-generator用法_【原创】MyBatis Generator使用小记

    [原创]MyBatis Generator使用小记 leeon | 分享未来 2014-08-23 3195 阅读 最近在新的项目中使用Mybatis提供的generator工具来自动生成代码,为了提 ...

  4. 简单开源java ssm_[VIP源码]【S006】SSM(Spring+Spring MVC+Mybatis) java开源博客管理系统项目源码...

    java源码项目名称:SSM(Spring+Spring MVC+Mybatis) java开源博客管理系统项目源码  java项目源码 1 ?, R, _* q  n8 v) S$ R7 ?百度网盘 ...

  5. Spring源码分析【8】-MyBatis注解方法不能重载

    代码如下: 这是不可以的,会报错: 2016-08-18 11:36:00,267 [main] ERROR [org.mybatis.spring.mapper.MapperFactoryBean] ...

  6. 【Java】MyBatis与Spring框架整合(一)

    本文将利用 Spring 对 MyBatis 进行整合,在对组件实现解耦的同时,还能使 MyBatis 框架的使用变得更加方便和简单. 整合思路 作为 Bean 容器,Spring 框架提供了 IoC ...

  7. 【BackEnd--SSM 框架详解】Mybatis+Spring+SpringMVC学习笔记(完整详细版)

    BackEnd 学习笔记 1 Java 2 SSM框架(Mybatis+Spring+SpringMVC) 3 SpringBoot(SpringBoot 3.x+MybatisPlus) 4 Spr ...

  8. 【java】通过spring通过AOP实现日志打印(二)

    本人菜鸡一个,上一篇文章说了说自己对AOP的理解,并留下了一个用spring注解实现AOP的坑,本文就来填填这个坑 该系列暂时有两篇文章: [java]java中的AOP思想(一):https://b ...

  9. 基于spring cloud 的灰度发布实践_【收藏】基于spring cloud灰度发版方案

    简介 敏捷开发迭代周期短发布快,每周都可能面临版本发版上线,为最大可能的降低对用户的影响提高服务可用率,大部分团队都需要等到半夜做发布和支持.本文就如何基于spring cloud体系做灰度发版改造提 ...

  10. 【译文】用Spring Cloud和Docker搭建微服务平台

    by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...

最新文章

  1. java从字符串中提取数字
  2. angular核心原理解析3:指令的执行过程
  3. 搜索(DFS)---好友关系的连通分量数目
  4. 调用python_「Python 进阶」python 实现链式调用
  5. gson生成jsonobject_GSON形式生成和解析json数据
  6. Windows下svn服务器安装
  7. vb只显示两位小数_【名师课堂】苏教数学五年级上3.1小数的意义
  8. Leetcode 最小栈问题
  9. vbs 解析 json jsonp 方法
  10. linux oracle查看服务,技术|如何查看 Linux 中所有正在运行的服务
  11. 任务方案思考:序列标注(NER)篇
  12. MySQL集群和主从复制分别适合在什么场景下使用
  13. NLP学习一 形式语言与自动机
  14. 不要放弃!“软考论文”一点也不难
  15. 第二人生的源码分析(9)登录界面显示
  16. 解决checkbox复选框未选中时不传值的问题 / 判读复选框是否选中
  17. 无需会员将有道云笔记脑图转换xmind
  18. 性能优化的 10 个技巧
  19. 编程范式:函数式编程防御式编程响应式编程契约式编程流式编程
  20. wordpress仿站实战教程:wordpress调用函数记录

热门文章

  1. LeetCode 2296. 设计一个文本编辑器(双栈)
  2. 华工计算机高等数学b下作业,华工高等数学下作业
  3. 读懂 diff 命令
  4. 根据url地址生成二维码,微信扫描二维码可直接打开网址
  5. 隐私护盾 持续升级!安卓绿色联盟应用体验标准2.0(安全篇)启动公示
  6. 非淡泊无以明志,非宁静无以致远!
  7. 关于免费的虚拟主机与虚拟主机的一些事情
  8. php study计算闰年,IOS_IOS获取指定年月的当月天数,前言 在开发IOS中常常需要用 - phpStudy...
  9. LM324LM358放大器的设计问题
  10. 【scrapy爬虫】了解Scrapy+爬虫豆瓣电影Top250信息