@@ -1,5 +1,5 @@ | |||||
# spring-boot-demo 项目 todo-list | # spring-boot-demo 项目 todo-list | ||||
## 模块计划(已完成:40 / 51) | |||||
## 模块计划(已完成:41 / 51) | |||||
- [x] ~~spring-boot-demo-helloworld(Helloworld 示例)~~ | - [x] ~~spring-boot-demo-helloworld(Helloworld 示例)~~ | ||||
- [x] ~~spring-boot-demo-properties(读取配置文件信息)~~ | - [x] ~~spring-boot-demo-properties(读取配置文件信息)~~ | ||||
@@ -49,7 +49,7 @@ | |||||
- [x] ~~spring-boot-demo-mongodb(集成 MongoDb)~~ | - [x] ~~spring-boot-demo-mongodb(集成 MongoDb)~~ | ||||
- [x] ~~spring-boot-demo-neo4j(集成 neo4j 图数据库)~~ | - [x] ~~spring-boot-demo-neo4j(集成 neo4j 图数据库)~~ | ||||
- [x] ~~spring-boot-demo-docker(打包成 docker 镜像)~~ | - [x] ~~spring-boot-demo-docker(打包成 docker 镜像)~~ | ||||
- [ ] spring-boot-demo-multi-datasource-jpa(集成JPA多数据源) | |||||
- [x] ~~spring-boot-demo-multi-datasource-jpa(集成JPA多数据源)~~ | |||||
- [ ] spring-boot-demo-multi-datasource-mybatis(集成mybatis多数据源) | - [ ] spring-boot-demo-multi-datasource-mybatis(集成mybatis多数据源) | ||||
- [ ] spring-boot-demo-sharding-jdbc(集成 sharding-jdbc 实现分库分表) | - [ ] spring-boot-demo-sharding-jdbc(集成 sharding-jdbc 实现分库分表) | ||||
@@ -33,6 +33,39 @@ | |||||
<artifactId>spring-boot-starter-test</artifactId> | <artifactId>spring-boot-starter-test</artifactId> | ||||
<scope>test</scope> | <scope>test</scope> | ||||
</dependency> | </dependency> | ||||
<dependency> | |||||
<groupId>mysql</groupId> | |||||
<artifactId>mysql-connector-java</artifactId> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>com.baomidou</groupId> | |||||
<artifactId>dynamic-datasource-spring-boot-starter</artifactId> | |||||
<version>2.5.0</version> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>com.baomidou</groupId> | |||||
<artifactId>mybatis-plus-boot-starter</artifactId> | |||||
<version>3.0.7.1</version> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>org.projectlombok</groupId> | |||||
<artifactId>lombok</artifactId> | |||||
<optional>true</optional> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>cn.hutool</groupId> | |||||
<artifactId>hutool-all</artifactId> | |||||
</dependency> | |||||
<dependency> | |||||
<groupId>com.google.guava</groupId> | |||||
<artifactId>guava</artifactId> | |||||
</dependency> | |||||
</dependencies> | </dependencies> | ||||
<build> | <build> | ||||
@@ -0,0 +1,10 @@ | |||||
DROP TABLE IF EXISTS `multi_user`; | |||||
CREATE TABLE `multi_user`( | |||||
`id` bigint(64) NOT NULL, | |||||
`name` varchar(50) DEFAULT NULL, | |||||
`age` int(30) DEFAULT NULL, | |||||
PRIMARY KEY (`id`) USING BTREE | |||||
) ENGINE = InnoDB | |||||
AUTO_INCREMENT = 1 | |||||
CHARACTER SET = utf8 | |||||
COLLATE = utf8_general_ci; |
@@ -1,9 +1,24 @@ | |||||
package com.xkcoding.multi.datasource.mybatis; | package com.xkcoding.multi.datasource.mybatis; | ||||
import org.mybatis.spring.annotation.MapperScan; | |||||
import org.springframework.boot.SpringApplication; | import org.springframework.boot.SpringApplication; | ||||
import org.springframework.boot.autoconfigure.SpringBootApplication; | import org.springframework.boot.autoconfigure.SpringBootApplication; | ||||
/** | |||||
* <p> | |||||
* 启动器 | |||||
* </p> | |||||
* | |||||
* @package: com.xkcoding.multi.datasource.mybatis | |||||
* @description: 启动器 | |||||
* @author: yangkai.shen | |||||
* @date: Created in 2019-01-21 14:19 | |||||
* @copyright: Copyright (c) 2019 | |||||
* @version: V1.0 | |||||
* @modified: yangkai.shen | |||||
*/ | |||||
@SpringBootApplication | @SpringBootApplication | ||||
@MapperScan(basePackages = "com.xkcoding.multi.datasource.mybatis.mapper") | |||||
public class SpringBootDemoMultiDatasourceMybatisApplication { | public class SpringBootDemoMultiDatasourceMybatisApplication { | ||||
public static void main(String[] args) { | public static void main(String[] args) { | ||||
@@ -0,0 +1,20 @@ | |||||
package com.xkcoding.multi.datasource.mybatis.mapper; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
import com.xkcoding.multi.datasource.mybatis.model.User; | |||||
/** | |||||
* <p> | |||||
* 数据访问层 | |||||
* </p> | |||||
* | |||||
* @package: com.xkcoding.multi.datasource.mybatis.mapper | |||||
* @description: 数据访问层 | |||||
* @author: yangkai.shen | |||||
* @date: Created in 2019-01-21 14:28 | |||||
* @copyright: Copyright (c) 2019 | |||||
* @version: V1.0 | |||||
* @modified: yangkai.shen | |||||
*/ | |||||
public interface UserMapper extends BaseMapper<User> { | |||||
} |
@@ -0,0 +1,49 @@ | |||||
package com.xkcoding.multi.datasource.mybatis.model; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.annotation.TableName; | |||||
import lombok.AllArgsConstructor; | |||||
import lombok.Builder; | |||||
import lombok.Data; | |||||
import lombok.NoArgsConstructor; | |||||
import java.io.Serializable; | |||||
/** | |||||
* <p> | |||||
* User实体类 | |||||
* </p> | |||||
* | |||||
* @package: com.xkcoding.multi.datasource.mybatis.model | |||||
* @description: User实体类 | |||||
* @author: yangkai.shen | |||||
* @date: Created in 2019-01-21 14:19 | |||||
* @copyright: Copyright (c) 2019 | |||||
* @version: V1.0 | |||||
* @modified: yangkai.shen | |||||
*/ | |||||
@Data | |||||
@TableName("multi_user") | |||||
@NoArgsConstructor | |||||
@AllArgsConstructor | |||||
@Builder | |||||
public class User implements Serializable { | |||||
private static final long serialVersionUID = -1923859222295750467L; | |||||
/** | |||||
* 主键 | |||||
*/ | |||||
@TableId(type = IdType.ID_WORKER) | |||||
private Long id; | |||||
/** | |||||
* 姓名 | |||||
*/ | |||||
private String name; | |||||
/** | |||||
* 年龄 | |||||
*/ | |||||
private Integer age; | |||||
} |
@@ -0,0 +1,27 @@ | |||||
package com.xkcoding.multi.datasource.mybatis.service; | |||||
import com.baomidou.mybatisplus.extension.service.IService; | |||||
import com.xkcoding.multi.datasource.mybatis.model.User; | |||||
/** | |||||
* <p> | |||||
* 数据服务层 | |||||
* </p> | |||||
* | |||||
* @package: com.xkcoding.multi.datasource.mybatis.service | |||||
* @description: 数据服务层 | |||||
* @author: yangkai.shen | |||||
* @date: Created in 2019-01-21 14:31 | |||||
* @copyright: Copyright (c) 2019 | |||||
* @version: V1.0 | |||||
* @modified: yangkai.shen | |||||
*/ | |||||
public interface UserService extends IService<User> { | |||||
/** | |||||
* 添加 User | |||||
* | |||||
* @param user 用户 | |||||
*/ | |||||
void addUser(User user); | |||||
} |
@@ -0,0 +1,39 @@ | |||||
package com.xkcoding.multi.datasource.mybatis.service.impl; | |||||
import com.baomidou.dynamic.datasource.annotation.DS; | |||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||||
import com.xkcoding.multi.datasource.mybatis.mapper.UserMapper; | |||||
import com.xkcoding.multi.datasource.mybatis.model.User; | |||||
import com.xkcoding.multi.datasource.mybatis.service.UserService; | |||||
import org.springframework.stereotype.Service; | |||||
import java.util.List; | |||||
/** | |||||
* <p> | |||||
* TODO | |||||
* </p> | |||||
* | |||||
* @package: com.xkcoding.multi.datasource.mybatis.service.impl | |||||
* @description: TODO | |||||
* @author: yangkai.shen | |||||
* @date: Created in 2019-01-21 14:37 | |||||
* @copyright: Copyright (c) 2019 | |||||
* @version: V1.0 | |||||
* @modified: yangkai.shen | |||||
*/ | |||||
@Service | |||||
@DS("slave") | |||||
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { | |||||
/** | |||||
* 类上 {@code @DS("slave")} 代表默认从库,在方法上写 {@code @DS("master")} 代表默认主库 | |||||
* | |||||
* @param user 用户 | |||||
*/ | |||||
@DS("master") | |||||
@Override | |||||
public void addUser(User user) { | |||||
baseMapper.insert(user); | |||||
} | |||||
} |
@@ -0,0 +1,18 @@ | |||||
spring: | |||||
datasource: | |||||
dynamic: | |||||
datasource: | |||||
master: | |||||
username: root | |||||
password: root | |||||
url: jdbc:mysql://127.0.0.1:3306/spring-boot-demo?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8 | |||||
driver-class-name: com.mysql.cj.jdbc.Driver | |||||
slave: | |||||
username: root | |||||
password: root | |||||
url: jdbc:mysql://127.0.0.1:3306/spring-boot-demo-2?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&serverTimezone=GMT%2B8 | |||||
driver-class-name: com.mysql.cj.jdbc.Driver | |||||
mp-enabled: true | |||||
logging: | |||||
level: | |||||
com.xkcoding.multi.datasource.mybatis: debug |
@@ -0,0 +1,52 @@ | |||||
package com.xkcoding.multi.datasource.mybatis.service.impl; | |||||
import cn.hutool.json.JSONUtil; | |||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||||
import com.xkcoding.multi.datasource.mybatis.SpringBootDemoMultiDatasourceMybatisApplicationTests; | |||||
import com.xkcoding.multi.datasource.mybatis.model.User; | |||||
import com.xkcoding.multi.datasource.mybatis.service.UserService; | |||||
import lombok.extern.slf4j.Slf4j; | |||||
import org.junit.Test; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import java.util.List; | |||||
/** | |||||
* <p> | |||||
* 测试主从数据源 | |||||
* </p> | |||||
* | |||||
* @package: com.xkcoding.multi.datasource.mybatis.service.impl | |||||
* @description: 测试主从数据源 | |||||
* @author: yangkai.shen | |||||
* @date: Created in 2019-01-21 14:45 | |||||
* @copyright: Copyright (c) 2019 | |||||
* @version: V1.0 | |||||
* @modified: yangkai.shen | |||||
*/ | |||||
@Slf4j | |||||
public class UserServiceImplTest extends SpringBootDemoMultiDatasourceMybatisApplicationTests { | |||||
@Autowired | |||||
private UserService userService; | |||||
/** | |||||
* 主从库添加 | |||||
*/ | |||||
@Test | |||||
public void addUser() { | |||||
User userMaster = User.builder().name("主库添加").age(20).build(); | |||||
userService.addUser(userMaster); | |||||
User userSlave = User.builder().name("从库添加").age(20).build(); | |||||
userService.save(userSlave); | |||||
} | |||||
/** | |||||
* 从库查询 | |||||
*/ | |||||
@Test | |||||
public void testListUser() { | |||||
List<User> list = userService.list(new QueryWrapper<>()); | |||||
log.info("【list】= {}", JSONUtil.toJsonStr(list)); | |||||
} | |||||
} |