# bee **Repository Path**: Niuest/bee ## Basic Information - **Project Name**: bee - **Description**: Bee是开发速度快、简单、自动高效且具有人工智能(AI)特性的Java ORM框架!它的编码复杂度是O(1),不管操作多少张表,都可以不需要写额外的Dao代码。Bee同时支持面向对象和自定义SQL两种方式,简单场景和复杂场景都可以应用。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/automvc/bee - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 135 - **Created**: 2020-09-20 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Bee ========= #### 工欲善其事必先利其器!——《论语·卫灵公》 #### 磨刀不误砍柴工! **Bee** 是一个 Java ORM框架利器, 它的开发速度快, 编码少, 还很简单! **Bee** 是一个具有人工智能(AI)特性,省时/优雅、简易、自动( **AiTea:** Timesaving/Tasteful, Easy, Automatic) 的ORM软件框架(AiTeaSoft)(IT-->AiTea 的思维转变!)。 你还在为不断重复写ORM操作数据库的代码而烦恼吗?每写一个service业务层,就要写一个dao层(即使我们知道dao就是简单的查改增删suid操作)。 让**Bee**帮助你从重复、烦琐的编码工作中解脱出来。 Bee是一种更接近SQL语言思维的ORM框架, 一种开发速度和开发成本都不比php差的Java ORM框架, 而且它的编码复杂度是O(1),即用了Bee,**无论多少个表**,你都可以不用另外再写dao代码。 **Bee** 网址: https://github.com/automvc/bee **Bee在gitee** 的网址: https://gitee.com/automvc/bee ## 环境要求 jdk1.7+ ## Bee主要功能特点介绍: * 1.**接口简单,使用方便**。Suid接口中对应SQL语言的select,update,insert,delete操作提供**4个同名方法**。 * 2.使用了Bee,你可以不用再另外编写dao代码,直接调用Bee的api即可完成对DB的操作。 * 3.**约定优于配置**:Javabean没有注解,也不需要xml映射文件,只是纯的Javabean即可,甚至get,set方法不用也可以。 * 4.**智能化自动过滤**null和空字符串,不用再写判断非空的代码。 * 5.**动态/任意组合**查询条件,不需要提前准备dao接口,有新的查询需求也不用修改或添加接口。 * 6.支持原生SQL排序, **原生语句分页**(不需要将全部数据查出来)。 * 7.支持直接返回**Json**格式查询结果; 链式编程。 * 8.支持**存储过程**,支持原生SQL(**自定义sql**语句),支持**事务**、**for update**,支持**批处理**操作。 * 9.支持**只查询一部分字段**。 * 10.支持面向对象方式复杂查询、**多表查询**(无n+1问题; 支持:一对一,一对多,多对一,多对多)。 * 11.**一级缓存**,概念简单,功能强大;一级缓存也可以**像JVM一样进行细粒度调优**;**智能缓存**,支持更新配置表,**不用重启**。 * 12.表名与实体名、字段名与属性名映射默认提供多种实现,且支持**自定义映射规则扩展**。 * 13.**多种DB**支持轻松扩展。 * 14.**无**第三方插件依赖。 * 15.提供表对应的javabean**自动生成工具**,Javaweb**后端代码**根据**模板自动生成**;能打印非占位符的**可执行sql**,方便调试。 * 16.支持**读写分离**一主多从, 仅**分库**等**多数据源**模式。 * 17.**分布式**环境下生成**连续单调递增**(在一个workerid内),**全局唯一**数字**id**。 * 18.**支持同库分表,动态表名映射**。 ## 最新功能介绍: **V1.8** **增加分布式特性:** **1**.添加**多数据源**支持(**读写分离**一主多从, 仅分库). 增加多数据源无需改动Java代码(对编码透明),只需添加配置信息即可. 添加**多数据源路由**接口. 添加多数据源路由实现算法. 添加多数据源配置. 支持配置信息刷新. **2**.**分布式**环境下生成**全局唯一**数字**递增id**. 分布式环境下生成**连续单调递增**(在一个workerid内),全局唯一数字id. **3**.**Bee分布式唯一id**算法特性:不依赖时钟,workerid可配置,易扩展. 具体算法实现:SerialUniqueId,OneTimeSnowflakeId,PearFlowerId. 提供id生成工厂:GenIdFactory,且可配置id生成器具体实现类. **4**.可为所有表的Long型id字段自动生成全局唯一id主键. **增强功能:** **5**.**同库分表**支持,**动态表名映射**支持. **实体与任意表名映射支持**. Suid add one method: public Suid setDynamicParameter(String para,String value); add 2 annotation:**@Table,@Entity**. **6**.添加**for update**功能,用于锁住某个表的一些记录. public Condition forUpdate() **7**.增加高级更新设置值支持,复杂查询、多表查询支持**只查部分字段**: 在Condition添加5个新方法. **8**.支持SQL输出日志配置,占位参数可显示参数,**可输出直接可执行的sql**: bee.osql.showSQL.showType=true bee.osql.showSQL.showExecutableSql=true **9**.SuidRich添加一个新方法 PreparedSql添加三个新方法 **10**.Oracle DATE字段在Javabean里转成java.sql.Date存入数据库时会丢失时分秒, 转成Timestamp可以解决这个问题。 **11**.GenFiles**根据模板自动生成文件**代码添加支持首字母大写,如: #{entityName?up1}. **修复原有问题:** **12**.bug修复:缓存key生成;批插入后清缓存. 修复缺陷:解析json时多余的逗号错误. 修复null bug,关于方法:PreparedSql's method select(String sql,Object preValues[]). ## [详细完整功能介绍](../../../bee/blob/master/Changed_Log_CN.md) [点击链接可查看 详细完整功能介绍](../../../bee/blob/master/Changed_Log_CN.md) ## ORM Compare [ORM-Compare](../../../orm-compare) 测试环境: Windows. 数据库: MySQL (Version 5.6.24). 测试点: 批量插入;分页查询;事务(update and select).
批量插入(单位: ms)
  5k 1w 2w 5w 10w
Bee 529.00 458.33 550.00 1315.67 4056.67
MyBatis 1193 713 1292.67 1824.33 Exception

 

分页查询(单位: ms)
  20次 50次 100次 200次 500次
Bee 17.33 58.67 52.33 38.33 57.33
MyBatis 314.33 446.00 1546.00 2294.33 6216.67

 

事务(update and select) (单位: ms)
  20次 50次 100次 200次 500次
Bee 1089.00 70.00 84.00 161.33 31509.33
MyBatis 1144 35 79.67 146.00 32155.33
快速开始: ========= ## 1. 引入Bee #### 1.1 maven工程,添加如下依赖 ```xml org.teasoft bee 1.8 org.teasoft honey 1.8 org.teasoft bee-ext 1.8 ``` #### 1.2 也可以直接下载jar文件 ## 2. 创建数据库和表 举例如下: 创建一个数据库,默认名称为bee. 可以用[init-data(user-orders)-mysql.sql](../../../bee-exam/blob/master/src/main/resources/init-data(user-orders)-mysql.sql)脚本创建表和插入初始化数据. ## 3. 更新数据库的配置信息(在bee.properties) 注:如果还没有bee.properties文件,可以自己新建一个. 也可以配置数据源(此处只是一个例子). bee.databaseName=mysql bee.db.driverName = com.mysql.jdbc.Driver bee.db.url =jdbc:mysql://localhost:3306/bee?characterEncoding=UTF-8 bee.db.username = root bee.db.password = ## 4. 运行下面的 java代码 ```java import java.math.BigDecimal; import java.util.List; import org.teasoft.bee.osql.Suid; import org.teasoft.honey.osql.core.BeeFactory; import org.teasoft.honey.osql.example.entity.Orders; /** * @author Kingstar * @since 1.0 */ public class SuidExam { public static void main(String[] args) { Suid suid=BeeFactory.getHoneyFactory().getSuid(); //需要先生成相应的Javabean Orders orders1=new Orders(); orders1.setId(100001L); orders1.setName("Bee(ORM Framework)"); //默认不处理null和空字符串.不用再写一堆的判断;其它有值的字段全部自动作为过滤条件 List list1 =suid.select(orders1); //select for (int i = 0; i < list1.size(); i++) { System.out.println(list1.get(i).toString()); } orders1.setName("Bee--ORM Framework"); //默认只更新需要更新的字段. 过滤条件默认只用id字段,其它需求可用SuidRich中的方法. int updateNum=suid.update(orders1); //update System.out.println("update record:"+updateNum); Orders orders2=new Orders(); orders2.setUserid("bee"); orders2.setName("Bee(ORM Framework)"); orders2.setTotal(new BigDecimal(91.99)); orders2.setRemark(""); //empty String test //默认不处理null和空字符串.不用再写一堆的判断;其它有值的字段全部自动插入数据库中. //方便结合DB插值,如id自动增长,由DB插入;createtime由DB默认插入 int insertNum=suid.insert(orders2); //insert System.out.println("insert record:"+insertNum); //默认不处理null和空字符串.不用再写一堆的判断;其它有值的字段全部自动作为过滤条件 // int deleteNum=suid.delete(orders2); //delete // System.out.println("delete record:"+deleteNum); List list2 =suid.select(orders1); //select confirm the data for (int i = 0; i < list2.size(); i++) { System.out.println(list2.get(i).toString()); } } } //注意: 事务,分页,排序,范围查询,查询结果直接返回json等都支持,这里只是一个入门例子. ``` 综合应用: ========= **Java快速编程, 让Java的开发速度超过php和Rails。** **更快的开发Java Web的新组合:** [Bee+Spring+SpringMVC](../../../../aiteasoft/bee-spring-springmvc) **包括仅分库多数据源实例** **更快的开发Spring Cloud微服务的新组合:** [Bee + Spring Boot](../../../bee-springboot) ...... ## [FAQ常见问题](../../../bee/blob/master/FAQ_CN.md) [点击链接可查看 FAQ常见问题](../../../bee/blob/master/FAQ_CN.md) 联系与欢迎: ========= #### 作者的电子邮箱email: honeysoft@126.com #### 如有任何相关建议,欢迎给作者发邮件,不胜感激! #### 更多设计思想,请关注微信公众号: 软件设计活跃区 #### 为了能及时解答大家的疑问,可以加入Bee的技术QQ群:992650213 #### 同时,也欢迎你加入到Bee框架的开发之中,相信有你的加入,Bee会更加美好!