wueasy框架之MyBatis多数据库使用

APR 2019-05-21

使用wueasy框架过程中,微服务怎么使用MyBatis对多个数据库进行操作?

前一章我们已经介绍了MyBatis使用教程,本章是在上一章的基础上进行操作,假设你已经对上一章内容有所了解。

新增数据库映射

编写数据库表结构映射实体bean,注意:包的路径和之前不一样

为了简化自定义sql,这里使用的是通用Mapper,部分属性需要使用注解方式,注解可参考以下api文档https://github.com/abel533/Mapper/wiki/2.2-mapping

package com.wueasy.demo2.entity;

import java.io.Serializable;

import javax.persistence.Id;
import javax.persistence.Table;

import tk.mybatis.mapper.annotation.KeySql;

@Table(name = "demo")
public class Demo implements Serializable {

	private static final long serialVersionUID = 1L;
	@Id
	@KeySql(useGeneratedKeys = true)
	private Long id;

	private String name;

	private Long createdBy;

	private String createdTime;

	private Long modifiedBy;

	private String modifiedTime;

	private String city;

	private String type;

	private String sex;

	private String state;

	private String description;

	private String filePath;

	private String area1;

	private String area2;

	private String area3;



	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Long getCreatedBy() {
		return createdBy;
	}

	public void setCreatedBy(Long createdBy) {
		this.createdBy = createdBy;
	}

	public String getCreatedTime() {
		return createdTime;
	}

	public void setCreatedTime(String createdTime) {
		this.createdTime = createdTime;
	}

	public Long getModifiedBy() {
		return modifiedBy;
	}

	public void setModifiedBy(Long modifiedBy) {
		this.modifiedBy = modifiedBy;
	}

	public String getModifiedTime() {
		return modifiedTime;
	}

	public void setModifiedTime(String modifiedTime) {
		this.modifiedTime = modifiedTime;
	}

	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getState() {
		return state;
	}

	public void setState(String state) {
		this.state = state;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public String getFilePath() {
		return filePath;
	}

	public void setFilePath(String filePath) {
		this.filePath = filePath;
	}

	public String getArea1() {
		return area1;
	}

	public void setArea1(String area1) {
		this.area1 = area1;
	}

	public String getArea2() {
		return area2;
	}

	public void setArea2(String area2) {
		this.area2 = area2;
	}

	public String getArea3() {
		return area3;
	}

	public void setArea3(String area3) {
		this.area3 = area3;
	}

}

新增mapper接口

注意:包的路径和之前不一样 接口需要继承通用Mapper接口,Mapper接口提供了常见的增删改查方法,可以直接使用。

package com.wueasy.demo2.mapper;

import java.util.List;

import com.wueasy.base.entity.DataMap;
import com.wueasy.demo2.entity.Demo;

import tk.mybatis.mapper.common.Mapper;

public interface DemoMapper extends Mapper<Demo> {

}

数据库连接配置

配置数据库连接信息和mybatis扫描信息,需要配置两个数据库连接。

重点注意:mybatis的扫描配置,通过配置不同的扫描路径,自动注入不同的数据源

wueasy:
  datasource :
    demo : #第一个数据库
      mybatis:
        basePackage: com.wueasy.demo.mapper
        mapperLocations: classpath*:mybatis/wueasy/demo/*.xml
      connection:
        url : jdbc:mysql://localhost:3306/easy_data?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
        username : easyadmin
        password : easyadmin
        #连接池配置
        initialSize : 10  #初始化大小
        minIdle : 10  #最小连接
        maxActive : 20  #最大连接
        maxWait : 60000  #配置获取连接等待超时的时间
        timeBetweenEvictionRunsMillis : 2000  #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        minEvictableIdleTimeMillis : 600000  #配置一个连接在池中最小生存的时间,单位是毫秒
        maxEvictableIdleTimeMillis : 600000  #配置一个连接在池中最大生存的时间,单位是毫秒
        validationQuery : SELECT 1 from dual
        testWhileIdle : true
        testOnBorrow : false
        testOnReturn : false
        keepAlive : true
    demo2 : #第二个数据库
      mybatis:
        basePackage: com.wueasy.demo2.mapper
        mapperLocations: classpath*:mybatis/wueasy/demo2/*.xml
      connection:
        url : jdbc:mysql://localhost:3306/easy_data?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
        username : easyadmin
        password : easyadmin
        #连接池配置
        initialSize : 10  #初始化大小
        minIdle : 10  #最小连接
        maxActive : 20  #最大连接
        maxWait : 60000  #配置获取连接等待超时的时间
        timeBetweenEvictionRunsMillis : 2000  #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        minEvictableIdleTimeMillis : 600000  #配置一个连接在池中最小生存的时间,单位是毫秒
        maxEvictableIdleTimeMillis : 600000  #配置一个连接在池中最大生存的时间,单位是毫秒
        validationQuery : SELECT 1 from dual
        testWhileIdle : true
        testOnBorrow : false
        testOnReturn : false
        keepAlive : true

测试接口

使用junit测试接口

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=Application.class)
public class DbTests {

	@Autowired
	private UserMapper userMapper;

  @Autowired
	private DemoMapper demoMapper;

	@Test
    public void testObj()  {

		try{
			//查询全部
			System.err.println(JsonHelper.toJSONString(userMapper.selectAll()));

		}catch(Exception e) {
			e.printStackTrace();
		}

    }
}