From eb639e5dbd7b1873e0a53f9bfbd8b168dc035644 Mon Sep 17 00:00:00 2001 From: fanxb Date: Tue, 26 Mar 2019 14:35:52 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Feat:=20sharding-jdbc=E5=88=86?= =?UTF-8?q?=E5=BA=93=E5=88=86=E8=A1=A8demo=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spring-boot/sjdemo/logs/xa_tx.lck | 0 spring-boot/sjdemo/pom.xml | 23 +++++++++++- .../controller/DictionaryController.java | 31 ++++++++++++++++ .../sjdemo/controller/OrderController.java | 32 +++++++++++++++++ .../controller/OrderItemController.java | 33 +++++++++++++++++ .../sjdemo/controller/UserController.java | 35 +++++++++++++++++++ .../com/fanxb/sjdemo/dao/BaseOperate.java | 12 ------- .../com/fanxb/sjdemo/dao/DictionaryDao.java | 25 +++++++++++++ .../java/com/fanxb/sjdemo/dao/OrderDao.java | 32 +++++++++++++++++ .../com/fanxb/sjdemo/dao/OrderItemDao.java | 34 ++++++++++++++++++ .../java/com/fanxb/sjdemo/dao/UserDao.java | 22 +++++++++--- .../com/fanxb/sjdemo/entity/Dictionary.java | 17 +++++++++ .../java/com/fanxb/sjdemo/entity/Order.java | 2 +- .../com/fanxb/sjdemo/entity/OrderItem.java | 1 + .../java/com/fanxb/sjdemo/entity/User.java | 30 +++++----------- .../sjdemo/service/DictionaryService.java | 25 +++++++++++++ .../sjdemo/service/OrderItemService.java | 27 ++++++++++++++ .../fanxb/sjdemo/service/OrderService.java | 7 ++-- .../com/fanxb/sjdemo/service/UserService.java | 33 +++++++++++++---- .../main/resources/application-sharding.yml | 34 +++++++++++------- .../resources/mapper/DictionaryMapper.xml | 9 +++++ .../main/resources/mapper/OrderItemMapper.xml | 13 +++++++ .../src/main/resources/mapper/OrderMapper.xml | 12 +++++-- .../src/main/resources/mapper/UserMapper.xml | 16 ++++++--- .../fanxb/sjdemo/SjdemoApplicationTests.java | 16 +++++++-- .../sjdemo/serviceTest/OrderServiceTest.java | 2 +- .../sjdemo/serviceTest/UserServiceTest.java | 1 - 27 files changed, 450 insertions(+), 74 deletions(-) create mode 100644 spring-boot/sjdemo/logs/xa_tx.lck create mode 100644 spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/DictionaryController.java create mode 100644 spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/OrderController.java create mode 100644 spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/OrderItemController.java create mode 100644 spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/UserController.java delete mode 100644 spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/BaseOperate.java create mode 100644 spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/DictionaryDao.java create mode 100644 spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/OrderItemDao.java create mode 100644 spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/Dictionary.java create mode 100644 spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/DictionaryService.java create mode 100644 spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/OrderItemService.java create mode 100644 spring-boot/sjdemo/src/main/resources/mapper/DictionaryMapper.xml create mode 100644 spring-boot/sjdemo/src/main/resources/mapper/OrderItemMapper.xml diff --git a/spring-boot/sjdemo/logs/xa_tx.lck b/spring-boot/sjdemo/logs/xa_tx.lck new file mode 100644 index 0000000..e69de29 diff --git a/spring-boot/sjdemo/pom.xml b/spring-boot/sjdemo/pom.xml index e28662e..8b0edd9 100644 --- a/spring-boot/sjdemo/pom.xml +++ b/spring-boot/sjdemo/pom.xml @@ -29,10 +29,11 @@ 2.0.0 + mysql mysql-connector-java - runtime + 5.1.24 io.shardingsphere @@ -50,6 +51,26 @@ lombok + + + com.alibaba + fastjson + 1.2.56 + + + + + io.shardingsphere + sharding-transaction-2pc-xa + 3.1.0 + + + + io.shardingsphere + sharding-transaction-spring-boot-starter + 3.1.0 + + org.springframework.boot spring-boot-starter-test diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/DictionaryController.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/DictionaryController.java new file mode 100644 index 0000000..5d8f81d --- /dev/null +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/DictionaryController.java @@ -0,0 +1,31 @@ +package com.fanxb.sjdemo.controller; + +import com.alibaba.fastjson.JSONObject; +import com.fanxb.sjdemo.entity.Dictionary; +import com.fanxb.sjdemo.service.DictionaryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2019/3/26 10:17 + */ +@RestController +@RequestMapping("dictionary") +public class DictionaryController { + + @Autowired + private DictionaryService dictionaryService; + + @PutMapping("") + public long addOne(@RequestBody JSONObject object) { + Dictionary dictionary = object.toJavaObject(Dictionary.class); + return this.dictionaryService.addOne(dictionary); + } +} diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/OrderController.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/OrderController.java new file mode 100644 index 0000000..63d0031 --- /dev/null +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/OrderController.java @@ -0,0 +1,32 @@ +package com.fanxb.sjdemo.controller; + +import com.alibaba.fastjson.JSONObject; +import com.fanxb.sjdemo.entity.Order; +import com.fanxb.sjdemo.service.OrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2019/3/25 14:25 + */ +@RestController +@RequestMapping("/order") +public class OrderController { + + @Autowired + private OrderService orderService; + + @PutMapping("") + public long addOne(@RequestBody JSONObject obj){ + Order order = obj.toJavaObject(Order.class); + return this.orderService.insertOne(order); + } + +} diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/OrderItemController.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/OrderItemController.java new file mode 100644 index 0000000..722f03e --- /dev/null +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/OrderItemController.java @@ -0,0 +1,33 @@ +package com.fanxb.sjdemo.controller; + +import com.alibaba.fastjson.JSONObject; +import com.fanxb.sjdemo.entity.OrderItem; +import com.fanxb.sjdemo.service.OrderItemService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2019/3/25 14:25 + */ +@RestController +@RequestMapping("/orderItem") +public class OrderItemController { + + @Autowired + private OrderItemService orderItemService; + + @PutMapping("") + public long addOne(@RequestBody JSONObject obj) { + OrderItem item = obj.toJavaObject(OrderItem.class); + return this.orderItemService.addOne(item); + } + + +} diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/UserController.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/UserController.java new file mode 100644 index 0000000..10b9f77 --- /dev/null +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/controller/UserController.java @@ -0,0 +1,35 @@ +package com.fanxb.sjdemo.controller; + +import com.alibaba.fastjson.JSONObject; +import com.fanxb.sjdemo.entity.User; +import com.fanxb.sjdemo.service.UserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2019/3/25 14:25 + */ +@RestController +@RequestMapping("/user") +public class UserController { + + @Autowired + private UserService userService; + + + @PutMapping("") + public long addUser(@RequestBody JSONObject obj){ + User user = obj.toJavaObject(User.class); + return userService.addOne(user); + } + + @GetMapping("test") + public void testTransactional(){ + this.userService.testTransactional(); + } + +} diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/BaseOperate.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/BaseOperate.java deleted file mode 100644 index c7bda50..0000000 --- a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/BaseOperate.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.fanxb.sjdemo.dao; - -/** - * 类功能简述: - * 类功能详述: - * - * @author fanxb - * @date 2019/3/22 15:21 - */ -public interface BaseOperate { - long addOne(T t); -} diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/DictionaryDao.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/DictionaryDao.java new file mode 100644 index 0000000..ed84970 --- /dev/null +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/DictionaryDao.java @@ -0,0 +1,25 @@ +package com.fanxb.sjdemo.dao; + +import com.fanxb.sjdemo.entity.Dictionary; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2019/3/22 16:25 + */ +public interface DictionaryDao { + + /** + * Description: + * + * @author fanxb + * @date 2019/3/26 10:16 + * @param dictionary dictionary + * @return long + */ + long addOne(Dictionary dictionary); + + +} diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/OrderDao.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/OrderDao.java index bc773b0..9067c4f 100644 --- a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/OrderDao.java +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/OrderDao.java @@ -1,6 +1,9 @@ package com.fanxb.sjdemo.dao; import com.fanxb.sjdemo.entity.Order; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 类功能简述: @@ -10,6 +13,35 @@ import com.fanxb.sjdemo.entity.Order; * @date 2019/3/22 16:25 */ public interface OrderDao { + /** + * Description: + * + * @param order order + * @return long + * @author fanxb + * @date 2019/3/25 14:23 + */ long addOne(Order order); + /** + * Description: + * + * @param orderId orderId + * @param userId userId + * @return com.fanxb.sjdemo.entity.Order + * @author fanxb + * @date 2019/3/25 14:23 + */ + Order selectOne(@Param("orderId") long orderId, @Param("userId") int userId); + + /** + * Description: + * + * @param id id + * @return java.util.List + * @author fanxb + * @date 2019/3/25 14:24 + */ + List getOrderByUserId(int id); + } diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/OrderItemDao.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/OrderItemDao.java new file mode 100644 index 0000000..2bcdea7 --- /dev/null +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/OrderItemDao.java @@ -0,0 +1,34 @@ +package com.fanxb.sjdemo.dao; + +import com.fanxb.sjdemo.entity.OrderItem; + +import java.util.List; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2019/3/22 16:25 + */ +public interface OrderItemDao { + /** + * Description: + * + * @param order order + * @author fanxb + * @date 2019/3/25 14:12 + */ + void addOne(OrderItem orderItem); + + /** + * Description: + * + * @param id id + * @return java.util.List + * @author fanxb + * @date 2019/3/25 14:12 + */ + List getByOrderId(int id); + +} diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/UserDao.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/UserDao.java index 57c1361..2fa1c8b 100644 --- a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/UserDao.java +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/dao/UserDao.java @@ -1,9 +1,6 @@ package com.fanxb.sjdemo.dao; import com.fanxb.sjdemo.entity.User; -import org.apache.ibatis.annotations.Param; - -import java.util.List; /** * 类功能简述: @@ -13,7 +10,22 @@ import java.util.List; * @date 2019/3/22 15:29 */ public interface UserDao { - long addOne(User user); + /** + * Description: + * + * @author fanxb + * @date 2019/3/25 14:22 + * @param user user + */ + void addOne(User user); - User getOneById(int id); + /** + * Description: + * + * @author fanxb + * @date 2019/3/25 14:22 + * @param id id + * @return com.fanxb.sjdemo.entity.User + */ + User getOneById(long id); } diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/Dictionary.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/Dictionary.java new file mode 100644 index 0000000..2ed68de --- /dev/null +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/Dictionary.java @@ -0,0 +1,17 @@ +package com.fanxb.sjdemo.entity; + +import lombok.Data; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2019/3/25 17:25 + */ +@Data +public class Dictionary { + private Long dictionaryId; + private String name; + private String value; +} diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/Order.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/Order.java index a638266..f9d91ff 100644 --- a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/Order.java +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/Order.java @@ -8,7 +8,7 @@ import java.util.Date; public class Order { private long orderId; - private long uId; + private long userId; private Date createTime; private long totalPrice; diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/OrderItem.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/OrderItem.java index 0132f38..517ebe3 100644 --- a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/OrderItem.java +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/OrderItem.java @@ -6,6 +6,7 @@ import lombok.Data; @Data public class OrderItem { +// private long userId; private long orderItemId; private long orderId; private String name; diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/User.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/User.java index 2048655..da7004d 100644 --- a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/User.java +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/entity/User.java @@ -1,33 +1,21 @@ package com.fanxb.sjdemo.entity; +import lombok.Data; + +@Data public class User { - private long uId; - private String name; - private long age; + private long userId; + private String name; + private int age; - public long getuId() { - return uId; + public User() { } - public void setuId(long uId) { - this.uId = uId; - } - - public String getName() { - return name; - } - - public void setName(String name) { + public User(long userId, String name, int age) { + this.userId = userId; this.name = name; - } - - public long getAge() { - return age; - } - - public void setAge(long age) { this.age = age; } } diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/DictionaryService.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/DictionaryService.java new file mode 100644 index 0000000..b68ab17 --- /dev/null +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/DictionaryService.java @@ -0,0 +1,25 @@ +package com.fanxb.sjdemo.service; + +import com.fanxb.sjdemo.dao.DictionaryDao; +import com.fanxb.sjdemo.entity.Dictionary; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2019/3/26 10:17 + */ +@Service +public class DictionaryService { + + @Autowired + private DictionaryDao dictionaryDao; + + public long addOne(Dictionary dictionary) { + this.dictionaryDao.addOne(dictionary); + return dictionary.getDictionaryId(); + } +} diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/OrderItemService.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/OrderItemService.java new file mode 100644 index 0000000..8f8190d --- /dev/null +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/OrderItemService.java @@ -0,0 +1,27 @@ +package com.fanxb.sjdemo.service; + +import com.fanxb.sjdemo.dao.OrderItemDao; +import com.fanxb.sjdemo.entity.OrderItem; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * 类功能简述: + * 类功能详述: + * + * @author fanxb + * @date 2019/3/25 14:53 + */ +@Service +public class OrderItemService { + @Autowired + private OrderItemDao orderItemDao; + + public long addOne(OrderItem item){ + this.orderItemDao.addOne(item); + return item.getOrderItemId(); + } + + + +} diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/OrderService.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/OrderService.java index 3c4f3f0..545b69f 100644 --- a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/OrderService.java +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/OrderService.java @@ -16,13 +16,12 @@ import org.springframework.stereotype.Service; */ @Service public class OrderService { - private Logger logger = LoggerFactory.getLogger(OrderService.class); @Autowired private OrderDao orderDao; - public void insertOne(Order order) { - long id = orderDao.addOne(order); - logger.info("订单插入id:{}", order.getOrderId()); + public long insertOne(Order order) { + this.orderDao.addOne(order); + return order.getOrderId(); } } diff --git a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/UserService.java b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/UserService.java index 64aff94..4cd22f9 100644 --- a/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/UserService.java +++ b/spring-boot/sjdemo/src/main/java/com/fanxb/sjdemo/service/UserService.java @@ -2,10 +2,16 @@ package com.fanxb.sjdemo.service; import com.fanxb.sjdemo.dao.UserDao; import com.fanxb.sjdemo.entity.User; +import io.shardingsphere.transaction.annotation.ShardingTransactionType; +import io.shardingsphere.transaction.api.TransactionType; +import lombok.extern.slf4j.Slf4j; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.logging.ConsoleHandler; /** * 类功能简述: @@ -15,21 +21,34 @@ import org.springframework.stereotype.Service; * @date 2019/3/22 15:36 */ @Service +@Slf4j public class UserService { Logger logger = LoggerFactory.getLogger(UserService.class); @Autowired private UserDao dao; - public void addOne(String name, int age) { - User user = new User(); - user.setName(name); - user.setAge(age); - long id= dao.addOne(user); - logger.info("插入id:{}", user.getuId()); + public long addOne(User user) { + this.dao.addOne(user); + return user.getUserId(); } - public User getOne(int id){ + public User getOne(long id) { return dao.getOneById(id); } + + /** + * 测试跨库事务 + */ + @ShardingTransactionType(TransactionType.XA) + @Transactional + public void testTransactional() { + User user1 = new User(123, "988", 12); + logger.info("user1已经插入"); + logger.info("user1已经插入"); + this.dao.addOne(user1); + User user2 = new User(124, "988", 12); + this.dao.addOne(user2); + this.dao.addOne(user2); + } } diff --git a/spring-boot/sjdemo/src/main/resources/application-sharding.yml b/spring-boot/sjdemo/src/main/resources/application-sharding.yml index 8d0c0ce..f6d892b 100644 --- a/spring-boot/sjdemo/src/main/resources/application-sharding.yml +++ b/spring-boot/sjdemo/src/main/resources/application-sharding.yml @@ -1,7 +1,7 @@ sharding: jdbc: datasource: - names: ds0,ds1,ds2 + names: ds0,ds1 ds0: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver @@ -14,21 +14,31 @@ sharding: url: jdbc:mysql://10.82.27.177:3306/ds1 username: root password: 123456 - ds2: - type: com.alibaba.druid.pool.DruidDataSource - driver-class-name: com.mysql.jdbc.Driver - url: jdbc:mysql://10.82.27.177:3306/ds2 - username: root - password: 123456 +# ds2: +# type: com.alibaba.druid.pool.DruidDataSource +# driver-class-name: com.mysql.jdbc.Driver +# url: jdbc:mysql://10.82.27.177:3306/ds2 +# username: root +# password: 123456 config: sharding: - # 默认数据源,可以将不分库分表的数据表放在这里 - default-data-source-name: ds2 + # 默认数据源,可以将不分库分表的数据表放在这里(此处的表需与已经分库分表的表完全没有关联,不会产生联表查询操作,因为跨库连表查询是没办法实现的),3.1.0版本dql查询存在bug,不使用默认库 +# default-data-source-name: ds2 + # 默认分库策略 default-database-strategy: inline: - sharding-column: uId - algorithm-expression: ds$->{uId % 2} + sharding-column: userId + algorithm-expression: ds$->{userId % 2} + # 配置表策略 tables: + # 公共表(比如字典表,角色表,权限表等),不分库或者分表,数据将发送到所有库中,方便联表查询 + dictionary: + key-generator-column-name: dictionaryId + actual-data-nodes: ds$->{0..1}.dictionary + # user 前面已经根据uId分库,因此user表不进行分表 + user: + key-generator-column-name: userId + actual-data-nodes: ds$->{0..1}.user order: key-generator-column-name: orderId actual-data-nodes: ds$->{0..1}.order$->{0..1} @@ -42,6 +52,6 @@ sharding: table-strategy: inline: sharding-column: orderId - algorithm-expression: orderItemId$->{orderId%2} + algorithm-expression: order_item$->{orderId%2} props: sql.show: true \ No newline at end of file diff --git a/spring-boot/sjdemo/src/main/resources/mapper/DictionaryMapper.xml b/spring-boot/sjdemo/src/main/resources/mapper/DictionaryMapper.xml new file mode 100644 index 0000000..739eeca --- /dev/null +++ b/spring-boot/sjdemo/src/main/resources/mapper/DictionaryMapper.xml @@ -0,0 +1,9 @@ + + + + + + insert into dictionary(name,value) values(#{name},#{value}) + + + \ No newline at end of file diff --git a/spring-boot/sjdemo/src/main/resources/mapper/OrderItemMapper.xml b/spring-boot/sjdemo/src/main/resources/mapper/OrderItemMapper.xml new file mode 100644 index 0000000..b78247d --- /dev/null +++ b/spring-boot/sjdemo/src/main/resources/mapper/OrderItemMapper.xml @@ -0,0 +1,13 @@ + + + + + + insert into order_item(orderId,name,price) values(#{orderId},#{name},#{price}) + + + + + \ No newline at end of file diff --git a/spring-boot/sjdemo/src/main/resources/mapper/OrderMapper.xml b/spring-boot/sjdemo/src/main/resources/mapper/OrderMapper.xml index 27f814b..6224d4b 100644 --- a/spring-boot/sjdemo/src/main/resources/mapper/OrderMapper.xml +++ b/spring-boot/sjdemo/src/main/resources/mapper/OrderMapper.xml @@ -2,8 +2,16 @@ - - insert into order(uId,createTime,totalPrice) values(#{uId},#{createTime},#{totalPrice}) + + insert into order(userId,createTime,totalPrice) values(#{userId},#{createTime},#{totalPrice}) + + + + \ No newline at end of file diff --git a/spring-boot/sjdemo/src/main/resources/mapper/UserMapper.xml b/spring-boot/sjdemo/src/main/resources/mapper/UserMapper.xml index 35dd78f..d30f744 100644 --- a/spring-boot/sjdemo/src/main/resources/mapper/UserMapper.xml +++ b/spring-boot/sjdemo/src/main/resources/mapper/UserMapper.xml @@ -2,11 +2,19 @@ - - insert into user(name,age) values(#{name},#{age}) + + insert into user(name,age + + ,userId + + ) values(#{name},#{age} + + ,#{userId} + + ) - - select * from user where uId=#{id} diff --git a/spring-boot/sjdemo/src/test/java/com/fanxb/sjdemo/SjdemoApplicationTests.java b/spring-boot/sjdemo/src/test/java/com/fanxb/sjdemo/SjdemoApplicationTests.java index 7f3fa1e..23b1462 100644 --- a/spring-boot/sjdemo/src/test/java/com/fanxb/sjdemo/SjdemoApplicationTests.java +++ b/spring-boot/sjdemo/src/test/java/com/fanxb/sjdemo/SjdemoApplicationTests.java @@ -1,16 +1,24 @@ package com.fanxb.sjdemo; +import com.fanxb.sjdemo.dao.OrderDao; +import com.fanxb.sjdemo.entity.Order; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.internal.matchers.Or; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.Resource; import javax.sql.DataSource; +import java.io.*; import java.sql.Connection; import java.sql.Statement; +import java.util.Arrays; +import java.util.List; +import java.util.logging.ConsoleHandler; @RunWith(SpringRunner.class) @SpringBootTest @@ -21,15 +29,17 @@ public class SjdemoApplicationTests { @Resource private DataSource dataSource; + @Autowired + private OrderDao orderDao; + @Test public void contextLoads() throws Exception { - String sql = "SELECT i.* FROM order o JOIN order_item i ON o.orderId=i.orderId WHERE o.uId=? AND o.orderId=?"; try ( Connection conn = dataSource.getConnection(); Statement statement = conn.createStatement(); ) { - Boolean res = statement.execute("insert into user(name,age) value('2012-12-12 12:12:12',1212)"); - logger.info(res.toString()); + statement.execute("insert into user(name,age) value('2012-12-12 12:12:12',1212)"); + statement.execute("select * from user"); } } } diff --git a/spring-boot/sjdemo/src/test/java/com/fanxb/sjdemo/serviceTest/OrderServiceTest.java b/spring-boot/sjdemo/src/test/java/com/fanxb/sjdemo/serviceTest/OrderServiceTest.java index ec23d75..71c0fff 100644 --- a/spring-boot/sjdemo/src/test/java/com/fanxb/sjdemo/serviceTest/OrderServiceTest.java +++ b/spring-boot/sjdemo/src/test/java/com/fanxb/sjdemo/serviceTest/OrderServiceTest.java @@ -27,7 +27,7 @@ public class OrderServiceTest { @Test public void addOrderTest() { Order order = new Order(); - order.setUId(12); + order.setUserId(12); order.setCreateTime(new Date()); order.setTotalPrice(12); orderService.insertOne(order); diff --git a/spring-boot/sjdemo/src/test/java/com/fanxb/sjdemo/serviceTest/UserServiceTest.java b/spring-boot/sjdemo/src/test/java/com/fanxb/sjdemo/serviceTest/UserServiceTest.java index 2cf4fc9..a0ffd9b 100644 --- a/spring-boot/sjdemo/src/test/java/com/fanxb/sjdemo/serviceTest/UserServiceTest.java +++ b/spring-boot/sjdemo/src/test/java/com/fanxb/sjdemo/serviceTest/UserServiceTest.java @@ -27,7 +27,6 @@ public class UserServiceTest { @Test public void addUserTest(){ - userService.addOne("xiaoming",12); } @Test