背景
本文来调研一下 SpringBoot 中是如何集成进来第三方模块的。这里以 MyBatis
模块为例。
这里选取 MyBatis
的原因为,之前写过一个独立版本的 MyBatis
应用,见 MyBatis 3 初体验。
环境搭建
工程搭建
Idea 中,使用 Spring Initializr,模块选中 SQL 中的 MyBatis 和 MySQL 两项。
看 pom 文件中引入了 MyBatis 和 MySQL 两项
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
继续翻看 mybatis-spring-boot-starter
包中的 spring.provides
,发现实际上引入了 mybatis-spring-boot-autoconfigure,mybatis,mybatis-spring
三项。
因为还没有配置数据库,所以直接运行的话,会报错:
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class
Action:
Consider the following:
If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).
编写配置文件
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.username=note
spring.datasource.password=abeffect
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
准备 MySQL 数据库
MySQL 数据准备过程在 MyBatis 3 初体验中已写,这里方便阅读重新记录一下。
CREATE DATABASE test;
CREATE TABLE blog (
id INT NOT NULL,
author_id INT NOT NULL,
title VARCHAR(255),
PRIMARY KEY (id)
);
INSERT INTO blog (id,author_id,title) VALUES (1,101,'Jim Business');
INSERT INTO blog (id,author_id,title) VALUES (2,102,'Bally Slog');
创建映射对象
同样在 MyBatis 3 初体验中已写,这里方便阅读重新记录一下。
Blog
package com.example.demo005;
import java.io.Serializable;
public class Blog implements Serializable {
private Integer id;
private Integer authorId;
private String title;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAuthorId() {
return authorId;
}
public void setAuthorId(Integer authorId) {
this.authorId = authorId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "Blog [id=" + id + ", authorId=" + authorId + ", title=" + title + "]";
}
}
BlogMapper
注意,这里加了一个 @Mapper
注解和一个 @Component
注解。
package com.example.demo005;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
@Component
public interface BlogMapper {
@Select("SELECT * FROM blog WHERE id = #{id}")
Blog selectBlog(Integer id);
}
创建测试单元
package com.example.demo005;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class Demo005ApplicationTests {
@Autowired
private BlogMapper blogMapper;
@Test
public void contextLoads() {
}
@Test
public void test() {
Blog blog = blogMapper.selectBlog(1);
System.out.println(blog);
}
}
执行结果
2018-07-17 15:53:39.895 INFO 25459 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
Blog [id=1, authorId=null, title=Jim Business]
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于