101 Star 597 Fork 108

automvc / bee

Create your Gitee Account
Explore and code with more than 8 million developers,Free private repositories !:)
Sign up
Clone or Download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

Bee

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)

Good News:

1)V1.17 add support Android and HarmonyOS ORM function
2)In Android and HarmonyOS environment can use the same ORM code with Bee

Bee see:
https://github.com/automvc/bee
bee-ext:
https://github.com/automvc/bee-ext

中文介绍

点击链接可查看中文介绍

Requirement

jdk1.7+

Feature & Function:

Support many Database(MySQL,MariaDB,Oracle,H2,SQLite,PostgreSQL,SQL Server,Cassandra and so on) and easily extend.
Good performance, close to the speed of JDBC; Small files:Bee V1.8 jar 217k, V1.9.5 jar,315k, V1.9.8 jar 310k.
In addition to JDBC, Android and HarmonyOS are also supported.

  • 1.The interface is simple and easy to use, Suid (select,update,insert,delete) object-oriented operation.
  • 2.All Suid(select,update,insert,delete) operation use the same Bee interface,no longer need new dao interface.
  • 3.Convention-over-configuration:Javabean can no annotation,no xml.
  • 4.Automatic filter the null and empty field for default.
  • 5.Select some fields easily.
  • 6.Dynamic & random combination of query conditions,no need to prepare the interface in advance; new query requirements, no need to change the query interface.
  • 7.Native SQL sort support,native paging support(do not need select all records before).
  • 8.Support return the JSON format query results directly; Chain programming.
  • 9.Support:transaction ,same connection,for update,batch insert,procedure.
  • 10.more tables select oriented object support(has not the n+1 problem,one to one,one to many,many to one,many to many).sub-field type support Javabean or List.
  • 11.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.
  • 12.Support java_db naming translation and support customize,default implement.
  • 13.Many DB supports easy extension(MySQL,MariaDB,Oracle,H2,SQLite,PostgreSQL,SQL Server,Cassandra,etc. are directly available),In theory, can support all DB which support JDBC.
  • 14.Add multi-DataSource support(Write/Read, only Split Database);support Jndi DataSource.
  • 15.Support use many type database at the same time(eg: use Mysql,Oracle,SQL Server at the same).
  • 16.Support distributed primary key(global unique id,Serial distributed unique id in one workid).
  • 17.The same database sub table support, dynamic table name mapping support.
  • 18.Support interceptor、multi-tenant,convert PreparedStatement parameter,custom TypeHandler and process the ResultSet.
  • 19.Suid,SuidRich,PreparedSql,MapSuid,MoreTable support set the dataSource name.
  • 20.MapSuid:opertate(suid) the database no need Javabean.
  • 21.No third-party plug-in dependency; It can be used in zero configuration.
  • 22.Good performance, close to the speed of JDBC; Small files:Bee V1.8 jar 217k, V1.9.5 jar,315k, V1.9.8 jar 310k.
    Assist function:
  • 23.Automatically generate the Javabean via DB table or view.Automatically create table via the Javabean,JavaWeb back-end code;Can print non placeholder executable SQL statements to facilitate debugging; support generate JSON format SQL scripts.
  • 24.Support reading excel and importing data from Excel to DB easily.
  • 25.Stream tool class streamutil.
  • 26.The front and back ends of complex queries can be automatically parsed.
  • 27.Annotation support:PrimaryKey,Column,Datetime,Createtime,Updatetime;JustFetch,ReplaceInto(MySQL).
  • 28.Extensible annotation: multi tenant, fuzzy processing of sensitive information, automatic setting of field values, dictionary conversion, dicti18n multilingual International Dictionary conversion.
  • 29.can automatically generate entity_F for referenced to the entity field name.

Newest Function

V1.17(2022·Mid-Autumn Day)

V1.17.0.10
fixed bug: 1)prototype InterceptorChain
2)if Android SQLiteDatabase instance is not open,get a new one

V1.17.0.9(Good,Better·Seventh Evening)
1)Transaction annotation @tran, which can be used at the class level
2)the ref field class {Entity}_F,add ALL_NAMES field,can get the field list of the Entity
3)Ddl.java support create index(normal,unique),combine Primary key
4)auto get JdbcToJavaType
5)bee.osql.naming.translateType add type 4(DbUpperAndJavaLower):Db Upper And Java Lower,ignore case,the name is same.
6)When multiple DB naming are used, the translatetype part is added to the cache
7)@Ignore(@Transient) compatible with JPA(interface AnnoAdapter)
8)condition.op(fieldName, Op.in, Value) add support List,Set,Number Array,one Number element
9)condition.opOn(fieldName, Op.in, Value) Value can just use Number and String
10)Enhance:like;Op add likeLeft,likeRight,likeLeftRight(the value of the parameter will be escaped by the framework)
11)Enhance:dynamic calculation of the number of ExcelReader data columns
12)Enhance: SQLite date type transfer support
13)Enhance:GenBean generate Javabean,when id type is BigDecimal,will be set to Long
14)fixed bug:level 2 cache;TypeHandlerRegistry return value

V1.17.0.8
1)Primary key support the field is not "id",except the Long, the type can be Integer or String
2)Support the automatic generation of the primary key by annotation(GenId,GenUUID)
3)@Column support default implement(Strongly recommend: do not use this Annotation in new system)
4)@Table,@Column,@PrimaryKey(@Id) compatible with JPA(interface AnnoAdapter)
5)Distributed id generator supports setting the starting year:bee.distribution.genid.startYear
6)Chain programming SelectImpl,UpdateImpl adjust check rule for field

V1.17.0.7
1)add support HarmonyOS ORM function
2)In HarmonyOS and Android environment can use the same ORM code with Bee
3)support HarmonyOS Log:ohos.hiviewdfx.HiLog

V1.17.0.6
1)add support Android ORM function,you can use Bee for SQLite DB in Android environment.
2)support android.util.Log
3)Ddl: optimize process if the table is exist
4)add log tip the dsName(dataSource name) when multi-dataSource
5)when paging , the size is 0, return emptyList

V1.17.0.5
1)Sql Server support (start,size) paging
2)@Tran transaction annotation

V1.11(International Labour Day)
Detail:
V1.11.0.1.1(2022 New Year)
SuidRich add method:
public long insertAndReturnId(T entity,IncludeType includeType);
PreparedSql add method:
public List select(String sql,T returnType);
add annotation PrimaryKey
MapSqlKey support PrimaryKey
BF is shortcut for BeeFactoryHelper
Enhance:config info add trim() about multi-DataSource Write/Read
fix a bug for naming transfer

V1.11.0.2.1(2022 Spring Festival)
add function: Interceptor、multi-tenant
add Interceptor,InterceptorChain
add DefaultInterceptor,CommInterceptorChain,DefaultInterceptorChain

V1.11.0.2.4(2022 Beijing Winter Olympics)
level tow ext cache support
Redis cache support
add BeeExtCache,DefaultBeeExtCache
add BeeExtRedisCache

V1.11.0.2.15(2022 the Lantern Festival)
add annotation:Datetime,Createtime,Updatetime;JustFetch
add support Jndi DataSource
check MapSqlKey value

V1.11.0.2.20(Honor)
Optimize use different Database Type at same time(multi-Ds)
Support use differnt type Database at the same time(eg:use Mysql,Oracle,SQL Server at same time)
PreparedSql,MapSuid support Interceptor
Suid,PreparedSql,MapSuid support get DataSource,get InterceptorChain
Suid,PreparedSql,MapSuid,MoreTable add method:setDataSourceName,getDataSourceName,getInterceptorChain
add Annotation:
AnnotationHandler,AutoSetString
Desensitize
ReplaceInto,MySQL replace into
MultiTenancy
BeforeReturnAnnotationHandler,AbstractDictI18nDefaultHandler
Dict
DictI18n

V1.11.0.2.28 (Special Day)
add ShardingStruct prepare for sharding.
add Column annotation support to extend mapping column and Javabean field name.
support custom TypeHandler,and process the ResultSet.
PreparedSql custom sql support more table select,and return more table struct Javabean.
fixed bug:
More table self association query of the same entity forbid multi-self-cycles

V1.11.0.3.8 (Lady First)
add SetParaTypeConvert for convert PreparedStatement parameter.
Javabean use java.util.Date type for SUID compatibility processing.
SQLite get the timestamp result for conversion.
The Json field of DB is automatically converted to the attribute marked with Json annotation of Javabean(Javabean structure corresponding to Json).

V1.11.0.3.12 (Tree Planting Day)
Ddl.java uses Javabean to create tables, supports the mapping between Java and DB field types, and supports the setting java_dbtype mapping.
Ddl.java is compatible with raw char type and java.util.Date.
PreparedSql support batch insert.
Support Suid instance set NameTranslate.
Add DbFeature Registry,it is easy for setting custom database dialect.
Support Cassandra.

V1.11.0.3.20 (Spring Equinox)
add Custom dynamic SQL token,@in,@toIsNULL1,@toIsNULL2,<if isNotNull>,<if isNotBlank>.
dynamic SQL list transfer list to SQL in eg:in (1,2,3),no need foreach;batch insert also no need foreach.
Separate CN and EN API.

V1.11.0.4.22 (The World Earth Day)
Add registry interface; Add nameregistry.
Change serializer throws exceptions type.
Mapsuid and mapsql support parsing string to boolean type.
Genbean, which does not support JDBC type, reminds you which file to set;
Genbean support config where override the old file;
Genbean support gen javabean's field file;
SuidRich's method selectString support variable-length arguments:
public List<String[]> selectString(T entity,String... selectFields);
CommInterceptorChain check whether add same class. SystemLogger supports setting log level to facilitate development and debugging.
The logger add method: public static void debug (string MSG, throwable T) (convenient for development and debugging).
Nocache add log prompt.
Improve cache security.
Add preload SPI interface Preload.
Add InterceptorChainRegistry, an interceptor registrar for global use.
Add configuration item:
pagingWithLimitOffset
notCatchModifyDuplicateException
notShowModifyDuplicateException
fixed bug for type converter.
fixed bug about @PrimaryKey in Suid update(entity).

V1.11.0.4.29
The configuration file supports multi-environment differentiated configuration.
SuidRich,public int update(T oldEntity, T newEntity) Interceptors only handle newEntity.

Function Detail

click for: Function Detail

ORM Compare

Compare in JDBC

ORM-Compare (More Detail)

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

Bee application in App Compare

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

Quick Start:

1. Add Bee

1.1 if it is a maven project,add the following dependency

		<dependency>
			<groupId>org.teasoft</groupId>
			<artifactId>bee</artifactId>
			<version>1.17</version>
		</dependency>
		<dependency>
			<groupId>org.teasoft</groupId>
			<artifactId>honey</artifactId>
			<version>1.17</version>
		</dependency>
		<!--for log framework,Excel(poi),Redis cache,Android,HarmonyOS,Json,Tran Annotation -->
		<dependency>
			<groupId>org.teasoft</groupId>
			<artifactId>bee-ext</artifactId>
			<version>1.17</version>
		</dependency>

1.2 Of course, can download the jar file directly

2. Create the database and the table

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).

3. Update the database configuration in bee.properties if need

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 =

4. The Javabean Orders reference as below:

Orders(Javabean)
Auto Genernate Javabean

5. Run the following java code

		
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());
			}

			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.	

Quick Start : Bee + Harmony

Quick Start : Bee + Android

Use Bee in Android Environment

1.bee.properties

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

2.implement tables that need to be created and updated when app installation and upgrade

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);
		}
	}
}

3.Register YourAppCreateAndUpgrade and Android context to Bee

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"
       >

4.Java operation SQLite database is similar to JavaWeb

Suid suid=BF.getSuid();
List<Orders> list = suid.select(new Orders()); 

5.Bee application in App Compare

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

More example/test case

Bee+Spring-boot Demo

Bee Architecture

V1.17

Bee Common Interface

Rapid application development:

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

KmCoding

Rapid Application Code Generation Platform--AiTea Soft made in China!

...

App Demo:

HarmonyOS application Demo with ORM Bee:

Bee + HarmonyOS

Bee + Android

Other Document:

API-DOC

API-V1.17(Newest) SourceCode contain bee-1.17 CN & EN API,bee-1.17 CN SourceCode

wiki Document

CSDN: ORM Bee Document

Enterprise Edition:

In order to provide more and more powerful functions, Bee team cooperates with the enterprise to launch the Enterprise Version.

New Features

We hope to provide more easy-to-use Bee functions to further improve the efficiency of development!

  • 1.Reduce the difficulty of development financial computing projects, simplify financial digital calculation, etc
  • 2.@AutoSetString annotation ease of use improvement, easy to handle automatic filling functions such as CreateBy,UpdateBy
    Automatically insert values for tenants
  • 3.@Desensitize, change some sensitive information to mask characters
  • 4.@Dict specific field dictionary value conversion
  • 5.@DictI18n multilingual International Dictionary conversion, global unified setting, no need to set one by one, saving time and effort
  • 6.@MultiTenancy multi-tenant
  • 7.@Column when Javabean attribute is inconsistent with the table column name, define the mapping relationship (not recommended for new system, mainly for compatibility with old system)
  • 8.@Json Entity properties are Javabean and the JSON type column of DB table are converted automatically during parameter setting and query results
  • 9.Support the automatic generation of EDI XML electronic message

Price

Enterprise users:
USD 199.00
Personal users:
USD 49.00

Expiration Dates

Permanent use after purchase,Get upgrades for free

Technical Support

The use of Enterprise Edition, professional technical support and solution consultation are provided by the following companies:
Shenzhen Caifeng software
(Enterprises willing to join in, please contact us!)

Discount(2022)

Before June: 40% discount
Before July: 30% discount
Before August: 20% discount
Before October: 10% discount

Contact & Welcome:

Author's email: honeysoft@126.com

If you have any problem on bee, please let me know kindly! Thank you, so much!

ORM QQ Group: 992650213 WeChat:AiTeaSoft

At the same time, welcome you to join Bee team create a better future.

About

Bee,互联网新时代的Java ORM框架,支持Sharding;JDBC,Android,HarmonyOS;更快、更简单、更自动,开发速度快,运行快,更智能! expand collapse
Cancel

bee

Contributors

All

Activities

Load More
can not load any more
Java
1
https://git.oschina.net/automvc/bee.git
git@git.oschina.net:automvc/bee.git
automvc
bee
bee
master

Search