diff --git a/2.0-sharding.md b/2.0-sharding.md
new file mode 100644
index 0000000000000000000000000000000000000000..9bedb669da8c8a77c44b7d8c12eb36b2c5276b62
--- /dev/null
+++ b/2.0-sharding.md
@@ -0,0 +1,161 @@
+读写分离,分库,分表,分库分表,
+
+在读写分离的情况下,应用需要对读sql/写sql进行区分,读sql走从库,写sql走主库,并考虑主从同步延迟、高可用等一系列问题。
+在分库分表的情况下,应用需要能对sql进行解析、改写、路由、结果集合并等一些操作,以及分布式事务、分布式id生成器等。路由至单节点的SQL,则无需优化改写。
+
+为什么要分表,分库?
+一旦业务表中的数据量大了,从维护和性能角度来看,无论是任何的 CRUD 操作,对于数据库而言都是一件极其耗费资源的事情。即便设置了索引, 仍然无法掩盖因为数据量过大从而导致的数据库性能下降的事实 ,这个时候就该对数据库进行 水平分区 (sharding,即分库分表 ),将原本一张表维护的海量数据分配给 N 个子表进行存储和维护。
+延缓分表分库?
+将业务表、订单表中旧的历史数据移到历史表。其实这就是分表的雏形。
+
+类型:
+1)只分表: (可以只有一个数据源) (V1.8已实现)
+ 同库的分表(只分表不分库)
+ 按月份,按单位建表放数据。
+ 将db库中的user表拆分为2个分表,user_0和user_1,这两个表还位于同一个库中。
+2)只分库 (V1.8已实现)
+ 将db库拆分为db_0和db_1两个库,同时在db_0和db_1库中各自新建一个user表,db_0.user表和db_1.user表中各自只存原来的db.user表中的部分数据。
+ (因各库的表,只存原来的一部分数据,涉及到字段分片)
+ 而以下这种分库,却仍有可能只用单数据源。
+ 只分库不分表,但原单点库中的表各自移到不同的库中
+ (各分库有原库中的部分表,典型的:将不同业务的表拆分到不同的库中)
+ 现在流行的微服务就是按业务打包成一个个服务。或一个服务,只用到一个库,还是可以用单数据源。
+
+3)复制型分库 (V1.8已实现)
+ 复制型分库(读写分离,每个库的表都一样)
+ 每个库中的表数据是一样的(因同步原因,可能最终一致会有延迟)。
+
+4)既分库也分表 (计划在V2.0)
+将db库拆分为db_0和db_1两个库,db_0中包含user_0、user_1两个分表,db_1中包含user_2、user_3两个分表。
+
+目标:
+支持数据库分库分表的ORM中间件的作用,是让开发人员可以像操作单库单表那样去操作数据库,屏蔽底层复杂的实现。
+
+1.读写分离 (V1.8已实现)
+读写分离,每个库都一样(表都一样,只是部署在不同的节点,如ip不一样)。
+从应用的角度来说,需要对读(select、show、explain等)、写(insert、update、delete等)操作进行区分。如果是写操作,就走主库,主库会将数据同步给从库;之后有读操作,就走从库,
+从多个slave中选择一个,查询数据。
+1)写操作走主库,从操作走多个读库;
+2)如果一个事务中同时包含了读请求(如select)和写请求(如insert),则统一走主库(避免分布式事务问题)。
+ 很强的一致性场景时,可以主动要求,进行从库的同步吗?
+3)主从同步,由DB本身负责,如Mysql proxy. 应用需要考虑主从同步延迟。
+
+解决方法:
+通过判断操作类型,切换数据源完成。不涉及sql重写,改写.
+数据源,可以设置,有更新时能改动,以便能感知更新(主库切换,从库增减等)。
+一个事务中同时包含了读请求(如select)和写请求(如insert),则统一走主库。比较容易实现,在开启事务时,路由到写库的conn即可。
+同一线程且同一数据库连接内,如有写入操作,以后的读操作均从主库读取,用于保证数据一致性; 怎么知道线程线程结束? 什么时候才能将连接放回连接池。
+
+读写分离优点
+避免单点故障。
+负载均衡,读能力水平扩展。通过配置多个slave节点,可以有效的避免过大的访问量对单个库造成的压力。
+
+在读写分离的情况下,应用需要对读sql/写sql进行区分,读sql走从库,写sql走主库,并考虑主从同步延迟、高可用等一系列问题。
+
+
+2.同库的分表 (V1.8已实现)
+ 按日期分成多个表,按编号分成多个表
+ 选写分表键(用于找到相应表的键),如时间id.
+ 1)事务暂时只支持一个库的(暂时不支持多库分表,避免分布式事务)。
+ 2)javabean与表的映射
+ 3)sql重写,改写
+ update修改分表字段的值时,只会修改值,不会根据修改后的值再对数据进行迁移.这样会产生问题。除非sql不改写,每个库都运行一样的sql,再将结果合并。
+ 分表时,表名是不一样的。
+ 同时多个表更新,如何回滚?
+ 打印的sql,是实际执行的sql,连DataSource的名称也打印出来。跟Sharding不一样。DBA,开发人员看到user001就知道是user表,没必要对他们隐藏这些细节.
+ 路由至单节点的SQL,则无需优化改写。 因此先选定DS,再确定下一步的操作。
+ 4)
+
+3. 总规则:
+核心概念:
+**分片路由分为字段的分片和表的分片。
+分片算法
+提供对 SQL 语句中的 =, >, <, >=, <=和 BETWEEN AND ,IN 的分片操作支持
+广播表:配置表、参数表等,每个库都可以放一份。
+
+可以选择分片,也可以不用它。
+有些表的编号,是通过分片字段计算来的。如user0中的0可以通过某字段求余得来。
+设置默认DS,路由找不到DS时,使用默认那个。
+***DS如何根据规则路由;表如何根据规则解析成正确的表,从而生成正确的sql;根据分片键确定是否要生成多条sql.
+
+
+可能在生成sql时,就按库或表,分好。
+
+中间件检测到你的sql脚本是插入、更新、删除的语句,自动选择主数据源;如果是查询语句,则随机选择一个读数据源;开启了事务会根据事务选择数据源。
+因此,数据源,还有类型属性,同一类型的从库是一样的,缓存共用。
+
+强制分片路: (参考设计:仅在当前线程内生效)
+Apache ShardingSphere 使用 ThreadLocal 管理分片键值。可以通过编程的方式向 HintManager 中添加分片条件,该分片条件仅在当前线程内生效。
+除了通过编程的方式使用强制分片路由,Apache ShardingSphere 还计划通过 SQL 中的特殊注释的方式引用 Hint,使开发者可以采用更加透明的方式使用该功能。
+指定了强制分片路由的 SQL 将会无视原有的分片逻辑,直接路由至指定的真实数据节点。
+
+
+4.高可用:
+配置信息动态生效
+在注册中心上修改、删除、新增相关配置,会动态推送到生产环境并立即生效。
+参考:永久且同步配置。
+
+
+5.分库不分表 (V1.8已实现)
+读写分离算是一种典型的分库不分表。因为每个库的表是一样.
+一般的有如,将不同业务的表拆分到不同的库中,可根据表来路由。
+
+6.分库分表
+暂不支持。
+(计划在V2.0)
+为什么?
+原因如下:
+跨库事务也是分布式的数据库集群要面对的棘手事情。 合理采用分表,可以在降低单表数据量的情况下,尽量使用本地事务,善于使用同库不同表可有效避免分布式事务带来的麻烦。
+在不能避免跨库事务的场景,有些业务仍然需要保持事务的一致性。 而基于XA的分布式事务由于在并发度高的场景中性能无法满足需要,并未被互联网巨头大规模使用,他们大多采用
+最终一致性的柔性事务代替强一致事务。
+
+从应用的角度来说,需要对读(select、show、explain等)、写(insert、update、delete等)操作进行区分。如果是写操作,就走主库,主库会将数据同步给从库;之后有读操作,就走从库,
+从多个slave中选择一个,查询数据。
+事务问题。如果一个事务中同时包含了读请求(如select)和写请求(如insert),如果读请求走从库,写请求走主库,由于跨了多个库,那么jdbc本地事务已经无法控制,属于分布式事务的范畴。而分布式事务非常复杂且效率较低。因此对于读写分离,
+目前主流的做法是,事务中的所有sql统一都走主库,由于只涉及到一个库,jdbc本地事务就可以搞定。
+
+补列
+排序分页,要改写sql
+
+正确性改写
+标识符改写
+补列
+分页修正
+批量拆分
+优化改写
+单节点优化
+流式归并优化
+
+用S-uid的好处,
+
+mysql:
+分页方案优化
+由于LIMIT并不能通过索引查询数据,因此如果可以保证ID的连续性,通过ID进行分页是比较好的解决方案:
+
+SELECT * FROM t_order WHERE id > 100000 AND id <= 100010 ORDER BY id
+或通过记录上次查询结果的最后一条记录的ID进行下一页的查询:
+SELECT * FROM t_order WHERE id > 100000 LIMIT 10
+sql输出,提示是经过优化的sql.用不带分页的部分sql为key,缓存上一次查询的id.
+
+4.3 分库分表的Join
+一般情况下,分库分表后,就不能再和单表一样进行Join了,目前zebra支持以下两种情况的Join。
+
+4.3.1 小表广播
+适用在一些配置表,或者一般不怎么变更的小表上,然后分表需要和这个小表进行Join。对于小表需要在每个分库上复制一个,所有对这张表的Join就会变成单库Join了。另外,对于这张表的任何变更,zebra后端会使用binlog的方式自动同步到每一个分库上去。所以这种方式叫做小表广播。
+注意:小表广播需要自行配置同步服务!
+
+4.3.2 Binding Table
+适用在若干个分表上进行Join,前提是这些分表的分表逻辑都是一样的,意味着所有的Join都可以在同一个数据库上进行。
+比如:表a和表b同时都要分表,而且都是使用UserID进行分表,分表的个数和分库的个数都是一样的。
+
+分库分表优点
+分库的好处: 降低单台机器的负载压力,提升写入性能
+
+分表的好处: 提高数据操作的效率。举个例子说明,比如user表中现在有4000w条数据,此时我们需要在这个表中增加(insert)一条新的数据,insert完毕后,数据库会针对这张表重新建立索引,4000w行数据建立索引的系统开销还是不容忽视的。
+但是反过来,假如我们将这个表分成4 个table呢,从user_0一直到user_3,4000w行数据平均下来,每个子表里边就只有1000W行数据,这时候我们向一张 只有1000W行数据的table中insert数据后建立索引的时间就会下降,从而提高DB的运行时效率,
+提高了DB的并发量。除了提高写的效率,更重要的是提高读的效率,提高查询的性能。当然分表的好处还不止这些,还有诸如写操作的锁操作等,都会带来很多显然的好处。
+
+注意:无论选择什么拆分键,采用何种拆分策略,都要注意拆分值是否存在热点的问题,尽量规避热点数据来选择拆分键。
+注意:不一定需要拿数据库主键当做分表键,也可以拿其他业务值当分表键。拿主键当分表键的好处是可以散列均衡,减少热点问题。
+
+
diff --git a/Changed_Log.md b/Changed_Log.md
index 0533a5b9a6bd8268548f5c8c53bf7dfde8aa5ac9..925ef318267102051a7391d328e4277e7d7c7873 100644
--- a/Changed_Log.md
+++ b/Changed_Log.md
@@ -160,4 +160,30 @@ fixed bug:parse the json has extra comma.
fixed null bug about:PreparedSql's method select(String sql,Object preValues[]).
fixed bug about Oracle more table paing.
-
\ No newline at end of file
+**v1.8.15**(2020-10-01 3Festivals)
+1.Enhance support for H2,SQLite,PostgreSQL.
+2.Enhance page funtion,paging para also use placeholder.
+3.Can be used in zero configuration.
+4.Enhance PearFlowerId algorithm that it will produce even number with continuous mantissa of 0 when is often not used (there are no such defect in SerialUniqueId and OneTimeSnowflakeId).
+5.Enhance Log function.
+6.Fixed json transform bug.
+
+**v1.8.99**(2020-10-25 Double Ninth Festival)
+1.Support lower and upper case option for SQL KeyWord.
+2.Cache sql key support MD5 string.
+3.Optimize the way of setting DB information with Honeyconfig.
+4.Fix bug about checkSelectField.
+
+**v1.8.15**(2020-10-01 3Festivals)
+1.Enhance support for H2,SQLite,PostgreSQL.
+2.Enhance page funtion,paging para also use placeholder.
+3.Can be used in zero configuration.
+4.Enhance PearFlowerId algorithm that it will produce even number with continuous mantissa of 0 when is often not used (there are no such defect in SerialUniqueId and OneTimeSnowflakeId).
+5.Enhance Log function.
+6.Fixed json transform bug.
+
+**v1.8.99**(2020-10-25 Double Ninth Festival)
+1.Support lower and upper case option for SQL KeyWord.
+2.Cache sql key support MD5 string.
+3.Optimize the way of setting DB information with Honeyconfig.
+4.Fix bug about checkSelectField.
\ No newline at end of file
diff --git a/Changed_Log_CN.md b/Changed_Log_CN.md
index 8c006c9786950ca24d6a211fcb506422f4e96b08..7b995121b2338efda46251fed9ad70761c55fef7 100644
--- a/Changed_Log_CN.md
+++ b/Changed_Log_CN.md
@@ -160,6 +160,7 @@ public String selectFun(String sql);
修复null bug,关于方法:PreparedSql's method select(String sql,Object preValues[]).
修复关于oracle多表查询分页bug.
+
**v1.8.15**(2020-10-01 3节日)
1.增强对数据库H2,SQLite,PostgreSQL的支持.
2.优化分页功能,分页参数也用占位符.
@@ -168,4 +169,10 @@ public String selectFun(String sql);
5.完善日志Log功能.
6.修复json转换bug.
+**v1.8.99**(2020-10-25 重阳节)
+1.SQL关键字支持可配置大写或小写输出.
+2.SQL缓存key可用MD5字符.
+3.优化利用HoneyConfig设置DB信息的方式.
+4.修复关于checkSelectField的bug.
+
\ No newline at end of file
diff --git a/FAQ_CN.md b/FAQ_CN.md
index bec08643ce312407d79865c709954cc348892077..1fa83b19f4098480f373f879ea2c43845ec3c8aa 100644
--- a/FAQ_CN.md
+++ b/FAQ_CN.md
@@ -4,7 +4,7 @@
Q: Bee支持几种数据库?
-A: mysql,MariaDB,oracle,sqlserver...只要该DB支持JDBC,Bee就可以轻松支持它!
+A: MySQL,MariaDB,Oracle,SQL Server,H2,SQLite,PostgreSQL等等都是支持的,只要该DB支持JDBC,Bee就可以轻松支持它!
2.
@@ -78,7 +78,7 @@ A: Hibernate的概念太复杂,学习成本高,更新会先查询再更新
Q: Bee如何提高Java web软件开发效率?
-A: 除了可以不需要写dao代码外(编码复杂度为O(1)),还提供了表对应的实体Javabean自动生成工具, 根据模板自动生成Java web前后端代码;人性化的SQL日志,可输出直接运行的sql语句(而不只是有占位符的).
+A: 除了可以不需要写dao代码外(编码复杂度为O(1)),还提供了表对应的实体Javabean自动生成工具, 根据模板自动生成Java web前后端代码;人性化的SQL日志,可输出直接运行的sql语句(有占位符的SQL不能直接运行,不方便调试).
11.
@@ -146,6 +146,19 @@ condition.setAdd("p", "step");
A: ORM Bee框架是采用接口与实现分离的设计方式.Bee是接口,而Honey则是Bee的实现.
+15.
+
+Q: Bee非常易用,编写代码少,但使用是一方面, 它的性能如何?
+
+A: 性能绝对是过得去的.README给出了详细的表格比较数据. 详细比较还开启了一个项目,欢迎PK。
+https://gitee.com/automvc/orm-compare
+
+16.
+
+Q: Bee适合手机开发领域吗?
+
+A: Bee文件小。bee V1.8 jar files 仅217k. 而且性能也接近JDBC的性能.还专门对H2,SQLite作了优化.
+
**其它相关资源:**
gitee issue: [https://gitee.com/automvc/bee/issues?assignee\_id=&author\_id=&branch=&issue\_search=&label\_name=&milestone\_id=&program\_id=&scope=&sort=&state=closed](https://gitee.com/automvc/bee/issues?assignee_id=&author_id=&branch=&issue_search=&label_name=&milestone_id=&program_id=&scope=&sort=&state=closed)
diff --git a/README.md b/README.md
index 8d1b6034169351f970c583be526052af4d17b3af..496c43fb3ec5be2eda4e80fc461a13de961a72e6 100644
--- a/README.md
+++ b/README.md
@@ -9,8 +9,8 @@ Bee
**Good Feature:** AI, Timesaving/Tasteful, Easy, Automatic (**AiTeaSoft Style**)
**Bee** see:
https://github.com/automvc/bee
-**Honey** see:
-https://github.com/automvc/honey
+or:
+https://gitee.com/automvc/bee
## [中文介绍](../../../bee/blob/master/README_CN.md)
[点击链接可查看中文介绍](../../../bee/blob/master/README_CN.md)
@@ -88,6 +88,12 @@ fixed null bug about:PreparedSql's method select(String sql,Object preValues[]).
5.Enhance Log function.
6.Fixed json transform bug.
+**v1.8.99**(2020-10-25 Double Ninth Festival)
+1.Support lower and upper case option for SQL KeyWord.
+2.Cache sql key support MD5 string.
+3.Optimize the way of setting DB information with Honeyconfig.
+4.Fix bug about checkSelectField.
+
## [Function Detail](../../../bee/blob/master/Changed_Log.md)
[click for: Function Detail](../../../bee/blob/master/Changed_Log.md)
@@ -228,18 +234,18 @@ Quick Start:
org.teasoft
bee
- 1.8.15
+ 1.8.99
org.teasoft
honey
- 1.8.15
+ 1.8.99
org.teasoft
bee-ext
- 1.8.15
+ 1.8.99
```
@@ -271,58 +277,58 @@ bee.db.password =
import java.math.BigDecimal;
import java.util.List;
+import org.teasoft.bee.osql.BeeException;
import org.teasoft.bee.osql.Suid;
import org.teasoft.honey.osql.core.BeeFactory;
+import org.teasoft.honey.osql.core.Logger;
/**
* @author Kingstar
- * @since 1.0
+ * @since 1.0
*/
-public class SuidExam {
-
+public class SuidExamEN {
+
public static void main(String[] args) {
- Suid suid=BeeFactory.getHoneyFactory().getSuid();
-
- //需要先生成相应的Javabean
- Orders orders1=new Orders(); //need define the Javabean
- 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());
+ try {
+ Suid suid = BeeFactory.getHoneyFactory().getSuid();
+
+ Orders orders1 = new Orders();//need gen the Javabean
+ orders1.setId(100001L);
+ orders1.setName("Bee(ORM Framework)");
+
+ List list1 = suid.select(orders1); // 1. select
+ for (int i = 0; i < list1.size(); i++) {
+ Logger.info(list1.get(i).toString());
+ }
+
+ orders1.setName("Bee(ORM Framework)");
+ int updateNum = suid.update(orders1); //2. update
+ Logger.info("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
+
+ int insertNum = suid.insert(orders2); // 3. insert
+ Logger.info("insert record:" + insertNum);
+
+ int deleteNum = suid.delete(orders2); // 4. delete
+ Logger.info("delete record:" + deleteNum);
+ } catch (BeeException e) {
+ Logger.error("In SuidExamEN (BeeException):" + e.getMessage());
+ e.printStackTrace();
+ } catch (Exception e) {
+ Logger.error("In SuidExamEN (Exception):" + e.getMessage());
+ e.printStackTrace();
}
}
}
-//注意: 事务,分页,排序,范围查询,查询结果直接返回json等都支持,这里只是一个入门例子.
+// notice: this is just a simple sample. Bee suport transaction,paging,complicate select,slect json,and so on.
+
```
#### [More example/test case](../../../bee-exam/)
diff --git a/README_CN.md b/README_CN.md
index c2bf303e195919b385c45d1fd0c0903ca580934d..ab08f6ae22ce9f9114022e6fb45b69d332e148bd 100644
--- a/README_CN.md
+++ b/README_CN.md
@@ -6,6 +6,8 @@ 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 的思维转变!)。
@@ -13,8 +15,6 @@ Bee是一种更接近SQL语言思维的ORM框架,
一种开发速度和开发成本都不比php差的Java ORM框架,
而且它的编码复杂度是O(1),即用了Bee,**无论多少个表**,你都可以不用另外再写dao代码。
-**Bee** 网址:
-https://github.com/automvc/bee
**Bee在gitee** 的网址:
https://gitee.com/automvc/bee
@@ -40,7 +40,7 @@ jdk1.7+
* 16.支持**读写分离**一主多从, 仅**分库**等**多数据源**模式。
* 17.**分布式**环境下生成**连续单调递增**(在一个workerid内),**全局唯一**数字**id**;提供自然简单的分布式主键生成方式。
* 18.**支持同库分表,动态表名映射**。
-* 19.**性能好:接近JDBC的速度;文件小:Bee V1.8 jar 仅217k。**。
+* 19.**性能好:接近JDBC的速度;文件小:Bee V1.8 jar 仅217k**。
## 最新功能介绍:
@@ -89,10 +89,16 @@ PreparedSql添加三个新方法
5.完善日志Log功能.
6.修复json转换bug.
+**v1.8.99**(2020-10-25 重阳节)
+1.SQL关键字支持可配置大写或小写输出.
+2.SQL缓存key可用MD5字符.
+3.优化利用HoneyConfig设置DB信息的方式.
+4.修复关于checkSelectField的bug.
+
## [详细完整功能介绍](../../../bee/blob/master/Changed_Log_CN.md)
[点击链接可查看 详细完整功能介绍](../../../bee/blob/master/Changed_Log_CN.md)
-## ORM Compare
+## ORM比较
[ORM-Compare (More Detail)](../../../orm-compare)
@@ -231,18 +237,18 @@ OrdersService.java
org.teasoft
bee
- 1.8.15
+ 1.8.99
org.teasoft
honey
- 1.8.15
+ 1.8.99
org.teasoft
bee-ext
- 1.8.15
+ 1.8.99
```
@@ -279,6 +285,7 @@ import org.teasoft.bee.osql.Suid;
import org.teasoft.honey.osql.core.BeeFactory;
/**
+ * 查,改,增,删 Suid (select,update,insert,delete)实例
* @author Kingstar
* @since 1.0
*/
@@ -293,44 +300,44 @@ public class SuidExam {
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默认插入
- int insertNum=suid.insert(orders2); //insert
System.out.println("insert record:"+insertNum);
+ //4:delete 删除实例
//默认不处理null和空字符串.不用再写一堆的判断;其它有值的字段全部自动作为过滤条件
-// int deleteNum=suid.delete(orders2); //delete
-// System.out.println("delete record:"+deleteNum);
+ //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等都支持,这里只是一个入门例子.
```
-#### [More example/test case](../../../bee-exam/)
+#### [更多例子/测试用例](../../../bee-exam/)
综合应用:
=========
diff --git a/pom.xml b/pom.xml
index f4b93c5ddd1640bc9943de443dcbdf4ea43dc137..9b1b6199dd63556c2fe87a1ac5230c24e7f637d0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
org.teasoft
bee
- 1.8.15
+ 1.8.99
jar
diff --git a/src/main/java/org/teasoft/bee/osql/LowerKey.java b/src/main/java/org/teasoft/bee/osql/LowerKey.java
new file mode 100644
index 0000000000000000000000000000000000000000..06410295f6c658a3b7abfd2f96583dddeecd51a9
--- /dev/null
+++ b/src/main/java/org/teasoft/bee/osql/LowerKey.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright 2013-2020 the original author.All rights reserved.
+ * Kingstar(honeysoft@126.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.teasoft.bee.osql;
+
+/**
+ * SQL关键字的小写形式.SQL KeyWord's lower case.
+ * @author Kingstar
+ * @since 1.8.99
+ */
+public class LowerKey implements SqlKeyWord {
+
+ public static String SPACE=" ",
+ select="select",
+ as="as",
+ from="from",
+ where="where",
+ insert="insert",
+ into="into",
+ values="values",
+ and="and",
+ or="or",
+ Null="null",
+ isNull="is null",
+ isNotNull="is not null",
+ update="update",
+ set="set",
+ delete="delete",
+ orderBy="order by",
+ count="count",
+ asc="asc",
+ on="on",
+ limit="limit",
+ offset="offset",
+ top="top",
+
+ groupBy="group by",
+ having="having",
+ between="between",
+ notBetween="not between",
+
+ forUpdate="for update";
+
+ @Override
+ public String select() {
+ return select;
+ }
+
+ @Override
+ public String as() {
+ return as;
+ }
+
+ @Override
+ public String from() {
+ return from;
+ }
+
+ @Override
+ public String where() {
+ return where;
+ }
+
+ @Override
+ public String insert() {
+ return insert;
+ }
+
+ @Override
+ public String into() {
+ return into;
+ }
+
+ @Override
+ public String values() {
+ return values;
+ }
+
+ @Override
+ public String and() {
+ return and;
+ }
+
+ @Override
+ public String or() {
+ return or;
+ }
+
+ @Override
+ public String Null() {
+ return Null;
+ }
+
+ @Override
+ public String isNull() {
+ return isNull;
+ }
+
+ @Override
+ public String isNotNull() {
+ return isNotNull;
+ }
+
+ @Override
+ public String space() {
+ return SPACE;
+ }
+
+ @Override
+ public String update() {
+ return update;
+ }
+
+ @Override
+ public String set() {
+ return set;
+ }
+
+ @Override
+ public String delete() {
+ return delete;
+ }
+
+ @Override
+ public String orderBy() {
+ return orderBy;
+ }
+
+ @Override
+ public String count() {
+ return count;
+ }
+
+ @Override
+ public String asc() {
+ return asc;
+ }
+
+ @Override
+ public String on() {
+ return on;
+ }
+
+ @Override
+ public String forUpdate() {
+ return forUpdate;
+ }
+
+ @Override
+ public String limit() {
+ return limit;
+ }
+
+ @Override
+ public String offset() {
+ return offset;
+ }
+
+ @Override
+ public String top() {
+ return top;
+ }
+
+ @Override
+ public String groupBy() {
+ return groupBy;
+ }
+
+ @Override
+ public String having() {
+ return having;
+ }
+
+ @Override
+ public String between() {
+ return between;
+ }
+
+ @Override
+ public String notBetween() {
+ return notBetween;
+ }
+
+}
diff --git a/src/main/java/org/teasoft/bee/osql/ObjToSQL.java b/src/main/java/org/teasoft/bee/osql/ObjToSQL.java
index d85924f61bd9611d41ba725d9c6d8a2d648b4ed7..908ba08b242ac963fb68fef68680875df6f854e8 100644
--- a/src/main/java/org/teasoft/bee/osql/ObjToSQL.java
+++ b/src/main/java/org/teasoft/bee/osql/ObjToSQL.java
@@ -26,7 +26,7 @@ package org.teasoft.bee.osql;
* @author Kingstar
* @since 1.0
*/
-public interface ObjToSQL{
+public interface ObjToSQL {
public String toSelectSQL(T entity) ;
// public String toUpdateSQL(T entity) throws ObjSQLException;
diff --git a/src/main/java/org/teasoft/bee/osql/ObjToSQLRich.java b/src/main/java/org/teasoft/bee/osql/ObjToSQLRich.java
index 2e6fec220d743a8e2deaa7bbc728b7218566b3dc..fd82fb5ca9f698e06d5ee35fbcde91f3ba185905 100644
--- a/src/main/java/org/teasoft/bee/osql/ObjToSQLRich.java
+++ b/src/main/java/org/teasoft/bee/osql/ObjToSQLRich.java
@@ -23,7 +23,7 @@ package org.teasoft.bee.osql;
* @author Kingstar
* @since 1.0
*/
-public interface ObjToSQLRich extends ObjToSQL{
+public interface ObjToSQLRich extends ObjToSQL {
public String toSelectSQL(T entity,int size);
public String toSelectSQL(T entity,int start,int size);
diff --git a/src/main/java/org/teasoft/bee/osql/SqlKeyWord.java b/src/main/java/org/teasoft/bee/osql/SqlKeyWord.java
new file mode 100644
index 0000000000000000000000000000000000000000..cede333bce2b098515ab5672c9e02d963d7c2e0b
--- /dev/null
+++ b/src/main/java/org/teasoft/bee/osql/SqlKeyWord.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2013-2020 the original author.All rights reserved.
+ * Kingstar(honeysoft@126.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.teasoft.bee.osql;
+
+/**
+ * SQL关键字.SQL KeyWord.
+ * @author Kingstar
+ * @since 1.8.99
+ */
+public interface SqlKeyWord {
+
+ String select();
+ String as();
+ String from();
+ String where();
+
+ String insert();
+ String into();
+ String values();
+ String and();
+ String or();
+ String Null();
+ String isNull();
+ String isNotNull();
+
+ String update();
+ String set();
+ String delete();
+
+ String orderBy();
+ String count();
+ String asc();
+
+ String on();
+ String forUpdate();
+ String limit();
+ String offset();
+ String top();
+
+ String groupBy();
+ String having();
+ String between();
+ String notBetween();
+
+ String space();
+
+}
diff --git a/src/main/java/org/teasoft/bee/osql/UpperKey.java b/src/main/java/org/teasoft/bee/osql/UpperKey.java
new file mode 100644
index 0000000000000000000000000000000000000000..13c20f43e1bdaedb8c4d8bb7f5947d49a40b8bcb
--- /dev/null
+++ b/src/main/java/org/teasoft/bee/osql/UpperKey.java
@@ -0,0 +1,200 @@
+/*
+ * Copyright 2013-2020 the original author.All rights reserved.
+ * Kingstar(honeysoft@126.com)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.teasoft.bee.osql;
+
+/**
+ * SQL关键字的大写形式.SQL KeyWord's upper case.
+ * @author Kingstar
+ * @since 1.8.99
+ */
+public class UpperKey implements SqlKeyWord {
+
+ public static String SPACE=" ",
+ select="SELECT",
+ as="AS",
+ from="FROM",
+ where="WHERE",
+ insert="INSERT",
+ into="INTO",
+ values="VALUES",
+ and="AND",
+ or="OR",
+ Null="NULL",
+ isNull="IS NULL",
+ isNotNull="IS NOT NULL",
+ update="UPDATE",
+ set="SET",
+ delete="DELETE",
+ orderBy="ORDER BY",
+ count="COUNT",
+ asc="ASC",
+ on="ON",
+
+ limit="LIMIT",
+ offset="OFFSET",
+ top="TOP",
+
+ groupBy="GROUP BY",
+ having="HAVING",
+ between="BETWEEN",
+ notBetween="NOT BETWEEN",
+
+ forUpdate="FOR UPDATE" ;
+
+
+ @Override
+ public String select() {
+ return select;
+ }
+
+ @Override
+ public String as() {
+ return as;
+ }
+
+ @Override
+ public String from() {
+ return from;
+ }
+
+ @Override
+ public String where() {
+ return where;
+ }
+
+ @Override
+ public String insert() {
+ return insert;
+ }
+
+ @Override
+ public String into() {
+ return into;
+ }
+
+ @Override
+ public String values() {
+ return values;
+ }
+
+ @Override
+ public String and() {
+ return and;
+ }
+
+ @Override
+ public String or() {
+ return or;
+ }
+
+ @Override
+ public String Null() {
+ return Null;
+ }
+
+ @Override
+ public String isNull() {
+ return isNull;
+ }
+
+ @Override
+ public String isNotNull() {
+ return isNotNull;
+ }
+
+ @Override
+ public String space() {
+ return SPACE;
+ }
+
+ @Override
+ public String update() {
+ return update;
+ }
+
+ @Override
+ public String set() {
+ return set;
+ }
+
+ @Override
+ public String delete() {
+ return delete;
+ }
+
+ @Override
+ public String orderBy() {
+ return orderBy;
+ }
+
+ @Override
+ public String count() {
+ return count;
+ }
+
+ @Override
+ public String asc() {
+ return asc;
+ }
+
+ @Override
+ public String on() {
+ return on;
+ }
+
+ @Override
+ public String forUpdate() {
+ return forUpdate;
+ }
+
+ @Override
+ public String limit() {
+ return limit;
+ }
+
+ @Override
+ public String offset() {
+ return offset;
+ }
+
+ @Override
+ public String top() {
+ return top;
+ }
+
+ @Override
+ public String groupBy() {
+ return groupBy;
+ }
+
+ @Override
+ public String having() {
+ return having;
+ }
+
+ @Override
+ public String between() {
+ return between;
+ }
+
+ @Override
+ public String notBetween() {
+ return notBetween;
+ }
+
+}
diff --git a/src/test/java/org/teasoft/bee/BeeExam.java b/src/test/java/org/teasoft/bee/BeeExam.java
index 912f600dd99ea42188718d15ea7ea3db56ef5e0b..f8d08a47b1aabb85697b8c680fde8cdb171b0194 100644
--- a/src/test/java/org/teasoft/bee/BeeExam.java
+++ b/src/test/java/org/teasoft/bee/BeeExam.java
@@ -34,17 +34,24 @@ public class BeeExam {
// bee-exam last update time:2020-08-22 22:14 (yyyy-MM-dd HH:mm)
// add H2,SQLite Support:
-// bee-exam(v1.8.6)-normal(H2)-2020-09-20 21.37.23.126.txt
-// bee-exam(v1.8.6)-normal(MySQL)-2020-09-20 18.28.31.764.txt
-// bee-exam(v1.8.6)-normal(SQLite)-2020-09-20 19.43.53.751.txt
+// bee-exam(v1.8.15)-normal(H2)-2020-09-20 21.37.23.126.txt
+// bee-exam(v1.8.15)-normal(MySQL)-2020-09-20 18.28.31.764.txt
+// bee-exam(v1.8.15)-normal(SQLite)-2020-09-20 19.43.53.751.txt
// add PostgreSQL Support:
-// bee-exam(v1.8.6)-normal(H2)-2020-10-01 17.50.37.507.txt
-// bee-exam(v1.8.6)-normal(MySQL)-2020-10-01 16.43.57.577.txt
-// bee-exam(v1.8.6)-normal(PostgreSQL)-2020-10-01 14.12.13.668-autoGenId.txt
-// bee-exam(v1.8.6)-normal(PostgreSQL)-2020-10-01 15.59.45.647.txt
-// bee-exam(v1.8.6)-normal(SQLite)-2020-10-01 19.16.47.115-autoGenId.txt
-// bee-exam(v1.8.6)-normal(SQLite)-2020-10-01 19.19.10.831.txt
+// bee-exam(v1.8.15)-normal(H2)-2020-10-01 17.50.37.507.txt
+// bee-exam(v1.8.15)-normal(MySQL)-2020-10-01 16.43.57.577.txt
+// bee-exam(v1.8.15)-normal(PostgreSQL)-2020-10-01 14.12.13.668-autoGenId.txt
+// bee-exam(v1.8.15)-normal(PostgreSQL)-2020-10-01 15.59.45.647.txt
+// bee-exam(v1.8.15)-normal(SQLite)-2020-10-01 19.16.47.115-autoGenId.txt
+// bee-exam(v1.8.15)-normal(SQLite)-2020-10-01 19.19.10.831.txt
+
+// Support lower and upper case option for SQL KeyWord:
+// bee-exam(v1.8.99)-normal(MySQL)-2020-10-17 21.41.40.37.txt
+// bee-exam(v1.8.99)-normal(MySQL)-2020-10-17 21.42.02.730-UPPER.txt
+
+// Optimize the way of setting DB information with Honeyconfig:
+// bee-exam(v1.8.99)-normal(MySQL)-2020-10-24 21.40.20.605.txt
// 测试用例请查看工程:bee-exam
// 以下任意一个地址:
diff --git a/src/test/java/org/teasoft/bee/change-log.txt b/src/test/java/org/teasoft/bee/change-log.txt
index 6a1e9c3bc4669d778c42cd472acebaad606ad0fc..3bad648bd9359677884d93c3981df482b4b67555 100644
--- a/src/test/java/org/teasoft/bee/change-log.txt
+++ b/src/test/java/org/teasoft/bee/change-log.txt
@@ -60,3 +60,10 @@ bee-exam(v1.8.15)-normal(PostgreSQL)-2020-10-01 14.12.13.668-autoGenId.txt
bee-exam(v1.8.15)-normal(PostgreSQL)-2020-10-01 15.59.45.647.txt
bee-exam(v1.8.15)-normal(SQLite)-2020-10-01 19.16.47.115-autoGenId.txt
bee-exam(v1.8.15)-normal(SQLite)-2020-10-01 19.19.10.831.txt
+
+Support lower and upper case option for SQL KeyWord:
+bee-exam(v1.8.99)-normal(MySQL)-2020-10-17 21.41.40.37.txt
+bee-exam(v1.8.99)-normal(MySQL)-2020-10-17 21.42.02.730-UPPER.txt
+
+Optimize the way of setting DB information with Honeyconfig:
+bee-exam(v1.8.99)-normal(MySQL)-2020-10-24 21.40.20.605.txt