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