1、分表node
1.數據表準備mysql
CREATE TABLE `t_address` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `code` varchar(64) DEFAULT NULL COMMENT '編碼', `name` varchar(64) DEFAULT NULL COMMENT '名稱', `pid` varchar(64) NOT NULL DEFAULT '0' COMMENT '父id', `type` int(11) DEFAULT NULL COMMENT '1國家2省3市4縣區', `lit` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8; CREATE TABLE `t_user0` ( `id` bigint(20) NOT NULL, `name` varchar(64) DEFAULT NULL COMMENT '名稱', `city_id` int(12) DEFAULT NULL COMMENT '城市', `sex` tinyint(1) DEFAULT NULL COMMENT '性別', `phone` varchar(32) DEFAULT NULL COMMENT '電話', `email` varchar(32) DEFAULT NULL COMMENT '郵箱', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '建立時間', `password` varchar(32) DEFAULT NULL COMMENT '密碼', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `t_user1` ( `id` bigint(20) NOT NULL, `name` varchar(64) DEFAULT NULL COMMENT '名稱', `city_id` int(12) DEFAULT NULL COMMENT '城市', `sex` tinyint(1) DEFAULT NULL COMMENT '性別', `phone` varchar(32) DEFAULT NULL COMMENT '電話', `email` varchar(32) DEFAULT NULL COMMENT '郵箱', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '建立時間', `password` varchar(32) DEFAULT NULL COMMENT '密碼', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.引入座標spring
<dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>3.0.0</version> </dependency>
3.yml文件配置sql
sharding: jdbc: datasource: names: ds0 #指定數據源 名稱能夠自定義,注意:名稱要跟後面的配置一致 ds0: #配置數據源的鏈接信息 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test username: root password: 123456 config: sharding: props: sql.show: false #是否輸出sql tables: t_user: #t_user表 key-generator-column-name: id #主鍵 actual-data-nodes: ds0.t_user${0..1} #數據節點,均勻分佈 table-strategy: #分表策略 inline: #行表達式 sharding-column: sex #按照指定列進行分表---分表策略使用sex字段去摸 algorithm-expression: t_user${sex % 2} #按模運算分配
4.開始測試數據庫
@RestController public class UserController { @Autowired private UserMapper userMapper; @RequestMapping("/user/save") @ResponseBody public String save() { for (int i = 0; i <10 ; i++) { User user=new User(); user.setName("test"+i); user.setCityId(1%2==0?1:2); user.setCreateTime(new Date()); user.setSex(i%2==0?1:2); user.setPhone("11111111"+i); user.setEmail("xxxxx"); user.setCreateTime(new Date()); user.setPassword("eeeeeeeeeeee"); userMapper.save(user); } return "success"; } @RequestMapping("/user/get/{id}") @ResponseBody public User get(@PathVariable Long id) { User user = userMapper.get(id); System.out.println(user.getId()); return user; } }
@Mapper public interface UserMapper { /** * 保存 */ void save(User user); /** * 查詢 * @param id * @return */ User get(Long id); }
<mapper namespace="com.mrchen.springboottest.mapper.UserMapper"> <insert id="save" parameterType="com.mrchen.springboottest.entity.User"> INSERT INTO t_user(name,phone,email,city_id,sex,password) VALUES ( #{name},#{phone},#{email},#{cityId},#{sex},#{password} ) </insert> <select id="get" parameterType="long" resultType="com.mrchen.springboottest.entity.User"> select * from t_user where id = #{id} </select> </mapper>
5.啓動項目,在瀏覽器輸入相應地址http://localhost:8080/user/save 最後查看數據庫相應表,發現數據分別插入兩個表。express