GraphDb-关系表快捷处理开源框架

342 阅读2分钟

GraphDB

githHub

github.com/wrglive/gra…

简介

为了简化关系表而设计的, 所有的设计都是为了更好的偷懒...
该框架会不断更新, 最近几天抽时间把mybatis干掉了, 还没有进行大量测试, 大家有兴趣可以直接拿来改, 以便于兼容自己公司的框架.

更新

1.0.4 现在彻底抛弃mybatis 使用 原生的jdbc + HikariCP 连接池
1.0.3 现在将graph整合到spring的 yaml配置文件中,

用法

配置,基于springboot- application.yaml文件, 注意目前仅支持这种文件, 后续会考虑动态寻找spring boot的配置

sky:  
    graph:    
        ##表名前缀, 现在会动态创建表名为 like_pet_variety_relation的表    
        prefixTableNames: like_pet_variety,like_pet,user_follow    
    datasource:    
      url: jdbc:mysql://12345:3306/sky-graph?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true    
      username: root    
      password: root\    
      driver-class-name: com.mysql.cj.jdbc.Driver   

注入使用即可

//注入的时候使用prefixTableNames的驼峰+GraphDao
//例如 user_follow 对应 userFollowGraphDao
@Resource(name = "userFollowGraphDao")
private GraphDao userFollow;

//具体api使用, 就跟正常调用方法一样
List<Relation> relations = userFollow.listByLeftIdAndRightIds(fromUserId, 
Lists.newArrayList(toUserId), StateEnum.ONLINE, 0, 1);

目前的API如下

public interface GraphDao {

  boolean insert(RelationDTO relationDTO);

  boolean remove(RelationDTO relationDTO);

  boolean batchInsert(Collection<RelationDTO> relationDTOCollection);

  boolean batchRemove(Collection<RelationDTO> relationDTOCollection);

  List<Relation> listByLeftId(Long leftId, StateEnum state, Integer page, Integer count);

  List<Relation> listByLeftIdAndRightIds(Long leftId, Collection<Long> rightIds, StateEnum state, Integer page,
      Integer count);

}

表结构

CREATE TABLE `like_pet_relation` (
  `left_id` bigint(20) NOT NULL,
  `right_id` bigint(20) NOT NULL,
  `create_time` bigint(13) NOT NULL,
  `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  `state` tinyint(1) NOT NULL,
  `ext_params` varchar(255) DEFAULT NULL,
  UNIQUE KEY `ux_left_right` (`left_id`,`right_id`) USING BTREE,
  KEY `idx_right_id` (`right_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT;

后续更新

  • 现在对mybatis是强依赖, 以后可能考虑引入jdbcTemplate 来替换 mybatis
  • 对table进行扩充, 目前字段只是最原始的字段,考虑加几个字段来给各个业务当冗余字段使用
  • 目前任何环境都会自动创建, 后续考虑只有test环境动态创建表
  • 目前就仅支持 resource/application-xx.yaml 里配置参数, 以后考虑跟boot一样 会按顺序寻找 pro, yaml, yml 配置文件去动态读取配置.

长远计划

1.mybatis被其他框架替代, 例如jdbcTemplate 或者jdbc原生, 亦或者自己搭建一个jdbc 框架。
解决方案: 使用jdbc + HikariCP 来实现, 尽量规避三方库
2.多数据源配置.
3.高并发下, 性能问题.