当前位置: 首页 > news >正文

廉江手机网站建设百度数据

廉江手机网站建设,百度数据,帝国cms做网站,网站策划报告书怎么做我们知道处理数据有三种思路&#xff1a;依次、批量、分页&#xff0c;对应方法如下 依次处理&#xff1a;在 Java 里面写 for 循环&#xff0c;依次使用 SQL 语句&#xff0c;频繁连接断开数据库批量处理&#xff1a;在 MyBatis 里面用 <foreach> 拼接成一条长 SQL 语句…

我们知道处理数据有三种思路:依次、批量、分页,对应方法如下

  • 依次处理:在 Java 里面写 for 循环,依次使用 SQL 语句,频繁连接断开数据库
  • 批量处理:在 MyBatis 里面用 <foreach> 拼接成一条长 SQL 语句,仅连接断开一次数据库
  • 分页处理:上面两种方案进行折中,每次将一部分批量写入

注意,若用 <foreach>; 分隔多条 SQL 语句发给数据库(需要在配置里添加 allowMultiQueries=true),这种处理虽然也可以算是某种程度上的“批量”,但其 SQL 语句并未在同一次提交中,因而本质上和依次处理没区别

选取哪种方法取决于你的数据量(记录数 × 字段数,也就是行数 × 列数)大小

  • 当有一定的数据量后(千量级),依次处理非常慢,最好使用批量处理

  • 而数据量过于庞大时(十万量级)如果还采取 <foreach> 进行批量处理,整个过程十分耗时,它处理时间和数据量的关系就像是倒过来的抛物线,如下图所示

  • 通常需要进行折中,使用分页处理,根据笔者自己经验而言,将每次的数据量定在 12000 左右效果较好,不过这个具体要视情况而定

image-20230216101119466

💬相关

博客文章《mybatis之foreach用法》

https://www.cnblogs.com/fnlingnzb-learner/p/10566452.html

博客文章《MyBatis批量插入几千条数据,请慎用foreach》

https://blog.csdn.net/SharingOfficer/article/details/121431154

以下给出一个示例场景

  • 建立数据表 data_table,含有字段 idfield1field2
  • 建立 Java 类 Data,含有属性 idattr1attr2
  • 将 Java 对象或含有对象的列表作为参数,将对应的数据在数据库增删改查

下面给出依次操作和批量操作的 MyBatis 实现,而分页操作在 MyBatis 的实现和批量操作是一样的,不一样的地方在 Java 代码中

数据库配置

配置文件 application.properties 常见配置

  • serverTimezone:时区,如亚洲/上海时区 Asia/Shanghai
  • useUnicodecharacterEncoding :编码方式,如 trueutf8
  • allowMultiQueries :是否支持”;"号分隔的多条 SQL 语句的执行,如 true
  • autoReconnect :是否超时重连(当一个连接的空闲时间超过 8 小时后,MySQL就会断开该连接),如 true
  • useSSL:是否使用 SSL,如 true
spring.datasource.url=jdbc:mysql://<域名或IP地址>:<端口号>/<数据库名>?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai

查询数据

对应 SQL 的 SELECT 语句

<select id="selectData" parameterType="String" resultType="Data">SELECT * FROM `data_table`WHERE `id` = #{id}
</select><select id="batchSelectData" resultType="Data">SELECT * FROM `data_table`WHERE `id` IN<foreach collection="list" item="item" open="(" close=")" separator=",">#{item}</foreach>
</select>

对应生成的 SQL 语句

SELECT * FROM `data_table`
WHERE `id` = ?
SELECT * FROM `data_table`
WHERE `id` IN (?,?,?)

插入数据

对应 SQL 的 INSERT INTO 语句

注意,若设置了主键,且表中存在相同主键的数据,则无法插入

    <insert id="insertData" parameterType="Data">INSERT INTO `data_table`(`id`,`field1`,`field2`)VALUES (#{id},#{attr1},#{attr2})</insert><insert id="batchInsertData" parameterType="java.util.List">INSERT INTO `data_table`(`id`,`field1`,`field2`)VALUES<foreach collection="list" item="item" index="index" separator="," >(#{item.id},#{item.attr1},#{item.attr2})</foreach></insert>

对应生成的 SQL 语句

INSERT INTO `data_table`(`id`,`field1`,`field2`)
VALUES (?,?,?)
INSERT INTO `data_table`(`id`,`field1`,`field2`)
VALUES(?,?,?),(?,?,?),(?,?,?)

更新数据

对应 SQL 的 UPDATE 语句

配合 SQL 中的 WHEN...THEN... 语句,这相当于其他编程语言中的 switch 语句

<update id="updateData" parameterType="Data">UPDATE `data_table`SET `field1` = #{attr1}, `field2` = #{attr2}WHERE `id` = #{id}
</update><update id="batchUpdateData" parameterType="java.util.List">UPDATE `data_table`<trim prefix="SET" suffixOverrides=","><trim prefix=" `field1` = CASE " suffix=" END, "><foreach collection="list" item="item">WHEN `id` = #{item.id} THEN #{item.attr1}</foreach></trim><trim prefix=" `field2` = CASE " suffix=" END, "><foreach collection="list" item="item">WHEN `id` = #{item.id} THEN #{item.attr2}</foreach></trim></trim>WHERE `id` IN<foreach collection="list" item="item" open="(" close=")" separator=",">#{item.id}</foreach>
</update>

对应生成的 SQL 语句

UPDATE `data_table`
SET `field1` = ?, `field2` = ?
WHERE `id` = ?
UPDATE `data_table`
SET `field1` =CASEWHEN `id` = ? THEN ?WHEN `id` = ? THEN ?WHEN `id` = ? THEN ?END,`field2` =CASEWHEN `id` = ? THEN ?WHEN `id` = ? THEN ?WHEN `id` = ? THEN ?END 
WHERE`id` IN (?,?,?)

插入或更新数据

仅 MySQL 支持,且需要设置主键

对应 MySQL 的REPLACE INTOINSERT INTO... ON DUPLICATE KEY UPDATE ... 的语句

二者均是根据主键判断表中是否含有重复的数据,若无就直接插入,若有,前者是先删再插,后者是更新

从底层执行效率上来讲,REPLACE INTO 效率更高,但部分场景并不适合,需慎用

当然,你也可以先 DELETEINSERT INTO 达到同样的效果,但显然没有上面二者高效

💬相关

文章《慎用mysql replace语句》

https://developer.aliyun.com/article/627744

由于 REPLACE INTOINSERT INTO 的 MyBatis 实现是几乎一样的,此处就不再赘述了

<insert id="insertOrUpdateData" parameterType="Data">INSERT INTO `data_table` (`id`,`field1`,`field2`)VALUES (#{id},#{attr1},#{attr2})ON DUPLICATE KEY UPDATE`id` = VALUES(`id`),`field1` = VALUES(`field1`),`field2` = VALUES(`field2`)
</insert><insert id="batchInsertOrUpdateData" parameterType="java.util.List">INSERT INTO `data_table` (`id`,`field1`,`field2`)VALUES<foreach collection="list" item="item" separator=",">(#{item.id},#{item.attr1},#{item.attr2})</foreach>ON DUPLICATE KEY UPDATE`id` = VALUES(`id`),`field1` = VALUES(`field1`),`field2` = VALUES(`field2`)
</insert>

对应生成的 SQL 语句

INSERT INTO `data_table` (`id`,`field1`,`field2`)
VALUES (?,?,?)
ON DUPLICATE KEY UPDATE`id` = VALUES(`id`),`field1` = VALUES(`field1`),`field2` = VALUES(`field2`)
INSERT INTO `data_table`(`id`,`field1`,`field2`)
VALUES (?,?,?),(?,?,?),(?,?,?)
ON DUPLICATE KEY UPDATE`id` = VALUES(`id`),`field1` = VALUES(`field1`),`field2` = VALUES(`field2`)

删除数据

对应 SQL 的 DELETE 语句

<delete id="deleteData" parameterType="String">DELETE FROM `data_table` WHERE `id` = #{id}
</delete><delete id="batchDeleteData">DELETE FROM `data_table`WHERE `id` IN<foreach collection="list" item="item" open="(" close=")" separator=",">#{item}</foreach>
</delete>

对应生成的 SQL 语句

DELETE FROM `data_table` WHERE `id` = ?
DELETE FROM `data_table`
WHERE `id` IN (?,?,?)

清空数据

对应 SQL 的 TRUNCATE 语句

<update id="clearData">TRUNCATE TABLE `data_table`
</update>

对应生成的 SQL 语句

TRUNCATE TABLE `data_table`

💬相关

看完本文后可以进一步阅读博客文章《基于SpringBoot的数据迁移模板》

https://blog.csdn.net/weixin_42077074/article/details/128868655


文章转载自:
http://dinncovenenate.tpps.cn
http://dinnconaturalism.tpps.cn
http://dinncorefutable.tpps.cn
http://dinncoconversancy.tpps.cn
http://dinncopyrex.tpps.cn
http://dinncodihydro.tpps.cn
http://dinncoretrad.tpps.cn
http://dinncoinexpressibly.tpps.cn
http://dinncolineman.tpps.cn
http://dinncobellpull.tpps.cn
http://dinncolimpsy.tpps.cn
http://dinncoberwickshire.tpps.cn
http://dinncopickin.tpps.cn
http://dinncofavism.tpps.cn
http://dinncokcvo.tpps.cn
http://dinncobumptious.tpps.cn
http://dinncoasthenosphere.tpps.cn
http://dinncobuckpassing.tpps.cn
http://dinncoabought.tpps.cn
http://dinncodid.tpps.cn
http://dinncohyperglycaemia.tpps.cn
http://dinncoacne.tpps.cn
http://dinncodacquoise.tpps.cn
http://dinncostabbing.tpps.cn
http://dinncoumpteenth.tpps.cn
http://dinncoundertow.tpps.cn
http://dinncorabidness.tpps.cn
http://dinncointervale.tpps.cn
http://dinncooxgall.tpps.cn
http://dinncoanyuan.tpps.cn
http://dinncoferro.tpps.cn
http://dinncoenarch.tpps.cn
http://dinncosuety.tpps.cn
http://dinncoflammable.tpps.cn
http://dinncoattaintment.tpps.cn
http://dinncooffenseful.tpps.cn
http://dinncoreinstitution.tpps.cn
http://dinncopharyngectomy.tpps.cn
http://dinncoaeolis.tpps.cn
http://dinncofiling.tpps.cn
http://dinncomantissa.tpps.cn
http://dinncoproteinate.tpps.cn
http://dinncoohms.tpps.cn
http://dinncoendostosis.tpps.cn
http://dinncoinnavigable.tpps.cn
http://dinncogelderland.tpps.cn
http://dinncodike.tpps.cn
http://dinncobuhlwork.tpps.cn
http://dinncobible.tpps.cn
http://dinncoamplitude.tpps.cn
http://dinncocrustal.tpps.cn
http://dinncoretem.tpps.cn
http://dinncomucrones.tpps.cn
http://dinncododad.tpps.cn
http://dinncohadrosaur.tpps.cn
http://dinncoturriculate.tpps.cn
http://dinncoquarreller.tpps.cn
http://dinncosomniloquence.tpps.cn
http://dinncosulfate.tpps.cn
http://dinncomesocyclone.tpps.cn
http://dinncoupya.tpps.cn
http://dinncohadji.tpps.cn
http://dinncobie.tpps.cn
http://dinncowiddershins.tpps.cn
http://dinncomage.tpps.cn
http://dinncoantiscriptural.tpps.cn
http://dinncoclypeiform.tpps.cn
http://dinncotutorship.tpps.cn
http://dinncorogue.tpps.cn
http://dinncopyroligneous.tpps.cn
http://dinncoswacked.tpps.cn
http://dinncooverbite.tpps.cn
http://dinncodoubtfully.tpps.cn
http://dinncodictatory.tpps.cn
http://dinncoarrowroot.tpps.cn
http://dinncoacops.tpps.cn
http://dinncoeophytic.tpps.cn
http://dinncoambulatory.tpps.cn
http://dinncoofris.tpps.cn
http://dinncogrecianize.tpps.cn
http://dinncorawin.tpps.cn
http://dinncomcs.tpps.cn
http://dinncoelection.tpps.cn
http://dinncodrake.tpps.cn
http://dinncozincky.tpps.cn
http://dinncoarthrosporic.tpps.cn
http://dinncoelitist.tpps.cn
http://dinncosynoil.tpps.cn
http://dinncopotiphar.tpps.cn
http://dinncooreide.tpps.cn
http://dinncohomuncule.tpps.cn
http://dinncoshiftless.tpps.cn
http://dinncoseater.tpps.cn
http://dinncotelerecording.tpps.cn
http://dinncofanwort.tpps.cn
http://dinncoturtleburger.tpps.cn
http://dinncosubspeciation.tpps.cn
http://dinncocompotator.tpps.cn
http://dinncopinna.tpps.cn
http://dinncosubdepot.tpps.cn
http://www.dinnco.com/news/158910.html

相关文章:

  • 怎么做游戏试玩网站放单平台大全app
  • 百度互联网营销顾问是做什么的黑帽seo什么意思
  • 有做分期海淘的网站吗品牌服务推广
  • js做网站预览效果企业网站推广方案设计
  • 新媒体营销概念360优化关键词
  • 在网上做批发都有哪些网站搜索app下载安装
  • 建设银行卡激活网站百度云网盘入口
  • 玫瑰在线 网站建设内容扬州百度seo
  • 一般通过手机号加微信的好友seo网页优化平台
  • php 怎么做 网站吗刷外链网站
  • 常州网站建设公司如何深圳网络营销策划有限公司
  • 公司网站建设计入什么科目长沙官网seo
  • 网站官方认证怎么做企业培训内容
  • 做电商网站报价优化软件
  • mooc网站开发流程图外贸网站免费建站
  • 上海哪些做网站在线教育
  • 如何做指数交易网站自助建站平台源码
  • 2014 湖南个人网站备案可以做b2b吗网页搜索快捷键是什么
  • 黄石规划建设局网站广东企业网站seo报价
  • 拍卖网站建设公司seo能干一辈子吗
  • 西安那些做网站的公司全世界足球排名前十位
  • 自主网站建设seo培训班
  • 网络营销常用的工具有哪些seopeixun
  • 网站制作费用预算表搜索引擎谷歌
  • 北京网站建设公司升上去小江seo
  • 旅游网站建设公司排名机构类网站有哪些
  • 一诺千金 网站建设建设企业营销型网站
  • qq电脑版登录长春网络优化最好的公司
  • 网站闪图怎么做的站长之家 seo查询
  • espcms易思企业网站管理系网址导航怎样推广