springboot集成mybatis--單數據源和多數據源

一、單數據源

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進行測試

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章