Easy for Stronger.
Bee is an ORM framework.
Bee is an easy and high efficiency ORM framework.
Coding Complexity is O(1),it means that Bee will do the Dao for you.
You don't need to write the Dao by yourself anymore.Help you to focus more on the development of business logic.
Good Feature: AI, Timesaving/Tasteful, Easy, Automatic (AiTeaSoft Style)
Newest version is:Bee V2.4.0 LTS
Sharding target: It is mainly transparent to business development and coding, with only a little sharding config.
Bee see:
https://github.com/automvc/bee
bee-ext:
https://github.com/automvc/bee-ext
Easy to use:
- 1.Simple interface, convenient to use. The Suid interface provides four object-oriented methods corresponding to the SQL language's select, update, insert, and delete operations.
- 2.By using Bee, you no longer need to write separate DAO code. You can directly call Bee's API to perform operations on the database.
- 3.Convention-over-configuration: Javabean can no annotation, no xml.
- 4.Intelligent automatic filtering of null and empty string properties in entities eliminates the need for writing code to check for non-null values.
- 5.Easily implement partial field queries and native statement pagination.
- 6.Supports returning query results in JSON format; supports chaining.
- 7.Supports Sharding, both database and table Sharding; database-only Sharding; table-only Sharding; and read-write separation. This functionality is transparent to existing code and does not require additional coding.
- 8.Easily extendable with multiple database support (MySQL, MariaDB, Oracle, H2, SQLite, PostgreSQL, SQL Server, Access, Kingbase, Dameng, etc.), and theoretically supports any database supported by JDBC. Additionally, supports Android and Harmony.
- 9.Additional database pagination support for: MsAccess, Cubrid, HSQL, Derby, Firebird, etc.
- 10.Multiple databases can be used simultaneously (e.g., MySQL, Oracle, SQL Server).
Automatic, powerful:
- 11.Dynamic/arbitrary combination of query conditions without the need to prepare DAO interfaces in advance. New query requirements can be handled without modifying or adding interfaces.
- 12.Supports transactions, using the same connection for multiple ORM operations, FOR UPDATE, batch processing, executing native SQL statements, and stored procedures.
- 13.Supports object-oriented complex queries, multi-table queries (no N+1 problem), and supports one-to-one, one-to-many, many-to-one, and many-to-many relationships. The result structure can differ based on whether the sub-table uses List;multi-table association update, insert, and delete(2.1.8).
- 14.MongoDB ORM and support for MongoDB Sharding.
- 15.Supports register, interceptor, multi-tenancy, and custom TypeHandlers for handling ResultSet results in queries. SetParaTypeConvert converts PreparedStatement parameter types.
- 16.Custom dynamic SQL tags, such as @in, @toIsNULL1, @toIsNULL2, , . Allows dynamic SQL, converting lists into statements like in (1,2,3) without requiring foreach loops. Batch insertion also does not require foreach.
- 17.Complex query can be automatically parsed by the frontend and backend.
- 18.L1 cache, simple in concept and powerful in function; L1 cache can also be fine tuned like the JVM; Support updatable long-term cache list and update configuration table without restart. Inherently resistant to cache penetration. L2 cache extension support; Redis L2 cache support.
- 19.No third-party plugin dependencies; can be used with zero configuration.
- 20.High performance: close to the speed of JDBC; small file size: Bee V1.17 is only 502k, V2.1 is only 827k.
Assist function: - 21.Additional features: 21. Provides a naturally simple solution for generating distributed primary keys: generates globally unique, monotonically increasing (within a worker ID) numeric IDs in a distributed environment.
- 22.Supports automatic generation of Javabean corresponding to tables(support Swagger), creating tables based on Javabean, and automatically generating backend Javaweb code based on templates. Can print executable SQL statements without placeholders for easy debugging. Supports generating SQL scripts in JSON format.
- 23.Supports reading Excel files and importing data into the database; simple operations. Supports generating database tables from Excel configurations.
- 24.Stream tool class StreamUtil;DateUtil date conversion, judge date format, calculate age.
- 25.Rich annotation support: PrimaryKey, Column, Datetime, Createtime, Updatetime; JustFetch, ReplaceInto (MySQL), Dict, DictI18n,GridFs, etc.
- 26.Use entity name _F (automatically generated) to reference entity field names, e.g., Users_F.name or in SuidRichExt interface using the format Users::getName.
- MongoDB update,delete,deleteById support for sharding
- MongoDB modify sharding cache enhance
- MongoDB index support for sharding
- add ShardingFullOpTemplate
- ObjSQLRich(SuidRich) add selectByTemplate for select
- GenFiles support genFileViaStream
- Genbean:update genFieldFile,toString, add method setUpperFieldNameInFieldFile
- update DoNotSetTabShadngValue tip message(Sharding insert need set the sharding value)
- SuidRich selectById,deleteById support sharding
- Condition support clone
- fixed bug:
sharding select all(no paging)
sharding modify cache
-
Chaing SQL programming supports placeholder precompilation to prevent injection attacks
-
Do not cache if no table name is specified
-
Add a default date sharding implementation for Calculate, and add a custom sharding implementation example
-
Support ElasticSearch(7.x) ORM query
-
PreparedSql support set table name for enhance relative cache
-
MongoDB gen Javabean support gen comment
-
the Sharding template method class uses finally to handle context recycling
-
MapSql(MapSuid)supports using Condition to implement more complex where conditions, with updateSet set values
MapSql add methods: public void where(Condition condition);
public void updateSet(Condition condition); -
add ConditionExt to support the use of entity::getName to reference property
ConditionExt support Condition no need hard code the field name -
add ChainSqlFactory
-
add select Result Assembler
-
MoreTable add methods:selectWithFun,count
-
MoreTable add method List<String[]> selectString(T entity, Condition condition)
-
enhance MoreTable update
-
support property style sharding config
-
MoreTable support selectJson
-
GenBean support java.time.LocalDateTime
-
fixed bug: GenConfig baseDir default value support Linux env
-
Suid support java.time.LocalDateTime type
-
TO_DATE for Oracle filter the record in SQL where part
-
Fixed bug: MoreTable single insertion, automatic value setting before doBeforePasreEntity InsertAndReturnId in sharding mode need setInitIdByAuto > doBeforePasreEntity
InsertAndReturnId: The pkName passed in should be converted to column name -
enhance:
When inserting multiple tables, if there are no child tables, insert is used for inserting the main table
File generation, add backup of existing files function
TranHandler throws the received exception to the upper level -
support pgsql json/jsonb, but in where part, need write the pgsql special sql
-
Improve the sharding function
1.MySQL
2.Oracle
3.SQL Server
4.MariaDB
5.H2
6.SQLite
7.PostgreSQL
8.MS Access
9.Kingbase
10.DM
11.OceanBase
12.Cubrid,HSQL,Derby,Firebird
13.Other DB that support JDBC
NOSQL:
14.Mongodb
15.ElasticSearch
16.Cassandra
Mobile environment (database):
17.Android
18.Harmony
Test Evn : Local windows.
DB: MySQL (Version 5.6.24).
Test point: Batch Insert;Paging Select; Transaction(update and select).
Batch Insert(unit: 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 |
Paging Select(unit: 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 |
Transaction(update and select) (unit: 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 need files
orm\compare\bee\service\BeeOrdersService.java
MyBatis need files
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
common,Javabean and Service interface:
Orders.java
OrdersService.java
Performance comparison data of Bee application in app development
Operate 10000 records, and the use time comparison is as follows.
Operate 10000 records(unit: ms) |
|||
insert | query | delete | |
greenDao(Android) | 104666 | 600 | 47 |
Bee(Android 8.1) | 747 | 184 | 25 |
Bee(HarmonyOS P40 Pro simulator) | 339 | 143 | 2 |
<dependency>
<groupId>org.teasoft</groupId>
<artifactId>bee-all</artifactId>
<version>2.4.0</version>
</dependency>
<!-- Mysql config.You need change it to the real database config. -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
<scope>runtime</scope>
</dependency>
Gradle
implementation group: 'org.teasoft', name: 'bee-all', version: '2.4.0'
//Gradle(Short)
implementation 'org.teasoft:bee-all:2.4.0'
eg:
Create one database,default name is bee.
Create the tables and init the data by run the init-data(user-orders)-mysql.sql file(it is mysql sql script).
If no the bee.properties file, you can create it by yourself.
#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.url =jdbc:mysql://127.0.0.1:3306/bee?characterEncoding=UTF-8&useSSL=false
bee.db.username = root
bee.db.password =
#print log
bee.osql.showSQL=true
bee.osql.showSql.showType=true
bee.osql.showSql.showExecutableSql=true
# since 2.1.7 sqlFormat=true,will format the executable sql
bee.osql.showSql.sqlFormat=false
#log4j>slf4j>log4j2>androidLog>harmonyLog>systemLogger>fileLogger>noLogging>jdkLog>commonsLog
bee.osql.loggerType=systemLogger
Orders(Javabean)
Auto Genernate Javabean
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.BeeFactoryHelper;
import org.teasoft.honey.osql.core.Logger;
/**
* @author Kingstar
* @since 1.0
*/
public class SuidExamEN {
public static void main(String[] args) {
try {
Suid suid = BeeFactoryHelper.getSuid();
Orders orders1 = new Orders();//need gen the Javabean
orders1.setId(100001L);
orders1.setName("Bee(ORM Framework)");
List<Orders> list1 = suid.select(orders1); // 1. select
for (int i = 0; i < list1.size(); i++) {
Logger.info(list1.get(i).toString());
}
//Condition condition=BF.getCondition(); // The SuidRich interface has many methods with the Condition parameter
//condition.op(Orders_F.userid, Op.ge, 0); // userid>=0
//Op supports: =,>,<,>=,<=,!=, Like, in, not in, etc
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();
}
}
}
// notice: this is just a simple sample. Bee suport transaction,paging,complicate select,slect json,and so on.
bee.db.isAndroid=true
bee.db.androidDbName=account.db
bee.db.androidDbVersion=1
bee.osql.loggerType=androidLog
#turn on query result field type conversion, and more types will be supported
bee.osql.openFieldTypeHandler=true
#If you are allowed to delete and update the whole table, you need to remove the comments
#bee.osql.notDeleteWholeRecords=false
#bee.osql.notUpdateWholeRecords=false
public class YourAppCreateAndUpgrade implements CreateAndUpgrade{
@Override
public void onCreate() {
// You can create tables in an object-oriented way
Ddl.createTable(new Orders(), false);
Ddl.createTable(new TestUser(), false);
}
@Override
public void onUpgrade(int oldVersion, int newVersion) {
if(newVersion==2) {
Ddl.createTable(new LeafAlloc(), true);
Log.i("onUpgrade", "你在没有卸载的情况下,在线更新到版本:"+newVersion);
}
}
}
Configure android:name to BeeApplication in AndroidManifest.xml file.
package com.aiteasoft.util;
import org.teasoft.bee.android.CreateAndUpgradeRegistry;
import org.teasoft.beex.android.ApplicationRegistry;
public class BeeApplication extends Application {
private static Context context;
@Override
public void onCreate() {
ApplicationRegistry.register(this);//注册上下文
CreateAndUpgradeRegistry.register(YourAppCreateAndUpgrade.class);
}
}
// 并在AndroidManifest.xml,配置android:name为BeeApplication
<application
android:icon="@drawable/appicon"
android:label="@string/app_name"
android:name="com.aiteasoft.util.BeeApplication"
>
Suid suid=BF.getSuid();
List<Orders> list = suid.select(new Orders());
Performance comparison data of Bee application in app development
Operate 10000 records, and the use time comparison is as follows.
Operate 10000 records(unit: ms) |
|||
insert | query | delete | |
greenDao(Android) | 104666 | 600 | 47 |
Bee(Android 8.1) | 747 | 184 | 25 |
Bee(HarmonyOS P40 Pro simulator) | 339 | 143 | 2 |
Let Java more quicker programming than php and Rails.
Faster development of new combinations for Java Web:
Bee+Spring+SpringMVC
Faster development of new combinations for Spring Cloud microservices:
Bee + Spring Boot
Rapid Application Code Generation Platform--AiTea Soft made in China!
...
API-V1.17(Newest) SourceCode contain bee-1.17 CN & EN API,bee-1.17 CN SourceCode