76 Star 435 Fork 86

automvc / bee

Create your Gitee Account
Explore and code with more than 6 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.
Good Feature: AI, Timesaving/Tasteful, Easy, Automatic (AiTeaSoft Style)
Bee see:
https://github.com/automvc/bee
or:
https://gitee.com/automvc/bee

中文介绍

点击链接可查看中文介绍

Requirement

jdk1.7+

Feature & Function:

Support many Database(MySQL,MariaDB,Oracle,H2,SQLite,PostgreSQL,SQL Server 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.0
Single entity(table) Suid (select,update,insert,delete) object-oriented operation.
Automatically generate the Javabean via DB table or view.
Convention-over-configuration:Javabean no annotation,no xml.
Automatically mapping the table column and the Javabean field.
Javabean support the raw type:int,double,and so on.
PreparedStatement support.
Procedure support.
Native SQL support.
Batch operate support.
Transaction support.
Automatic filter the null and empty field for default.
MAX,MIN,SUM,AVG,COUNT support.
Order by,Paging.
Select some field.
Dynamic & random combination of query conditions,no need to prepare the interface in advance; new query requirements, no need to change the query interface.
All Suid(select,update,insert,delete) operation use the same Bee interface,no longer need any new dao interface.
Users/Developer only need to pay attention to the Bee interface.

......

V1.8
Add Distributed Feature:
1.Add multi-DataSource support(Write/Read, only Split Database).
add multi-DataSource no need change the Java code.
add the route interface of multi-Datasource.
add multi-DataSource route.
add multi-DataSource config.
support refresh multi-DataSource config information.
2.Generate global unique id number in distributed environment.
3.Generate Serial Unique id number in one workid of distributed environment.
Independent clock,workerid can config and easily expand.
Implement algorithms:SerialUniqueId,OneTimeSnowflakeId,PearFlowerId.
Support GenId Factory,and can config the id generator.
4.Gen Serial Unique Id for all Table's Long Id field as primary key.
Enhance Function:
5.The same database sub table support, dynamic table name mapping support.
Entity and any table name mapping support.
Suid add one method: public Suid setDynamicParameter(String para,String value);
add 2 annotation:@Table,@Entity.
6.Use 'for update' lock some select record(s).
public Condition forUpdate()
7.Added support for advanced update set,
Complex query and multi table query support only project some fields.
Add 5 methods in Condition
8.Support show type of data in sql and show ExecutableSql:
bee.osql.showSQL.showType=false
bee.osql.showSQL.showExecutableSql=false
9.Add one method in SuidRich
Add three methods in PreparedSql
10.Oracle DATE column mapping to Timestamp,fix the problem:miss the hour,minute,second in Oracle DATE column.
11.GenFiles support upper case first letter,eg: #{entityName?up1}.
Fix bug:
12.fixed cache bug:genkey;clear cache for batch insert.
fixed bug:parse the json has extra comma. fixed null bug about:PreparedSql's method select(String sql,Object preValues[]).

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.9
SuidRich add new methods support list parameter in batch insert.
enhance SuidRich function, SuidRich add method:
public List<String[]> 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);
public boolean exist(T entity); //check the record whether exist in table
SuidRich adjust methods selectById for unique entity and intelligently judge the Javabean id type of string id parameter.
Suid add method insertAndReturnId.
enhance aggregate function cont,sum,avg,min,max,Condition add method:
public Condition selectFun(FunctionType functionType,String fieldForFun);
public Condition selectFun(FunctionType functionType,String fieldForFun,String alias);
Condition add method:opWithField,setWithField support like :field1=field2
Condition add method:selectDistinctField,support distinct as select distinct(userid) from table_name
MapSuid,no need Javabean, use map to set the entity information that needs to be transformed and operate the database(select/insert/delete record).
support read Excel(.xls,.xlsx), converting data into List<String[]> and importing them into database(bee-ext).
more table join select support more join condition.
same Connection for some ORM operation.
support different type muli-Ds at same time.
IncludeType support exclude " ".
add Ignore Annotation, ignore the field which do not want to transfer.
support define start and end token when generate file by template.
enhance DB conn management.
enhance code quality(The test coverage is more than 70%, and the key code is more than 90%).
enhance chain coding:Select,Update.
adjust config information of bee.properties,HoneyConfig.
Bee integration with Spring Boot,provide bee-spring-boot-starter.
support use Javabean create the DB table.
fix the problem that the fields with the same name will be confused in some databases(oracle) when multi table paging query.
fixed: update is default by id,but no id field or id is null,will have exception.
fixed: cache bug.
fixed: about getRangeId(int sizeOfIds) of GenId.
fixed: in jdk 11,LoggerFactory use log4j2,have exception.
when entity is view(not table), recommend put in bee.osql.cache.never(bee.properties).

V1.9.8(2021 Mid-Autumn Day)
SuidRich add 4 method:
public int save(T entity);
public int update(T oldEntity,T newEntity);
public String selectJson(T entity, String selectField);
public String selectJson(T entity, String selectField, int start, int size);

MoreTable(more table select):
support List type field for more tables join;
support two sub tables join(inner join,right join, left join);
support one sub table have another join sub table;
if all fields is null, the sub table field will set null;
annotation JoinTable add method:subClass() for List type field
Condition add method:
public Condition opOn(String field, Op Op, Object value);

MapSuid:
add method update,count,paging select, add and adjust insert and insertAndReturnId.
add method putNew(String fieldName, Object newValue),putNew(Map map),put(Map map),support page in MapSql.
add method count(MapSql mapSql),update(MapSql mapSql),insertAndReturnId(MapSql mapSql),support page in MapSuid.
add method putNew(String fieldName, Object newValue),putNew(Map map),put(Map map),support page in MapSqlImpl.
add method toUpdateSqlByMap ,toCountSqlByMap ,support page in MapSqlProcessor.
add method count(MapSql mapSql),update(MapSql mapSql),support page in MapSuidImpl.
MapSuidImpl change two different method:insert(MapSql mapSql) & insertAndReturnId(MapSql mapSql)

PreparedSqlLib support selectMapList method.
Read/Write multi-DataSource support different type DataSource.
Logger: two method support have parameter Throwable.
sql log support config the log level.
add class StreamUtil
ObjectUtils add one method: isTrue(Boolean b)
enhance check field
use LinkedHashMap in List<Map> result for selectMapList(String sql).
Condition support condition.set("fieldName", null).
selectJson support config long to string
enhance autoGenBean ,support to generate SQL Json Script.
Add general search function support (simplify back-end complex query programming).

fix bug for ExecutableSql.
transfer the the field of 'order by'.
fix null bug in create() of ObjectCreatorFactory.
fix bug for max column number(excel in bee-ext). fix bug about HoneyContext
fix bug about checkPackageByClass
fix bug about multi-thread safe in ConditionHelper.

Function Detail

click for: Function Detail

ORM Compare

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

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.9.5</version>
		</dependency>
		<dependency>
			<groupId>org.teasoft</groupId>
			<artifactId>honey</artifactId>
			<version>1.9.5</version>
		</dependency>
		<!--for log framework,Excel(poi) -->
		<dependency>
			<groupId>org.teasoft</groupId>
			<artifactId>bee-ext</artifactId>
			<version>1.9.5</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.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.	

More example/test case

Bee+Spring-boot Demo

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

...

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.

Repository Comments ( 116 )

Sign in for post a comment

About

互联网新时代的Java ORM工具,简单、高效,开发速度快! expand collapse
Java
Apache-2.0
Cancel

bee

Contributors

All

Activities

load more
can not load any more
Java
1
https://gitee.com/automvc/bee.git
git@gitee.com:automvc/bee.git
automvc
bee
bee
master

Search

181749 a2d7925e 1850385 181749 9f8568a7 1850385