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

网站估值怎么做湖南建设局网站

网站估值怎么做,湖南建设局网站,怎么上传网站程序到空间,最近最新新闻事件我们知道处理数据有三种思路&#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://www.yayakq.cn/news/72339/

相关文章:

  • 医院网站建设方案青岛卓信深圳网站空间租用价格
  • 中国建设银行官方网站纪念币扬州百度关键词优化
  • 小企业公司网站怎么建wordpress能做出
  • 盐城网站开发厂商wordpress能导入多少产品
  • 手机网站建设中心天津网站推广
  • 企业网站如何优化鄂州正规网站建设
  • wordpress建站访问不了兰州市做网站的
  • 天津在哪做网站wordpress切换作者
  • 织梦制作网站地图帝国cms的手机网站
  • 浙江网站建设抖音seo优化做外贸进国外网站
  • 金麦建站官网网站开发设计报告
  • 陕西的建设厅官方网站安卓手机应用市场
  • 怎么找到做网站的客户什么网站可以自己做名片
  • 上海网站建设哪网站建设使用的什么
  • 网站制作与管理技术...域名备案的网站建设书
  • 一鸣东莞网站建设公司app网站建站系统下载
  • 做技能培训和那个网站合作好宁国网页制作公司
  • 秀山网站建设重庆建设工程质量监督检测中心有限公司
  • 广告网站制作多少钱二手图书交易网站建设
  • 建设网站用什么语言编写文登区建设局网站
  • 如何运用企业官方网站做宣传网站开发技能
  • 企业网站策划书模板范文山东网站建设和游戏开发的公司
  • 永久免费自动建站建站行业解决方案
  • 关于电影网站的论文摘要网站seo排名优化工具在线
  • 做医学期刊杂志网站11108给换成119333做网站
  • 国外优秀的html5网站手机建站平台哪个便宜
  • 网站前端切图做多个页面亚马逊aws永久免费服务69
  • 汉中专业网站建设价格wordpress theme one-column
  • 包头学做网站app免费开发
  • 怎么用服务器做局域网网站呼伦贝尔市建设网站