我的项目是包含多个子modules,这就是其中一个子module,这是完整的需要的maven依赖.
(1)pom文件:
<?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>cqx-test</artifactId>
<groupId>cqx-test</groupId>
<version>0.0.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>SpringBootShareDB</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>2.0.2.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-jdbc</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.4</version>
</dependency>
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.8</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
</dependencies>
</project>
(2)application.yaml 资源配置文件
server:
port : 18999
spring:
shardingsphere:
props:
sql.show: false
datasource:
# 可以配置多个库,此次是单库
names: local
local:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/sharedb?characterEncoding=UTF-8&useUnicode=true&useSSL=false&serverTimezone=GMT
username: root
password: root@123
sharding:
tables:
share_user:
actualDataNodes: local.share_user_$->{0..2}
tableStrategy:
inline:
# 指定分片键
shardingColumn: user_id
# 分片算法
algorithmExpression: share_user_$->{user_id % 3}
(3)代码结构
(4) 具体代码
1、ShareDBApplication.java
package com.cqx.spring.sharedb;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@SpringBootApplication
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
@MapperScan("com.cqx.spring.sharedb.mybatis.mapper")
public class ShareDBApplication {
public static void main(String[] args) {
SpringApplication.run(ShareDBApplication.class, args);
}
}
2、MysqlGenerator.java (用来自动生成mysql-plus代码)
package com.cqx.spring.sharedb;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.apache.commons.lang3.StringUtils;
import java.util.Scanner;
/**
* <p>
* mysql 代码生成器演示例子
* </p>
*
* @author jobob
* @since 2018-09-12
*/
public class MysqlGenerator {
/**
* <p>
* 读取控制台内容
* </p>
*/
public static String scanner(String tip) {
Scanner scanner = new Scanner(System.in);
StringBuilder help = new StringBuilder();
help.append("请输入").append(tip).append(":");
System.out.println(help.toString());
if (scanner.hasNext()) {
String ipt = scanner.next();
if (StringUtils.isNotBlank(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
/**
* RUN THIS
*/
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/SpringBootShareDB/src/main/java");//这个路径根据自己的路径来
gc.setAuthor("mybatisPlusGenerator");
gc.setOpen(false);
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://127.0.0.1:3306/sharedb?characterEncoding=UTF-8&useUnicode=true&useSSL=false&serverTimezone=GMT");
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("root@123");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.cqx.spring.sharedb.mybatis");
mpg.setPackageInfo(pc);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setController("");
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setRestControllerStyle(true);
strategy.setEntityLombokModel(true);
strategy.setNaming(NamingStrategy.underline_to_camel);//表字段下划线到代码字段驼峰
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//表字段下划线到代码字段驼峰
strategy.setInclude(scanner("表名"));
mpg.setStrategy(strategy);
mpg.execute();
}
}
3、TestSpringShareDBController.java
package com.cqx.spring.sharedb.ctrl;
import com.cqx.spring.sharedb.mybatis.entity.ShareUser;
import com.cqx.spring.sharedb.mybatis.service.IShareUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author chaiqx on 2021/3/30
*/
@RestController
public class TestSpringShareDBController {
@Autowired
private IShareUserService shareUserService;
@GetMapping(value = "share_user")
public int test_share_user() {
ShareUser shareUser1 = new ShareUser();
shareUser1.setUserId(5);
shareUser1.setName("5");
ShareUser shareUser2 = new ShareUser();
shareUser2.setUserId(6);
shareUser2.setName("6");
ShareUser shareUser3 = new ShareUser();
shareUser3.setUserId(7);
shareUser3.setName("7");
ShareUser shareUser4 = new ShareUser();
shareUser4.setUserId(8);
shareUser4.setName("8");
shareUserService.save(shareUser1);
shareUserService.save(shareUser2);
shareUserService.save(shareUser3);
shareUserService.save(shareUser4);
return 1;
}
@GetMapping(value = "get_user")
public int test_get_user() {
System.out.println(shareUserService.list().size());
return 1;
}
}
4、ShareUser 、 ShareUserMapper、 IShareUserService、ShareUserServiceImpl 都是自动生成的文件,就不列出来了。
(5)数据库表(只包含id自增,user_id(int11),name(varchar30))