Java杂记-2020.07.28

简单记录下今天项目用到的东西还有技术公众号学到的一些知识点

  1. Java事务
  2. idea编码技巧
  3. 数据库快速插入100万条数据
  4. Java实现sql回滚

Java事务

事务(Transaction)的四个属性(ACID)

  • 原子性(Atomic) 对数据的修改要么全部执行,要么全部不执行。
  • 一致性(Consistent) 在事务执行前后,数据状态保持一致性。
  • 隔离性(Isolated) 一个事务的处理不能影响另一个事务的处理。
  • 持续性(Durable) 事务处理结束,其效果在数据库中持久化。

Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。

事务并发处理可能引起的问题

  • 脏读(dirty read):一个事务读取了另一个事务尚未提交的数据,
  • 不可重复读(non-repeatable read) :一个事务的操作导致另一个事务前后两次读取到不同的数据
  • 幻读(phantom read) :一个事务的操作导致另一个事务前后两次查询的结果数据量不同。

解决读问题: 设置事务隔离级别(5种)

未提交读(read uncommited) :脏读,不可重复读,虚读都有可能发生

已提交读 (read commited):避免脏读。但是不可重复读和虚读有可能发生

可重复读 (repeatable read) :避免脏读和不可重复读.但是虚读有可能发生.

串行化的 (serializable) :避免以上所有读问题.

idea编码技巧

idea中关于快速生成try,catch,for,while等语句:https://mp.weixin.qq.com/s/dKcdu_FBcNwWfXwpbSkT_A

数据库快速插入100万条数据

主要是建立存储过程就能实现

下面会很慢的原因是插入语句耗时长,可以批量删除进一步优化,具体可以见下面博客

https://www.jianshu.com/p/36b87cb3a05a


CREATE TABLE `logs` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`logtype` VARCHAR(255) DEFAULT NULL,
`logurl` VARCHAR(255) DEFAULT NULL,
`logip` VARCHAR(255) DEFAULT NULL,
`logdz` VARCHAR(255) DEFAULT NULL,
`ladduser` VARCHAR(255) DEFAULT NULL,
`lfadduser` VARCHAR(255) DEFAULT NULL,
`laddtime` DATETIME DEFAULT NULL,
`htmlname` VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='日志表';
DROP PROCEDURE IF EXISTS my_insert;
DELIMITER //
CREATE PROCEDURE my_insert()
BEGIN
DECLARE n INT DEFAULT 1;
loopname:LOOP
INSERT INTO `logs`(`logtype`,`logurl`,`logip`,`logdz`,`ladduser` ,`lfadduser`,`laddtime`,`htmlname`) VALUES ( 2, '/index', '0:0:0:0:0:0:0:1', NULL, NULL, 'null', '2018-05-03 14:02:42', '首页');
SET n=n+1;
IF n=10000000 THEN
LEAVE loopname;
END IF;
END LOOP loopname;
END;
//
DELIMITER ;
CALL my_insert();

Java中sql语句的回滚

使用的是spring中的@Transactional(rollbackFor=Exception.class)来实现,下面就能成功实现如果后面语句出错,就成功回滚

    @Test
@Transactional(rollbackFor=Exception.class)
public void testApplyAdjustUpdate(){
try{
//这里就可以写mapper的语句
mapper.update();
//设置空指针异常来检查是否成功rollback
Integer a = null;
int b = a;
} catch(Exception e){
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}

Java-每日学习笔记(数据库与idea技巧)的更多相关文章

  1. Java每日学习笔记1

    单选按钮 JRadioButton radioButton1 = new JRadioButton("Java");// 创建单选按钮 contentPane.add(radioB ...

  2. java JDK8 学习笔记——第16章 整合数据库

    第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...

  3. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. Java Web 学习笔记 1

    Java Web 学习笔记 1 一.Web开发基础 1-1 Java Web 应用开发概述 1.1.1 C/S C/S(Client/Server)服务器通常采用高性能的PC机或工作站,并采用大型数据 ...

  5. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  6. JAVA Web学习笔记

    JAVA Web学习笔记 1.JSP (java服务器页面) 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . JSP全名为Java Server Pages,中文名叫java服务器 ...

  7. 20145213《Java程序设计学习笔记》第六周学习总结

    20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...

  8. [原创]java WEB学习笔记95:Hibernate 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. java JDK8 学习笔记——助教学习博客汇总

    java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...

  10. [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

随机推荐

  1. 【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值

    [SpringCloud]Gateway 配置全局过滤器获取请求参数和响应值 实现Ordered接口getOrder()方法,数值越小越靠前执行,记得这一点就OK了. 获取请求参数RequestBod ...

  2. 运用设计模式告别项目中大量臃肿的if else

    前言 以前写过的一个老项目中,有这样一个业务场景,比喻:一个外卖系统需要接入多家餐馆,在外卖系统中返回每个餐馆的菜单列表 ,每个餐馆的菜单价格都需要不同的算法计算. 代码中使用了大量的if else嵌 ...

  3. Springboot整合MongoDB的Docker开发,其它应用也类似

    1 前言 Docker是容器开发的事实标准,而Springboot是Java微服务常用框架,二者必然是会走到一起的.本文将讲解如何开发Springboot项目,把它做成Docker镜像,并运行起来. ...

  4. 怎么给tbody加滚动条?通过css样式给表格tbody加垂直滚动条

    tbody加滚动条实现思路: 1,把tbody设置成display:block,然后就对其高度设置一个固定值,overflow设置成auto. 2,把thead的tr设置成display:block. ...

  5. Ticket Game思维题

    题目链接 题意: 给你一个n的序列(n=2*k),由数字和?(偶数个)组成,A和B分别操作(B先操作):把?变成一个任意的0-9的数字,如果最后前n/2和后n/2个数字之和相等,则A胜,否则B胜. 分 ...

  6. labelImg安装及使用(YOLO标签为例)

    安装: 非常简单. 第一步: cmd中执行 pip install labelImg 我一般会用下面这个 pip install -i https://pypi.tuna.tsinghua.edu.c ...

  7. 最新Spark入门篇

    一.Spark简介 1.什么是Spark Apache Spark是一种快速的集群计算技术,基于Hadoop MapReduce技术,扩展了MapReduce模型,主要特性是在内存中集群计算,速度更快 ...

  8. TP5中的缓存使用

    Thinkphp 5.0采用了 think\Cache 类来提供缓存支持 缓存支持采用驱动方式,所以缓存在使用之前,需要进行连接操作,也就是缓存初始化操作. 支持的缓存类型包括file.memcach ...

  9. (四)pandas的拼接操作

    pandas的拼接操作 #重点 pandas的拼接分为两种: 级联:pd.concat, pd.append 合并:pd.merge, pd.join 0. 回顾numpy的级联 import num ...

  10. 李航统计学习方法(第二版)(六):k 近邻算法实现(kd树(kd tree)方法)

    1. kd树简介 构造kd树的方法如下:构造根结点,使根结点对应于k维空间中包含所有实例点的超矩形区域;通过下面的递归方法,不断地对k维空间进行切分,生成子结点.在超矩形区域(结点)上选择一个坐标轴和 ...