博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis大数据提交和更新,数据SQL语句批量提交数据库
阅读量:6846 次
发布时间:2019-06-26

本文共 4071 字,大约阅读时间需要 13 分钟。

我们在做数据插入和数据更新的时候,业务产生的日志数据有好几万百万,那么正常的插入语句已性能弱,mybatis提供了实现大数据插入数据表的方法,下面我们就来实现一个例子。

1.引入mybatis的依赖jar

org.mybatis.spring.boot
mybatis-spring-boot-starter
2.0.1

2.配置mybatis

mybatis:  typeAliasesPackage: com.xdd.entity  mapperLocations: classpath:mapper/*.xml,classpath*:com/cloud/dataplatformbronto/dao/*Mapper.xml

 

3.创建 BrontoDataDao

import org.apache.ibatis.annotations.*;import java.util.List;@Mapperpublic interface BrontoDataDao {int insertBatchUserChannelInfo(List
list);int batchUpdate(Map
map);}

 

4.创建BrontoDataMapper.xml

INSERT INTO dp_bronto_channel_active (customer_id,channel_name,active_status,channel_type,area_info) values
( #{item.customerId}, #{item.channelName}, #{item.activeStatus}, #{item.channelType}, #{item.areaInfo} )
update t_customer set c_name = #{cus.name}, c_age = #{cus.age}, c_sex = #{cus.sex}, c_ceroNo = #{cus.ceroNo}, c_ceroType = #{cus.ceroType} where id = #{cus.id}

 

5.编写业务方法

@Service("brontoDataService")@Transactionalpublic class BrontoDataServiceImp implements IBrontoDataService{    private static final int BATCH_SIZE = 5000;    private Logger logger = LoggerFactory.getLogger(this.getClass());    @Autowired    private BrontoDataDao brontoDataDao;    @Autowired    SqlSessionFactory sqlSessionFactory;
/**     * 用户渠道信息大批量数据插入     *@param: [brontoDeviceModelList]     **/    @Transactional    public void saveUserChannelInfo(List
brontoDeviceModelList) { int groupNo = brontoDeviceModelList.size() / BATCH_SIZE; SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); BrontoDataDao mapper = sqlSession.getMapper(BrontoDataDao.class); if (brontoDeviceModelList.size() <= BATCH_SIZE) { mapper.insertBatchUserChannelInfo(brontoDeviceModelList); } else { List
subList = null; for (int i = 0; i < groupNo; i++) { subList = brontoDeviceModelList.subList(0, BATCH_SIZE); mapper.insertBatchUserChannelInfo(subList); brontoDeviceModelList.subList(0, BATCH_SIZE).clear(); } if (brontoDeviceModelList.size() > 0) { mapper.insertBatchUserChannelInfo(brontoDeviceModelList); } } sqlSession.flushStatements(); }}

需要测试功能再写一个测试类或测试接口来测试!

附录XML CDATA(Mybatis mapper and XML)

Tip:must be followed by either attribute specifications, ">" or "/>".

所有 XML 文档中的文本均会被解析器解析。

只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。

PCDATA

PCDATA 指的是被解析的字符数据(Parsed Character Data)。

XML 解析器通常会解析 XML 文档中所有的文本。

当某个 XML 元素被解析时,其标签之间的文本也会被解析:

此文本也会被解析

解析器之所以这么做是因为 XML 元素可包含其他元素,就像这个例子中,其中的 <name> 元素包含着另外的两个元素(first 和 last):

Bill
Gates

而解析器会把它分解为像这样的子元素:

Bill
Gates

转义字符

非法的 XML 字符必须被替换为实体引用(entity reference)。

假如您在 XML 文档中放置了一个类似 "<" 字符,那么这个文档会产生一个错误,这是因为解析器会把它解释为新元素的开始。因此你不能这样写:

if salary < 1000 then

为了避免此类错误,需要把字符 "<" 替换为实体引用,就像这样:

if salary < 1000 then

在 XML 中有 5 个预定义的实体引用:

&lt; < 小于
&gt; > 大于
&amp; & 和号
&apos; ' 省略号
&quot; " 引号

注释:严格地讲,在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。

CDATA

术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。

在 XML 元素中,"<" 和 "&" 是非法的。

"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。

"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。

某些文本,比如 JavaScript 代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。

CDATA 部分中的所有内容都会被解析器忽略。

CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:

在上面的例子中,解析器会忽略 CDATA 部分中的所有内容。

关于 CDATA 部分的注释:

CDATA 部分不能包含字符串 "]]>"。也不允许嵌套的 CDATA 部分。

标记 CDATA 部分结尾的 "]]>" 不能包含空格或折行。

 附录部分摘自:

转载于:https://www.cnblogs.com/zengsong-restService/p/3398965.html

你可能感兴趣的文章
HDU1892 See you~
查看>>
【ADT】链表的基本C语言实现
查看>>
缓存策略
查看>>
5.管理控制文件和日志文件
查看>>
爬取大半导体网新闻内容保存到word(基于python3.6)
查看>>
2019年1月4日
查看>>
【阅读笔记】Prostate Cancer Diagnosis using Deep Learning with 3D Multiparametric MRI
查看>>
解读《德勤2017年全球CIO报告》:顶级CIO的炼成之道
查看>>
A Tour of Go Nil slices
查看>>
第29条:理解引用计数
查看>>
boost asio中io_service类的几种使用
查看>>
[Java]HashMap的两种排序方式
查看>>
slice、splice、concat操作后数组的变化
查看>>
DEDE栏目内容调用
查看>>
icheck.js的一个简单demo
查看>>
mysql语句记录
查看>>
消息中间件rabbitmq(3)
查看>>
CSS :hover伪类选择定义和用法
查看>>
php文件删除unlink()详解
查看>>
(Access denied for user 'root'@'localhost' (using password: NO))
查看>>