前面几篇讲了官方方式配置Mybatis、集成Spring方式配置Mybatis、利用Spring JavaConfig配置Mybatis;而今天则学习基于Spring Boot来配置Mybatis。
认识Spring Boot
Spring boot存在的意义:
Spring Boot 是所有基于 Spring 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。
简单来说就是以往用Spring来整合第三方组件,我们可能需要去做很多配置,而Spring Boot的出现是为了使用项目的组件的整合变得更容易,基于Spring Boot,开发都可以很快成形一个Spring应用。
继续深入Spring Boot
- 它使用 “约定优于配置” 的理念让你的项目快速运行起来。
- 它并不是什么新的框架,而是默认配置了很多框架的使用方式,就像 Maven 整合了所有的 jar 包一样,Spring Boot 默认支持所有流行框架的集成,而这一切我们几乎可以不做什么配置,因为spring boot对很多流行的框架的配置作了默认约定。
- Spring boot比较核心的自动配置特性正是为了支持约定大于配置这一理念,我们开发者也可以利用这一特性来自定义一个自动配置的组件。
Spring boot替换掉了Spring?
spring boot并不是替换掉了spring,spring boot只是对Spring的整合能力、Spring应用的快速成形能力作了提升,真正管理组件的还是Spring的IOC容器。你可以这么理解:Spring Boot是Spring的一双翅膀,它让Spring飞了起来。
使用Spring Boot快速整合Mybatis
有点意外的Spring boot官方auto-config并没有特意整合Mybatis,但是借用spring boot的自动配置扩展能力,网上已经有人弄了一个mybatis-spring-boot-starter,所以只需引入这个starter就把spring boot和mybatis打包过来了,并且也已经完成了自动集成。
所以我们会发现只要是流行的框架,即便spring官方没有作自动配置适配,网上也会有其它组织或个人已经有人做了,所以我们也不用自己去造轮子作适配,当然后续博客我会造一个小轮子,以便让大家更好体会自动配置的妙用。
示例代码及配置如下:
gradle引入方式:
compile "org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2"
application.yml配置
## 仅仅给一个数据源即可,其它会有默认配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/blog?useUnicode=true&characterEncoding=utf8
username: root
password: 123456
mybatis:
mapper-locations: classpath:org/wbw/mybatisplus/mapper/*.xml
type-handlers-package: org.wbw.mybatisplus.handler
应用启动代码
package org.wbw.mybatisplus;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.wbw.mybatisplus.entity.Blog;
import org.wbw.mybatisplus.mapper.BlogMapper;
@SpringBootApplication
@MapperScan(basePackages = "org.wbw.mybatisplus.mapper")
public class MybatisSpringBootApp {
public static void main(String[] args) {
// 启动Spring boot应用
ApplicationContext applicationContext = SpringApplication.run(MybatisSpringBootApp.class, args);
// 启动完成之后,拿到Mapper访问下数据库
testQuery(applicationContext);
}
private static void testQuery(ApplicationContext applicationContext) {
BlogMapper blogMapper = applicationContext.getBean(BlogMapper.class);
Blog blog = blogMapper.selectBlog(6);
System.out.println(blog);
}
}