Bee的批量插入与事务使用

 * Bee 在2.2之前,调用批量插入在每个批都会提交commit,但在2.2改为只调用一次且在事务中,在批量插入的方法内容不再提交,而由事务控制.  
 * 
 * 2.2之前,批量插入使用每一个批次提交一次事务;
 * 这样,当违反主键约束等就忽略的大批量插入效率是很高的;
 * 但当事务中有批量插入时,不了解内部执行规则可能会对业务的正确性造成影响.
 * 所在Bee在2.2时,默认是所有批次的插入操作只提交一次,如插入100条,每批20条,2.2之前是提交了五次commit,在2.2时改为一次commit;
 * 若想在大批量插入时忽略违反约束的失败操作,使用回2.2之前的模式,可以使用配置:bee.osql.eachBatchCommit=true
 * 
 * 在2.2之前,可以将insertBatchSize设置得足够大,将所有记录在一个批次完成,即不会造成多个批次;这样,在事务中,就不会因事务分多批造成事务不准确;
 * 但因2.2之前在批处理时,会调用conn.commit();提交了事务,所以用业务逻辑调用rollback()是无效的.
 * 2.2时,使用事务时,在批处理内部不会再调用conn.commit().

package org.teasoft.exam.bee.osql.tran;

import java.util.ArrayList;
import java.util.List;

import org.teasoft.bee.osql.BeeException;
import org.teasoft.bee.osql.api.SuidRich;
import org.teasoft.bee.osql.transaction.Transaction;
import org.teasoft.honey.osql.core.HoneyConfig;
import org.teasoft.honey.osql.core.Logger;
import org.teasoft.honey.osql.core.SessionFactory;
import org.teasoft.honey.osql.shortcut.BF;

//不捕获异常+批处理
public class TranTest2 {

	public static void main(String[] args) {
		
		HoneyConfig.getHoneyConfig().notCatchModifyDuplicateException=true;

		Transaction transaction = SessionFactory.getTransaction();
		SuidRich suidRich = BF.getSuidRich();
		
		try {

			transaction.begin();
			
			Org org1=new Org();
			org1.setOrgName("aaa");
			
			Org org2=new Org();
			org2.setOrgName("bbb");
			
			Org org3=new Org();
			org3.setOrgName("aa0"); //这个会重复,检查aaa,bbb是否能插入
			
			List list=new ArrayList<>();
			list.add(org1);
			list.add(org2);
			list.add(org3);
			
			int a=suidRich.insert(list, 2);  //分多批执行时,前面的批在内部会先提交
//			int a=suidRich.insert(list, 100); // 确保放在一批,可以避免每个批提交一次; 2.2之前,批量插入在方法内还是会提交;
			System.out.println("------------------: "+a);
			if(a!=list.size()) {
				System.out.println("业务规则触发事务回滚");
				transaction.rollback();
			}else {
			   transaction.commit();
			}
			//批量插入时,一批就会有一个commint;
			
		} catch (BeeException e) {
			Logger.error("In TransactionExam (BeeException):" + e.getMessage());
			transaction.rollback();
			e.printStackTrace();
		} catch (Exception e) {
			Logger.error("In TransactionExam (Exception):" + e.getMessage());
			transaction.rollback();
			e.printStackTrace();
		}

	}

}

通过实体创建表和约束

public static void main(String[] args) {
        Ddl.createTable(Org.class,true); //创建表,并覆盖
        Ddl.unique(Org.class, "orgName"); //创建唯一约束
    }

Bee的批量插入与事务使用_第1张图片

Java ORM 工具Bee,一个简单易用又功能强大的ORM;

天下大势,分久必合!
Hibernate/MyBatis+ plus +Sharding JDBC + Jpa+ Spring data+ GraphQL+ App ORM (Android, 鸿蒙)= Bee

Spring Cloud 微服务使用数据库更方便:Bee + Spring Boot; 轻松支持多数据源,Sharding, Mongodb.

要整合一堆的工具,还不如只用一个小巧又功能强大的工具。

https://gitee.com/automvc/bee

bee: Bee,互联网新时代的Java ORM框架,支持Sharding;JDBC,Android,HarmonyOS;支持多种关系型数据库,还支持NoSQL的Cassandra,Mongodb等;更快、更简单、更自动,开发速度快,运行快,更智能!

你可能感兴趣的:(DB,ORM,Bee,java,事务,ORM)