数据库查询应用1.8版的SQLServer,在SpringBoot自然环境下运作。

不断实行一条插入语句xml拼凑sql批处理命令实行

先说结果:小量插进请反复插进一条数据信息,便捷。针对大批,请应用批量处理。(您能够考虑到大概20条所需的插进数据信息做为界限。在我的检测和数据库查询环境中,時间耗费大概是100ms,便捷是最重要的)。

任何时刻都不必应用xml来拼凑sql。

登陆密码

用以拼凑SQL的Xml。

NewId()是sqlserver转化成UUID的涵数,与文中內容不相干。

INSERTINTOtb_itemVALUES(newId(),#{item.uniqueCode},#{item.projectId},#{item.name},#{item.type},#{item.packageUnique},#{item.isPackage},#{item.factoryId},#{item.projectName},#{item.spec},#{item.length},#{item.weight},#{item.material},#{item.setupPosition},#{item.areaPosition},#{item.bottomHeight},#{item.topHeight},#{item.serialNumber},#{item.createTime}Mapper插口Mapper是mybatis软件tk.Mapper的插口,与文中內容关联不大publicinterfaceItemMapperextendsMapper{intinsertByBatch(ListitemList);}

服务项目等级

@ServicepublicclassItemService{@AutowiredprivateItemMapperitemMapper;@AutowiredprivateSqlSessionFactorysqlSessionFactory;//批处理命令@Transactionalpublicvoidadd(ListitemList){SqlSessionsession=sqlSessionFactory.openSession(ExecutorType.BATCH,false);ItemMappermapper=session.getMapper(ItemMapper.class);for(inti=0;iitemList){itemList.insertByBatch(itemMapper::insertSelective);}//循环系统插进@Transactionalpublicvoidadd2(ListitemList){itemList.forEach(itemMapper::insertSelective);}}

检测类

@RunWith(SpringRunner.class)@SpringBootTest(webEnvironment=SpringBootTest.WebEnvironment.RANDOM_PORT,classes=ApplicationBoot.class)publicclassItemServiceTest{@AutowiredItemServiceitemService;privateListitemList=newArrayList();//转化成检测List@BeforepublicvoIDCreateList(){Stringjson="{n" ""areaPosition":"TEST",n" ""bottomHeight":5,n" ""factoryId":"0",n" ""length":233.233,n" ""material":"Q345B",n" ""name":"TEST",n" ""package":false,n" ""packageUnique":"45f8a0ba0bf048839df85f32ebe5bb81",n" ""projectId":"094b5eb5e0384bb1aaa822880a428b6d",n" ""projectName":"新项目_TEST1",n" ""serialNumber":"1/2",n" ""setupPosition":"1B柱",n" ""spec":"200X200X200",n" ""topHeight":10,n" ""type":"Steel",n" ""uniqueCode":"12344312",n" ""weight":100n" "}";Itemtest1=JSON.parseObject(json,Item.class);test1.setCreateTime(newDate());for(inti=0;i

检测結果:

25条数据信息中的10条的插进通过数次检测,主要表现出挺大的起伏,但基本上处在100ms的水准。

mybatis批量insert数据动态表明-mysql批量insert正确方式-第1张图片在其中,在插进500条和1000条sql时,汇报了一个不正确(好像是sql语句过长,与数据库类型相关,沒有通过别的数据库查询的检测):com . Microsoft . SQL server . JDBC . SQL server exception:传到的表文件格式数据流分析(TDS)远程控制全过程启用(RPC)协议书流有误,此RPC要求中给予的因素过多,较多应该是2100个。

能够寻找。

循环系统插进的算法复杂度是 O(n),而且参量C非常大拼凑SQL插进的算法复杂度(应当)是 O(logn),可是取得成功进行频次很少,不确定性批处理命令的高效率的算法复杂度是 O(logn),而且参量C也较为小

结果

尽管在循环过程中插进单独数据信息的高效率极低,但编码量却很小。应用tk的软件时。映射器,只必须编码。

@Transactionalpublicvoidadd1(ListitemList){itemList.forEach(itemMapper::insertSelective);}

因而,若想插进的信息量很钟头,务必应用它。

Xml拼凑sql是最不强烈推荐的方式,它要撰写很多的xml和sql语句,非常容易错误,高效率不高。更主要的是,尽管高效率能够接纳,可是如果你真真正正必须高效率的情况下,你失败了。你喜欢什么?

大批量实行是插进很多数据信息时强烈推荐的方式,应用的时候也很便捷。

评论(0条)

刀客源码 游客评论