beecloud java_bee: Bee是开发速度快、简单、自动高效且具有人工智能(AI)特性的Java ORM框架!它的编码复杂度是O(1),不管操作多少张表,都可以不需要写额外的Dao代码。B...

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代码。

环境要求

jdk1.7+

Bee主要功能特点介绍:

Bee概念简单(10分钟即可入门)、功能强大。

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.支持事务、for update,支持批处理操作,支持原生SQL(自定义sql语句),支持存储过程。

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功能, 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);

SuidRich调整selectById方法且String类型参数的id智能识别Javabean的id类型.

加强聚合函数cont,sum,avg,min,max功能,Condition增加方法:

public Condition selectFun(FunctionType functionType,String fieldForFun);

public Condition selectFun(FunctionType functionType,String fieldForFun,String alias);

无Javabean,用map承载需要转换的实体信息,操作数据库(查询,删除数据).

支持读取Excel(.xls,.xlsx),并将数据转成List,且导入到数据库(bee-ext).

多表关联查询支持多个关联条件.

多个ORM操作使用同一个Connection.

支持长度大于0空字符串忽略处理,如"     ".

增加Ignore注解,忽略Javabean字段,不进行转换.

用模板生成文件支持自定义起止标签.

完善DB连接管理.

加强代码质量.

更新bee.properties文件中batchSize(bee.osql.insert.batchSize).

修复多表分页查询时,同名字段在部分数据库会混淆的缺陷(oracle).

修改缺陷:update默认主键为id时,无id字段或id为null时,异常处理.

修改缺陷:cache bug.

强烈建议:使用视图时,声明视图不放缓存(因会产生脏数据).

ORM比较

测试环境: 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工程,添加如下依赖

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脚本创建表和插入初始化数据.

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可参考:

5. 运行下面的 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等都支持,这里只是一个入门例子.

//更加应用参考,请查看: 更多例子 和 综合应用 .

综合应用:

Java快速编程, 让Java的开发速度超过php和Rails。

更快的开发Java Web的新组合:

Bee+Spring+SpringMVC

包括仅分库多数据源实例

更快的开发Spring Cloud微服务的新组合:

Bee + Spring Boot

......

联系与欢迎:

如有任何相关建议,欢迎给作者发邮件,不胜感激!

更多设计思想,请关注微信公众号: 软件设计活跃区

为了能及时解答大家的疑问,可以加入Bee的技术QQ群:992650213

同时,也欢迎你加入到Bee框架的开发之中,相信有你的加入,Bee会更加美好!


版权声明:本文为weixin_33117513原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。