一、單數據源
1、引入依賴(注意以下操作都是在maven工程下的)
<!-- springboot集成mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<!-- 引入mysql操作類 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid數據庫連接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
2、配置(這裏使用druid數據庫連接池)
# 數據庫連接配置
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/數據庫名
spring.datasource.username=用戶名
spring.datasource.password=密碼
# 配置 Mapper 對應的 XML 文件路徑
mybatis.mapper-locations=classpath:mapper/*.xml
# 配置項目中實體類包路徑(註冊別名)
mybatis.type-aliases-package=com.wwz.entity
3、創建實體類(放在com.wwz.entity包下)
package com.wwz.entity;
public class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
4、創建數據訪問層接口(放在src/jmain/java下的com.wwz.mapper包下)
package com.wwz.mapper;
import com.wwz.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
List<User> listAll();
}
有兩種方法指明該接口是一個Mapper:
1、在UserMapper上添加@Mapper註解,這種方法需要在每一個Mapper接口上都添加;
2、在配置類(例如springboot啓動類)上添加@MapperScan(“包名”),表示這個包下的所有都作爲Mapper,這樣就不需要在每一個接口上添加@Mapper註解
5、創建UserMapper.xml文件(放在src/main/resources下的mapper文件夾)
<?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">
<mapper namespace="com.wwz.mapper.UserMapper" >
<select id="listAll" resultType="User">
SELECT id, name
FROM user
</select>
</mapper>
6、創建service、controller(這裏省略service層)
package com.wwz.controller;
import com.wwz.entity.User;
import com.wwz.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserController {
@Autowired
UserMapper userMapper;
@GetMapping("/listUser")
public String listUser() {
List<User> users = userMapper.listAll();
for (User user : users) {
System.out.println(user.getName());
}
return users.toString();
}
}
7、運行測試
注意事項:在maven工程下,XML配置文件建議寫在resources目錄下,如果將mapper.xml文件寫在包下,maven在運行時會忽略包下的XML文件,因此需要在pom.xml文件指明資源文件的位置
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
二、多數據源
1、引入依賴(和上面一樣)
2、配置application.properties文件
# 配置多數據源
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.one.username=用戶名
spring.datasource.one.password=密碼
spring.datasource.one.url=jdbc:mysql://localhost:3306/數據庫名
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.two.username=用戶名
spring.datasource.two.password=密碼
spring.datasource.two.url=jdbc:mysql://localhost:3306/數據庫名
3、配置數據源
package com.wwz.config;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
/**
* @author: wuwenzhi
* @created: 2019/11/11.
* @updater:
* @description: 根據配置文件配置多數據源
*/
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties("spring.datasource.one")
DataSource dataSourceOne() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties("spring.datasource.two")
DataSource dataSourceTwo() {
return DruidDataSourceBuilder.create().build();
}
}
3、mybatis配置,主要提供SqlSessionFactory和SqlSessionTemplate,這裏演示的兩個數據源,所以分別創建配置
第一個:
package com.wwz.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
/**
* @author: wuwenzhi
* @created: 2019/11/11.
* @updater:
* @description: 創建sqlSessionFactory,指定數據源,並指明在哪個包下使用
*/
@Configuration
@MapperScan(value = "com.wwz.mapper1", sqlSessionFactoryRef = "sqlSessionFactoryOne")
public class MyBatisConfigOne {
@Autowired
@Qualifier("dataSourceOne")
DataSource dataSourceOne;
@Bean
SqlSessionFactory sqlSessionFactoryOne() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSourceOne);
// 設置mybatis的xml所在位置
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean
SqlSessionTemplate sqlSessionTemplateOne() throws Exception {
return new SqlSessionTemplate(sqlSessionFactoryOne());
}
}
第二個:
package com.wwz.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import javax.sql.DataSource;
/**
* @author: wuwenzhi
* @created: 2019/11/11.
* @updater:
* @description: 創建sqlSessionFactory,指定數據源,並指明在哪個包下使用
*/
@Configuration
@MapperScan(value = "com.wwz.mapper2", sqlSessionFactoryRef = "sqlSessionFactoryTwo")
public class MyBatisConfigTwo {
@Autowired
@Qualifier("dataSourceTwo")
DataSource dataSourceTwo;
@Bean
SqlSessionFactory sqlSessionFactoryTwo() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSourceTwo);
// 設置mybatis的xml所在位置
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean
SqlSessionTemplate sqlSessionTemplateOne() throws Exception {
return new SqlSessionTemplate(sqlSessionFactoryTwo());
}
}
4、創建實體類,分別在com.wwz.mapper1、com.wwz.mapper2下創建mapper接口,以及創建對應的xml文件
5、創建controller進行測試