diff --git a/pom.xml b/pom.xml
index b86f187..be36c42 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,10 +28,16 @@
spring-boot-starter-aop
-
- org.mybatis.spring.boot
- mybatis-spring-boot-starter
- 2.1.1
+
+
+
+
+
+
+
+ com.baomidou
+ mybatis-plus-boot-starter
+ 3.2.0
diff --git a/src/main/java/com/yupi/project/mapper/OrderMapper.java b/src/main/java/com/yupi/project/mapper/OrderMapper.java
index 99cb78d..fdb022e 100644
--- a/src/main/java/com/yupi/project/mapper/OrderMapper.java
+++ b/src/main/java/com/yupi/project/mapper/OrderMapper.java
@@ -1,12 +1,13 @@
package com.yupi.project.mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yupi.project.model.entity.OrderDO;
import org.apache.ibatis.annotations.Mapper;
@Mapper
-public interface OrderMapper {
+public interface OrderMapper extends BaseMapper {
- void insert(OrderDO order);
+// void insert(OrderDO order);
}
\ No newline at end of file
diff --git a/src/main/java/com/yupi/project/model/entity/OrderDO.java b/src/main/java/com/yupi/project/model/entity/OrderDO.java
index f2e076b..35a3c52 100644
--- a/src/main/java/com/yupi/project/model/entity/OrderDO.java
+++ b/src/main/java/com/yupi/project/model/entity/OrderDO.java
@@ -1,6 +1,8 @@
package com.yupi.project.model.entity;
+import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
+import lombok.experimental.Accessors;
import java.io.Serializable;
@@ -9,6 +11,8 @@ import java.io.Serializable;
* @author Administrator
*/
@Data
+@TableName(value = "orders")
+@Accessors(chain = true)
public class OrderDO implements Serializable {
/**
diff --git a/src/main/java/com/yupi/project/service/OrderService.java b/src/main/java/com/yupi/project/service/OrderService.java
new file mode 100644
index 0000000..2d520b9
--- /dev/null
+++ b/src/main/java/com/yupi/project/service/OrderService.java
@@ -0,0 +1,36 @@
+package com.yupi.project.service;
+
+import com.yupi.project.mapper.OrderMapper;
+import com.yupi.project.model.entity.OrderDO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * @author Administrator
+ */
+@Service
+public class OrderService {
+
+ @Autowired
+ private OrderMapper orderMapper;
+
+ @Transactional
+ public void add(OrderDO order) {
+ // <1.1> 这里先假模假样的读取一下。读取从库
+ OrderDO exists = orderMapper.selectById(1);
+ System.out.println(exists);
+
+ // <1.2> 插入订单
+ orderMapper.insert(order);
+
+ // <1.3> 这里先假模假样的读取一下。读取主库
+ exists = orderMapper.selectById(1);
+ System.out.println(exists);
+ }
+
+ public OrderDO findById(Integer id) {
+ return orderMapper.selectById(id);
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 9b311f2..ff7cf0c 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -35,6 +35,11 @@ spring:
inline:
sharding-column: user_id
algorithm-expression: orders_${user_id % 8}
+ # 读写分离配置,对应 YamlMasterSlaveRuleConfiguration 配置类
+ masterslave:
+ name: ms # 名字,任意,需要保证唯一
+ master-data-source-name: db0 # 主库数据源
+ slave-data-source-names: db1 # 从库数据源
# 拓展属性配置
props:
sql:
@@ -43,6 +48,14 @@ server:
port: 7529
servlet:
context-path: /api
-mybatis:
- mapper-locations: classpath*:src/main/resources/mapper/*.xml
- type-aliases-package: com.yupi.project.model.entity
\ No newline at end of file
+# mybatis-plus 配置内容
+mybatis-plus:
+ configuration:
+ map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。
+ global-config:
+ db-config:
+ id-type: none # 虽然 MyBatis Plus 也提供 ID 生成策略,但是还是使用 Sharding-JDBC 的
+ logic-delete-value: 1 # 逻辑已删除值(默认为 1)
+ logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
+ mapper-locations: classpath*:mapper/*.xml
+ type-aliases-package: com.yupi.project.model.entity
diff --git a/src/test/java/com/yupi/project/service/OrderMapperTest.java b/src/test/java/com/yupi/project/service/OrderMapperTest.java
index 9ec5c97..32f04d6 100644
--- a/src/test/java/com/yupi/project/service/OrderMapperTest.java
+++ b/src/test/java/com/yupi/project/service/OrderMapperTest.java
@@ -2,6 +2,7 @@ package com.yupi.project.service;
import com.yupi.project.mapper.OrderMapper;
import com.yupi.project.model.entity.OrderDO;
+import org.apache.shardingsphere.api.hint.HintManager;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
@@ -15,14 +16,39 @@ public class OrderMapperTest {
@Autowired
private OrderMapper orderMapper;
+ @Autowired
+ private OrderService orderService;
+
+ @Test
+ public void testSelectById() { // 测试从库的负载均衡
+ for (int i = 0; i < 2; i++) {
+ OrderDO order = orderMapper.selectById(1);
+ System.out.println(order);
+ }
+ }
+
+ @Test
+ public void testSelectById02() { // 测试强制访问主库
+ try (HintManager hintManager = HintManager.getInstance()) {
+ // 设置强制访问主库
+ hintManager.setMasterRouteOnly();
+ // 执行查询
+ OrderDO order = orderMapper.selectById(1);
+ System.out.println(order);
+ }
+ }
@Test
public void testInsert() {
OrderDO order = new OrderDO();
- order.setId(2L);
- order.setUserId(4);
+ order.setUserId(3);
orderMapper.insert(order);
}
+ @Test
+ public void testGroup() {
+ orderService.add(new OrderDO().setUserId(10));
+ }
+
}
\ No newline at end of file