springboot整合mybatis和mycat
其实springboot通过mybatis整合mycat和mysql的配置基本相似,最大的坑就是mybatis的版本依赖问题。
下面直接上代码,本模块是springcloud下的一个子模块,模块中有关于eureka注册中心等配置信息,如果只是单纯的springboot项目,可以忽略eureka相关依赖以及配置信息,只关注mybatis和mycat的配置即可。
准备条件:
1.java环境搭建完成。
2.mycat安装配置完成:
具体可参考: https://blog.csdn.net/qq_37488998/article/details/110679222
schema表的配置如下:
rule.xml配置信息
server.xml配置信息:
3.用mycat添加一些数据,以租户表为例:
1.创建项目模块,目录结构如下
2.pom依赖
注意:mysql驱动,mycat使用的不能用过高的版本依赖,只能用5.*的版本。
博主开始用8. *,查询时候一直报错缺少一些东西。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>demo</artifactId>
<groupId>com.example</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ideal-mycat-1016</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-commons</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- mysql驱动,mycat使用的不能用高的依赖,只能用5.*,还不能高的小版本-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.31</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!--可以用maven直接将代码打成jar包-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3.yml配置文件
server:
port: 1016
spring:
main:
allow-bean-definition-overriding: true
application:
name: IDEAL-MYCAT
# Mycat配置信息
datasource:
url: jdbc:mysql://localhost:8066/TESTDB?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
username: root
password: root
# mybatis是依赖5.*的版本,所以相对于8.*的少个cj;
driver-class-name: com.mysql.jdbc.Driver
# MyBatis
mybatis:
type-aliases-package: com.demo.mycat.mapper
mapper-locations: classpath:/mapper/*.xml
configuration:
map-underscore-to-camel-case: true
eureka:
instance:
prefer-ip-address: true # 注册服务的时候使用服务的ip地址
hostname: mycat-service
client:
service-url:
defaultZone: http://localhost:1001/eureka/
# 是否注册自身到eureka服务器
register-with-eureka: true
fetch-registry: true
4.剩下的接口和mysql方法一致
package com.demo.mycat.controller;
import com.demo.mycat.dto.Result;
import com.demo.mycat.dto.Tenant;
import com.demo.mycat.mapper.TenantMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/mycat")
@Slf4j
public class MycatController {
@Autowired
private TenantMapper tenantMapper;
@GetMapping
Result getTest(){
List<Tenant> tenants = tenantMapper.queryAllTenant();
if(null != tenants && !tenants.isEmpty()){
return Result.ok(tenants);
}
return Result.ok("未查询到数据!");
}
}
package com.demo.mycat.mapper;
import com.demo.mycat.dto.Tenant;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface TenantMapper {
List<Tenant> queryAllTenant();
}
<?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.demo.mycat.mapper.TenantMapper">
<select id="queryAllTenant" resultType="com.demo.mycat.dto.Tenant">
SELECT id,tenant_id,tenant_name,phone from tenant
</select>
</mapper>
5.测试结果
到此,整合mycat基本就完成了!