springboot集成shardingJDBC

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

相關文章
相關標籤/搜索