# bee
**Repository Path**: liuzan/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**: 136
- **Created**: 2021-01-20
- **Last Updated**: 2021-01-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
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主要功能特点介绍:
* 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**支持轻松扩展(MySQL,MariaDB,Oracle,H2,SQLite,PostgreSQL等直接可用)。
* 14.**无**第三方插件依赖;可零配置使用。
* 15.提供表对应的javabean**自动生成工具**,Javaweb**后端代码**根据**模板自动生成**;能打印非占位符的**可执行sql**,方便调试。
* 16.支持**读写分离**一主多从, 仅**分库**等**多数据源**模式。
* 17.**分布式**环境下生成**连续单调递增**(在一个workerid内),**全局唯一**数字**id**;提供自然简单的分布式主键生成方式。
* 18.**支持同库分表,动态表名映射**。
* 19.**性能好:接近JDBC的速度;文件小:Bee V1.8 jar 仅217k**。
## 最新功能介绍:
**V1.9**
SuidRich新增支持List参数的批量插入方法.
SuidRich调整selectById方法且String类型参数的id智能识别Javabean的id类型.
完善DB连接管理.
加强代码质量.
修复多表分页查询时,同名字段在部分数据库会混淆的缺陷(oracle).
更新bee.properties文件中batchSize(bee.osql.insert.batchSize).
用模板生成文件支持自定义起止标签.
## [详细完整功能介绍](../../../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需要的文件**
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.8.99
org.teasoft
honey
1.8.99
org.teasoft
bee-ext
1.8.99
```
#### 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. 生成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.BeeFactory;
/**
* 查,改,增,删 Suid (select,update,insert,delete)实例
* @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)");
//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/)
综合应用:
=========
**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会更加美好!