SmartDb-Java

轻量级 Java ORM 框架
授权协议 Apache
开发语言 Java
所属分类 程序开发、 ORM/持久层框架
软件类型 开源软件
地区 国产
投 递 者 苏选
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

SmartDb 是以SQL为中心,支持多数据源、读写分离,同时又不与原有项目mybatis、hibernate冲突的非常轻量级的Java ORM框架。

特性如下:

  • 支持ORM操作、常见增删改查、批量、分页等功能
  • 支持MySQL、Oracle、Postgresql、SqlServer
  • 支持在mybatis、hibernate等项目上引入SmartDb
  • 支持多数据源
  • 支持分写分离
  • 支持枚举Enum映射
  • 支持Spring和Spring事务
  • 支持SQL链式API
  • 支持代码生成
  • 支持 filter 过滤器
  • 所有类均可扩展
  • 支持Java 6 ( 收费,收费是为了更好的伺候 “客官 ”  )

SmartDb文档

gitee地址: https://gitee.com/lab1024/smartdb

文档地址:https://zhuoluodada.cn/smartdb

SmartDb特点

mybatis现在在国内已经是一家独大,而且也非常好用,笔者也推荐在大型项目中使用mybatis这种框架,但是总有一些场景,mybatis显得有些力不从心,这个时候选择SmartDb是一个不错的选择。

  • 在原有mybatis或hibernate连接其他数据库进行一些数据处理
  • 读写分离场景,有些数据需要操作主库,有些操作从库
  • 多数据源场景,要从mysql读出数据,然后进行转换存储到sqlserver中,等等
  • 在一个方法中进行多个数据源的数据库操作
  • 一个简单并追求开发效率的小型项目,例如 [SmartBlog(卓大的官方博客)](https://zhuoluodada.cn "SmartBlog(一个精心雕琢的博客)")
  • 不想使用sharding-sphere,sharding-jdbc, mycat,cobar等重型读写分离框架
  • 等等其他

基于以上种种,设计了一个支持多数据源、读写分离的轻量级ORM框架:SmartDb, 让使用者有个极致的开发体验。

SmartDb演示

引入

<dependency>
  <groupId>net.1024lab</groupId>
  <artifactId>smartdb</artifactId>
  <version>1.0.0</version>
</dependency>

SmartDb 操作多数据源(在一个方法中操作多个数据库,不用再使用注解切换来切换去,还不容易出错, oh yeah~)

public void multiDatasource(UserEntity userEntity) {
    // mysqlSmartDb 对象为 连接SqlServer的SmartDb
    SmartDb mysqlSmartDb = build1(); 
    // sqlServerSmartDb 对象为 连接SqlServer的SmartDb
    SmartDb sqlServerSmartDb = build2();
    // 将数据插入mysql数据库
    mysqlSmartDb.insert(userEntity);
    // 将数据插入sql server数据库
    sqlServerSmartDb.insert(userEntity);
}

SmartDb ORM操作

UserEntity userEntity = new UserEntity(1, "zhuoda");
// 插入
smartDb.insert(userEntity);
smartDb.insertSelective(userEntity); // 非空字段插入
smartDb.batchInsert(userList);//批量插入
// 更新
smartDb.update(userEntity);  
smartDb.updateSelective(userEntity); // 非空字段更新
// 删除
smartDb.delete(userEntity);//根据主键删除

SmartDb 读写分离操作

//默认操作 都是操作从库
List<UserEntity> userList = smartDb.selectSqlBuilder()
        .select("*")
        .from(UserEntity.class)
        .queryList(UserEntity.class);

//获取写库
SmartDb writeSmartDb = smartDb.getMaster();
//将数据写入主库
writeSmartDb.insert(userEntity);
//进行主库其他操作
writeSmartDb.delete(userEntity);
writeSmartDb.updateSelective(userEntity);

SmartDb 链式Builder操作

SmartDb 链式SelectBuilder操作(支持and、or、in、like、group、having、limit等等)

UserEntity userEntity = smartDb.selectSqlBuilder()
        .select("user.*")
        .select("score.*")
        .from(UserEntity.class)
        .joinLeft("t_score on t_user.id = t_score.user_id")
        .whereAnd("user.id = ?", 1)
        .whereAnd("type = 3")
        .whereAndIn(" status ", Arrays.asList(1, 2, 3))
        .groupby("user.type")
        .havingAnd("user.type = 1")
        .queryFirst(UserEntity.class);

SmartDb 链式InsertBuilder操作

smartDb.insertSqlBuilder()
        .table("t_user")
        .insertColumn("id",1)
        .insertColumn("name","smartdb")
        .insertFunctionColumn("login_time","now()") //sql方法
        .execute();

SmartDb 链式UpdateBuilder操作

smartDb.updateSqlBuilder()
        .table("t_user")
        .updateColumn("name = ?","smart")
        .updateColumn(" login_time = now()")
        .whereAnd("id = 1")
        .execute();

SmartDb 链式DeleteBuilder操作

smartDb.deleteSqlBuilder()
        .table("t_user")
        .whereAnd("id = 1")
        .execute();

SmartDb 链式ReplaceBuilder操作

smartDb.replaceSqlBuilder()
        .table("t_user")
        .replaceColumn("id",1)
        .replaceColumn("name","smartdb")
        .replaceFunctionColumn("login_time","now()")
        .execute();

创建 SmartDb 

SmartDb smartDb = 
	SmartDbBuilder.create()
	//设置 写库 数据源
	.setMasterDataSource(writeDataSource)
	//设置 两个读库 数据源
	.setSlaveDataSource(readDataSource1,readDataSource2)
	// 打印 info 级别sql
	.setShowSql(true)
	//设置数据库类型
	.setSupportDatabaseType(SupportDatabaseType.MYSQL)
	//设置支持spring
	.setSmartDbExtEnum(SmartDbExtEnum.SPRING5)
	//表名与类名转换
	.setTableNameConverter(cls -> "t_" + CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, cls.getSimpleName()))
	//列名字 转换
	.setColumnNameConverter(new CaseFormatColumnNameConverter(CaseFormat.LOWER_CAMEL, CaseFormat.LOWER_UNDERSCORE))
	.build();

 

  • 本篇规范基于阿里巴巴、华为的开发手册,添加了我们团队的开发风格规范,补充了一些细节。感谢前人的经验和付出,让我们可以有机会站在巨人的肩膀上眺望星辰大海。 规范不是为了约束和禁锢大家的创造力,而是为了帮助大家能够在正确的道路上,尽可能的避免踩坑和跑偏。 规范可以让我们无论单枪匹马还是与众人同行的时候都能得心应手。 规范可以让我们在面对日益变态的需求和做代码接盘侠的时候,更优雅从容。 规则并不是完美的

  • 本篇规范基于阿里巴巴、华为的开发手册。感谢前人的经验和付出,让我们可以有机会站在巨人的肩膀上眺望星辰大海。 规范不是为了约束和禁锢大家的创造力,而是为了帮助大家能够在正确的道路上,尽可能的避免踩坑和跑偏。 规范可以让我们无论单枪匹马还是与众人同行的时候都能得心应手。 规范可以让我们在面对日益变态的需求和做代码接盘侠的时候,更优雅从容。 规则并不是完美的,通过约束和禁止在特定情况下的特性,可能会对代

  • 先简单说说ORM的优点: 提高开发效率,减少重复劳动,只和业务实体打交道,由业务实体自动生成sql语句,不用手写sql语句。 简单易用, 可维护性好。 隔离数据源,使得我们更换数据源时不用修改代码。 SmartDB基础库   java和c#中有很多ORM框架,如c#中的entity framework、Linq to Sql、NHibernate等,java中有Hibernate、Mybatis等

  • 《菜鸟程序员成长计划》之团队高效合作【开发规范篇】 1、「 Java开发规范 」10人小团队Java开发规范参考这篇就够了! 2、「 前端开发规范 」10人小团队前端开发规范参考这篇就够了! 3、… 篇幅所限,更多、更体系化的内容请持续关注 《菜鸟程序员成长计划》之团队高效协作 专栏,您的 关注、点赞、收藏 都将是小编持续创作的动力! 一、编程规范 1、好代码的原则 Kent Beck 的简单设计

 相关资料
  • 问题内容: 是否有一个提供发布/订阅模式的Java轻量级框架? 一些理想的功能 支持泛型 向发布者注册多个订阅者 API主要是接口和一些有用的实现 完全不需要内存,持久性和事务保证。 我了解JMS,但这对我来说太过分了。发布/订阅的数据是文件系统扫描的结果,扫描结果被馈送到另一个组件进行处理,然后在将其馈给另一个组件之前进行处理,依此类推。 编辑:所有在同一过程中。bean的PropertyCha

  • 本文向大家介绍轻量级javascript 框架Backbone使用指南,包括了轻量级javascript 框架Backbone使用指南的使用技巧和注意事项,需要的朋友参考一下 Backbone 是一款基于模型-视图-控制器 MVC 模式的轻量级javascript 框架 ,可以用来帮助开发人员创建单页Web应用。 借助Backbone 我们可以使用REST的方式来最小化客户端和服务器间的数据传输,

  • 本文向大家介绍前端轻量级MVC框架CanJS详解,包括了前端轻量级MVC框架CanJS详解的使用技巧和注意事项,需要的朋友参考一下 选择正确的库 创建一个JS APP没有好的工具是很有难度的,jQuery只是操作DOM的库,没有提供任何创建APP的基础,这就是为什么我们要一个类似CanJS的专门的库。 CanJS 是一个轻量级的MVC库,提供你创建一个JS APP所需的工具。 CanJS 是一个轻

  • 问题内容: 题 我正在寻找Java内存对象缓存API。有什么建议吗?您过去使用过什么解决方案? 当前 现在,我只是在使用地图: 要求 我需要扩展缓存以包括以下基本功能: 最大尺寸 生存时间 但是,我不需要更复杂的功能,例如: 来自多个进程的访问(缓存服务器) 持久性(到磁盘) 意见建议 内存中缓存: Guava CacheBuilder-活动开发。请参阅此演示文稿。 LRUMap-通过API配置。

  • SmartDB 是一个面向对象的数据库操作接口,集成了 SQLite 数据库。与微软的ADO对象类似,适合用在 C++/MFC 项目中。实际它就是一个 SQLite 的封装,只是你的程序只需要三行代码就可以打开 SQLite 数据库。 下面是一个示例程序:

  • 问题内容: 在解决了另一个愚蠢的日食问题之后,我想尝试获得尽可能轻巧,最小的Eclipse安装。 为了清楚起见,我使用eclipse做两件事: 编辑Java 调试Java 我通过Emacs / Zsh完成的所有其他工作(编辑JSP / XML / JS,文件管理,SVN签入等)。我还没有发现在Eclipse中进行工作以使这些任务高效甚至可靠的任何方面,因此我不希望与之相关的插件。 在eclipse