# bee **Repository Path**: wangdefeng/bee ## Basic Information - **Project Name**: bee - **Description**: 互联网新时代的Java ORM工具,简单、高效,开发速度快! - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/automvc/bee - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 136 - **Created**: 2021-09-30 - **Last Updated**: 2021-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Bee ========= #### 工欲善其事必先利其器!——《论语·卫灵公》 #### 为适应互联网时代软件需求量大,需求变更频繁,性能要求高等要求,ORM Bee应运而生! **Bee** 是一个简单,易用,功能强大,开发速度快,编码少的 JAVA ORM 框架。 Bee简单易用:单表操作、多表关联操作,可以不用写sql,极少语句就可以完成SQL操作;**概念简单**,10分钟即可入门。 Bee功能强大:复杂查询也支持向对象方式,分页查询性能更高,一级缓存即可支持个性化优化;具有分布式特性。高级要求,还可以方便自定义SQL语句。 **如果说Mybatis在Hibernate之后不是重复造轮子,那Bee在Hibernate和Mybatis之后也不会是重复造轮子!** 择其优点,避其缺点,此外,还加有自己的优点! #### 磨刀不误砍柴工! Bee连磨刀的时间都帮你省了。 **Bee** 是一个具有人工智能(AI)特性,省时/优雅、简易、自动( **AiTea:** Timesaving/Tasteful, Easy, Automatic) 的ORM软件框架(AiTeaSoft)(IT-->AiTea 的思维转变!)。 Bee是一种更接近SQL语言思维的ORM框架, 一种开发速度和开发成本都不比Php,Ruby on Rail差的Java ORM框架, 而且它的编码复杂度是O(1),即用了Bee,**无论多少个表**,你都可以不用另外再写dao代码。 **Bee** 网址: https://github.com/automvc/bee **Bee在gitee** 的网址: https://gitee.com/automvc/bee ## 环境要求 jdk1.7+ ## Bee主要功能特点介绍: **Bee概念简单**(10分钟即可入门)、功能强大。 Bee **简化了与DB交互的编码**工作量.连接,事务都可以由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.支持**事务**、多个ORM操作使用同一连接、**for update**,支持**批处理**操作,支持原生SQL(**自定义sql**语句),支持**存储过程**。 * 9.支持**只查询一部分字段**。 * 10.支持面向对象方式复杂查询、**多表查询**(无n+1问题; 支持:一对一,一对多,多对一,多对多)。 * 11.**一级缓存**,概念简单,功能强大;一级缓存也可以**像JVM一样进行细粒度调优**;**智能缓存**,支持更新配置表,**不用重启**。 * 12.表名与实体名、字段名与属性名映射默认提供多种实现,且支持**自定义映射规则扩展**。 * 13.**多种DB**支持轻松扩展(MySQL,MariaDB,Oracle,H2,SQLite,PostgreSQL,SQL Server等直接可用)。 * 14.支持**读写分离**一主多从, 仅**分库**等**多数据源**模式(对以前的代码无需修改,该功能对代码是透明的,即无需额外编码),仅分库**可同时使用多种类型数据库**。 * 15.**分布式**环境下生成**连续单调递增**(在一个workerid内),**全局唯一**数字**id**;提供自然简单的分布式主键生成方式。 * 16.**支持同库分表,动态表名映射**。 * 17.可以不用表对应的Javabean也能操作DB。 * 18.**无**第三方插件依赖;可零配置使用。 * 19.**性能好:接近JDBC的速度;文件小:Bee V1.8 jar 仅217k**, **V1.9.5 jar,仅315k**。 辅助功能: * 20.支持自动生成表对应的Javabean,根据Javabean创建表,Javaweb**后端代码**根据**模板自动生成**;能打印非占位符的**可执行sql**,方便调试。 * 21.支持**读取Excel**,从Excel导入数据到DB,操作简单。 ## 最新功能介绍: **V1.9** SuidRich新增支持List参数的批量插入方法. 增强SuidRich功能, SuidRich增加方法: public List selectString(T entity,Condition condition); public int updateById(T entity,Condition condition); public String selectWithFun(T entity, FunctionType functionType, String fieldForFun, Condition condition); public int count(T entity); public int count(T entity, Condition condition); public boolean exist(T entity); //判断记录是否存在 SuidRich调整selectById方法且String类型参数的id智能识别Javabean的id类型. Suid新增insertAndReturnId方法. 加强聚合函数cont,sum,avg,min,max功能,Condition增加方法: public Condition selectFun(FunctionType functionType,String fieldForFun); public Condition selectFun(FunctionType functionType,String fieldForFun,String alias); Condition 添加方法:opWithField,setWithField 支持像:field1=field2的表达式 Condition 添加方法:selectDistinctField,支持distinct像 select distinct(userid) from table_name MapSuid,无需Javabean,用map承载需要转换的实体信息,操作数据库(查询,插入,删除数据). 支持读取Excel(*.xls,*.xlsx),并将数据转成List,且导入到数据库(bee-ext). 多表关联查询支持多个关联条件. 多个ORM操作使用同一个Connection. 支持同时使用不同数据库(多个数据源). 支持长度大于0空字符串忽略处理,如"     ". 增加Ignore注解,忽略Javabean字段,不进行转换. 用模板生成文件支持自定义起止标签. 完善DB连接管理. 加强代码质量(测试覆盖率达70%以上,关键代码达90%以上). 增强链式编程:Select,Update. 调整bee.properties,HoneyConfig配置信息. 整合Spring boot,提供bee-spring-boot-starter. 支持利用Javabean生成表. 修复多表分页查询时,同名字段在部分数据库会混淆的缺陷(oracle). 修复缺陷:update默认主键为id时,无id字段或id为null时,异常处理. 修复缺陷:cache bug. 修复缺陷:有关GenId的 getRangeId(int sizeOfIds)方法. 修复缺陷:jdk 11下,LoggerFactory在配置log4j2时,报错. 强烈建议:使用视图时,声明视图不放缓存(因会产生脏数据). **V1.9.8**(2021中秋节) SuidRich增加4个方法: public int save(T entity); public int update(T oldEntity,T newEntity); public String selectJson(T entity, String selectField); public String selectJson(T entity, String selectField, int start, int size); MoreTable(多表查询): 支持子表实体字段为List类型的多表关联查询. 支持两个子表的join关联查询(inner join,right join, left join); 支持一个子表里还有一个子表的关联查询. 修复问题:当一个子表的属性都为null时,该子表字段直接设置为null. 注解 JoinTable添加方法:subClass()用于List类型字段的多表关联查询. Condition新增方法,用于在关联查询时的on表达式达到提前过滤数据: public Condition opOn(String field, Op Op, Object value); MapSuid(不用Javabean实体结构操作数据库): 新增update,count,查询分页,新增和调整insert and insertAndReturnId. add method putNew(String fieldName, Object newValue),putNew(Map map),put(Map map),support page in MapSql. add method count(MapSql mapSql),update(MapSql mapSql),insertAndReturnId(MapSql mapSql),support page in MapSuid. add method putNew(String fieldName, Object newValue),putNew(Map map),put(Map map),support page in MapSqlImpl. add method toUpdateSqlByMap ,toCountSqlByMap ,support page in MapSqlProcessor. add method count(MapSql mapSql),update(MapSql mapSql),support page in MapSuidImpl. MapSuidImpl change two different method:insert(MapSql mapSql) & insertAndReturnId(MapSql mapSql) PreparedSqlLib新增selectMapList方法. 多数据源读写模式,支持不同类型数据源,方便数据库间转移数据. Logger: 两个方法支持有Throwable参数. 增加流的工具类StreamUtil ObjectUtils增加一个方法: isTrue(Boolean b) 增强检测字段合法性,包括MapSuid使用的字段. use LinkedHashMap in List<Map> result for selectMapList(String sql). selectJson支持通过配置将long转为string sql输出日志支持logger不同级别输出设置 增强autoGenBean ,支持生成Json格式的SQL脚本(SQL Json Script). fix bug for ExecutableSql. transfer the the field of 'order by'. fix null bug in create() of ObjectCreatorFactory. fix bug for max column number(excel in bee-ext). fix bug about HoneyContext fix bug about checkPackageByClass ## [详细完整功能介绍](../../../bee/blob/master/Changed_Log_CN.md) [点击链接可查看 详细完整功能介绍](../../../bee/blob/master/Changed_Log_CN.md) ## ORM比较 [ORM-Compare (More Detail)](../../../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
**Bee需要的文件** orm\compare\bee\service\BeeOrdersService.java **Mybatis需要的文件**(对一个表的操作,就会比Bee多三个dao相关文件) orm\compare\mybatis\service\MybatisOrdersService.java orm\compare\mybatis\dao\OrdersDao.java orm\compare\mybatis\dao\OrdersMapper.java orm\compare\mybatis\dao\impl\OrdersDaoImpl.java 公共都需要的有,Javabean和Service接口: Orders.java OrdersService.java **用Bee无需用户再写Dao代码,一个表少三个Dao文件,100个表就少300个Dao文件.** 快速开始: ========= ## 1. 引入Bee #### 1.1 maven工程,添加如下依赖 ```xml org.teasoft bee 1.9.5 org.teasoft honey 1.9.5 org.teasoft bee-ext 1.9.5 ``` #### 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.dbName=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. 生成Javabean Orders可参考: [Orders(Javabean)](../../../bee-exam/blob/master/src/main/java/org/teasoft/exam/bee/osql/entity/Orders.java) [Auto Genernate Javabean](../../../bee-exam/blob/master/src/main/java/org/teasoft/exam/bee/osql/autogen/GenBeanExam.java) ## 5. 运行下面的 java代码 ```java import java.math.BigDecimal; import java.util.List; import org.teasoft.bee.osql.Suid; import org.teasoft.honey.osql.core.BeeFactoryHelper; /** * 查,改,增,删 Suid (select,update,insert,delete)实例 * @author Kingstar * @since 1.0 */ public class SuidExam { public static void main(String[] args) { Suid suid=BeeFactoryHelper.getSuid(); //需要先生成相应的Javabean Orders orders1=new Orders(); orders1.setId(100001L); orders1.setName("Bee(ORM Framework)"); //1:select查询实例 //默认不处理null和空字符串.不用再写一堆的判断;其它有值的字段全部自动作为过滤条件 List list1 =suid.select(orders1); //select for (int i = 0; i < list1.size(); i++) { System.out.println(list1.get(i).toString()); } //2:update更新实例 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 //3:insert 插入实例 int insertNum=suid.insert(orders2); //insert //默认不处理null和空字符串.不用再写一堆的判断;其它有值的字段全部自动插入数据库中. //方便结合DB插值,如id自动增长,由DB插入;createtime由DB默认插入 System.out.println("insert record:"+insertNum); //4:delete 删除实例 //默认不处理null和空字符串.不用再写一堆的判断;其它有值的字段全部自动作为过滤条件 //int deleteNum=suid.delete(orders2); //delete //System.out.println("delete record:"+deleteNum); } } //注意: 事务,分页,排序,范围查询,查询结果直接返回json等都支持,这里只是一个入门例子. //更加应用参考,请查看: 更多例子 和 综合应用 . ``` #### [更多例子/测试用例](../../../bee-exam/) #### [Bee+Spring-boot Demo](../../../bee-starter-demo/) ### API-DOC [API-V1.9.5](https://gitee.com/automvc/bee/attach_files/692020/download) 综合应用: ========= **Java快速编程, 让Java的开发速度超过php和Rails。** **更快的开发Java Web的新组合:** [Bee+Spring+SpringMVC](../../../../aiteasoft/bee-spring-springmvc) **包括仅分库多数据源实例** [Bee+Spring+SpringMVC开发学校教务管理与分数管理系统](../../../../aiteasoft/schoolsys) **更快的开发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会更加美好!