自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 1、Java的内存区域

运行时数据区域 Java虚拟机内存模型包括程序计数器、虚拟机栈、本地方法栈、方法区、堆 VM内存分布图: 程序计数器 程序计数器是一块较小的内存空间,可以看作当前线程所执行的字节码行号指示器。 字节码解释器工作的时候就是通过改变这个计数器的值来选取下一条需要执行的字节码的指令,分支、循环、跳...

2019-03-31 22:47:46 42 0

原创 9、PriorityQueue分析

待续

2017-12-22 21:03:33 200 0

原创 8、Deque

Deque简介Deque是Queue的子接口,我们知道Queue是一种队列形式,而Deque则是双向队列,它支持从两个端点方向检索和插入元素,因此Deque既可以支持LIFO形式也可以支持LIFO形式.Deque接口是一种比Stack和Vector更为丰富的抽象数据形式,因为它同时实现了以上两者....

2017-12-22 21:02:53 143 0

原创 7、Queue

Queue集合的作用Queue用于模拟队列这种数据结构。队列通常是指“先进先出(FIFO)”的容器。队列的头部保存在队列中存放时间最长的元素,尾部保存存放时间最短的元素。新元素插入到队列的尾部,取出元素会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。Queue接口与List、Set同一...

2017-12-22 21:02:27 183 0

原创 6、fail-fast机制

fail-fast简介fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。换句话说,只要是线程不安全的集合都可能,抛出此异常例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合...

2017-12-22 21:01:46 178 0

原创 5、ArrayList详解

ArrayList介绍ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。ArrayList 继承了...

2017-12-22 21:01:00 218 0

原创 4、List接口详解

List简介list:集合中的元素按照索引的位置排序,集合中的元素可以重复,可以为null,允许按照对象在集合中的索引位置检索对象,遍历的顺序和放入的顺序是一致的。List接口的定义List的定义如下:public interface List<E> extends Collectio...

2017-12-22 20:56:54 146 0

原创 3、Iterator、Iterable详解

Iterator概述如何判断当前迭代器的位置,及如何移动? java的迭代器是无法将随机访问的,也就是说不可以根据输入的数字来跳转到指定的位置,迭代器到达任何一个位置都需要经过next或者可能存在的previous方法实现,只能一个一个的移动。 是迭代器并不是指向一个元素的,而是指向元素之间的。...

2017-12-22 20:55:16 317 0

原创 2、Collection架构

概要collection是个接口,它有2个分支:List和Set。list为有序的队列,set为不可重复的集合。 collection定义了集合的基本操作,AbstractCollection抽象类实现了collection的大部分功能。Collection中有一个iterator()方法,它的...

2017-12-22 20:54:46 101 0

原创 1、集合框架概述

概念与作用(1.8.0_144)java中的集合类:是一种工具类,就像是容器,储存任意数量的具有共同属性的对象。在编程时,常常需要集中存放多个数据,当然我们可以使用数组来保存多个对象。但数组长度不可变化,一旦初始化数组时指定了数组长度,则这个数组长度是不可变的,如果需要保存个数变化的数据,数组就有...

2017-12-22 20:53:45 143 0

原创 Java 8 Optional的正确姿势

调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法。我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的参数。这正是一些类似Guava的外部API试图解决的问题。新版本的Java,比如Java 8引入了一个新的Optional类。Optional类的Jav...

2017-12-21 22:58:14 4729 0

原创 8、线程的中断机制

中断线程 线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序本身。线程会不时地检测这个中断标示位,以判断线程是否应该被中断(中断标示值是否为true)。 判断线程是...

2017-12-21 21:52:31 119 0

原创 7、多线的异常处理

在普通的单线程程序中,捕获异常只需要通过try … catch … finally …代码块就可以了。那么,在并发情况下,比如在父线程中启动了子线程,如何正确捕获子线程中的异常,从而进行相应的处理呢?常见错误很简单嘛,直接在父线程启动子线程的地方try … catch一把就可以了,其实这是不对的。...

2017-12-21 21:52:10 133 0

原创 6、ThreadLocal线程变量

定义并发应用的一个关键地方就是共享数据。这个对那些扩展Thread类或者实现Runnable接口的对象特别重要。如果你创建一个类对象,实现Runnable接口,然后多个Thread对象使用同样的Runnable对象,全部的线程都共享同样的属性。这意味着,如果你在一个线程里改变一个属性,全部的线程都...

2017-12-21 21:51:51 137 0

原创 5、守护线程

定义在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程、后台线程)只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。User和Daemon两者几乎没有区别,唯一的不...

2017-12-21 21:51:15 122 0

原创 4、基本的线程同步

monitor他们是应用于同步问题的人工线程调度工具。讲其本质,首先就要明确monitor的概念,Java中的每个对象都有一个监视器,来监测并发代码的重入。在非多线程编码时该监视器不发挥作用,反之如果在synchronized 范围内,监视器发挥作用。当某代码并不持有监视器的使用权时(如图中5的状...

2017-12-21 21:50:56 91 0

原创 3、线程的调度

1. 线程睡眠 Thread.sleep(long millis)方法,使线程转到阻塞状态。millis参数设定睡眠的时间,以毫秒为单位。当睡眠结束后,就转为就绪(Runnable)状态。 sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;由于sle...

2017-12-21 21:49:48 101 0

原创 2、线程的创建

线程的创建Java 提供了三种创建线程的方法: - 通过实现 Runnable 接口; - 通过继承 Thread 类本身; - 通过 Callable 和 Future 创建线程。我们将使用第二种方法来制作一个简单的程序,它能创建和运行10个线程。每一个线程能计算和输出1-10以内的乘法表...

2017-12-21 21:49:22 104 0

原创 1、线程的基本概念

多线程线程与进程 进程: 一个计算机程序的运行实例,包含了需要执行的指令;有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;进程拥有各种资源和状态信息,包括打开的文件、子进程和信号处理。 线程: 表示程序的执行流程,是CPU调度执行的基本单位;线程有自己的程序...

2017-12-21 21:47:11 358 0

原创 35、MapperMethod映射器方法.

MapperMethod:映射器方法映射器方法是最底层的被调用者,同时也是binding模块中最复杂的内容。它是MyBatis中对SqlSession会话操作的封装,那么这意味着什么呢?意味着这个类可以看做是整个MyBatis中数据库操作的枢纽,所有的数据库操作都需要经过它来得以实现。 我们单独...

2017-06-27 23:08:28 615 0

原创 34、SqlSource解析

SqlSourceBuilder主要是用来构建SQLSource的,不管是动态SQL还是静态SQL,最后都是调用这个类生成静态sql字段parameterProperties支持的配置项private static final String parameterProperties = "...

2017-06-27 23:07:51 1146 0

原创 33、SQL解析基础

BoundSqlBoundSql只是一个简单的java对象,有两个属性比较重要 - sql:从解析时可以看出这个sql不是配置文件中的sql,这个sql已经经过了处理(如:占用位符的处理、动态语句的解析if、foreach等待) - parameterObject:客户端执行sql时传入的参数...

2017-06-27 23:07:21 541 0

原创 32、解析MetaObject

MetaObjectMetaObject类相当于一个工具类,Mybatis在sql参数设置和结果集映射里经常使用到这个对象。下面来详细分析一下这类。字段 /** *原始的对象 */ private Object originalObject; /** ...

2017-06-27 23:06:52 698 0

原创 31、propertise解析之通用标记解析器与标记处理器

GenericTokenParser通用标记解析器这里的通用标记解析器处理的是SQL脚本中#{parameter}、${parameter}参数,根据给定TokenHandler(标记处理器)来进行处理,TokenHandler是标记真正的处理器,而本篇的解析器只是处理器处理的前提工序——解析,本...

2017-06-27 23:06:21 244 0

原创 30、SQL片段的解析

sqlFragment可以翻译为sql片段,它的存在价值在于可复用sql片段,避免到处重复编写。sqlFragment的解析过程sqlFragment存储于Configuration内部。protected final Map<String, XNode> sqlFragments =...

2017-06-27 23:05:43 435 0

原创 29、ParamNameResolver参数解析

处理接口形式的入参在使用MyBatis时,有两种使用方法。 - 一种是使用的接口形式, - 另一种是通过SqlSession调用命名空间。这两种方式在传递参数时是不一样的,命名空间的方式更直接ParamNameResolver主要用来处理接口形式的参数,最后会把参数处放在一个map中map的k...

2017-06-27 23:05:07 947 0

原创 28、参数容器ParameterMapping介绍和解析

ParameterMappingParameterMapping的对应的xml内容<parameter property="" resultMap="" javaType="" typeHandler="" jd...

2017-06-27 23:04:25 1366 0

原创 27、ResultMap解析

ResultMap的解析入口由前面的文章分析,mapper文件的解析都是有XMLMapperBuilder完成的。 public void parse() { if (!configuration.isResourceLoaded(resource)) {//是否加载过此资源 ...

2017-06-27 23:03:56 616 0

原创 26、Result解析之ResultMap(结果集)介绍

ResultMapResultMap(org.apache.ibatis.mapping.ResultMap)类——结果映射。它是结果集中的字段与类中属性的映射关系的集合,也就是结果集与类的映射关系。字段public class ResultMap { private Configurat...

2017-06-27 23:02:59 856 0

原创 25、Result解析之ResultMapping介绍

ResultMapping字段映射 一个ResultMapping实例对应ResultSet中一个字段到javaBean中一个属性的映射关系字段public class ResultMapping { private Configuration configuration; /** ...

2017-06-27 23:00:52 2345 0

原创 24、映射器注册器MapperRegisty

mapper文件入口加载mapper配置文件的入口在XMLConfigBuilder类中的mapperElement方法mapperElement方法 private void mapperElement(XNode parent) throws Exception { if (...

2017-06-27 23:00:12 318 0

原创 23、Mapper解析之基于注解的总体过程

mapper文件入口加载mapper配置文件的入口在XMLConfigBuilder类中的mapperElement方法mapperElement方法 private void mapperElement(XNode parent) throws Exception { if (...

2017-06-27 22:59:04 606 0

原创 22、动态 SQL

动态 SQL MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。 if动态 ...

2017-06-27 22:57:51 190 0

原创 21、参数的传递

参数传递mybatis的parameterType标签可以可定义传入的数据类型传入的类型分为以下几类 1. 基本数据类型(包括包装类型、String类型、Date类型) 2. List(Set)、Map 3. 实体类型传入单个参数的示例Dao层的方法 Author selectByPrim...

2017-06-27 22:56:29 207 0

原创 20、结果集映射之一对多关联映射

多对一多个博客对应一个作者 作者public class Author { private Integer id; private String username; private String password; private String email; pr...

2017-06-27 22:55:41 335 0

原创 19、结果集映射之多对一关联映射

多对一多个博客对应一个作者 作者public class Author { private Integer id; private String username; private String password; private String email; pr...

2017-06-27 22:54:41 158 0

原创 18、结果集映射的简单使用

简单的ResultMap配置对应的Author实体类,此实体类已经进行过别名注册package com.lf.entity;import lombok.Data; import lombok.NoArgsConstructor; import lombok.ToString;@Data @ToSt...

2017-06-27 22:54:03 239 0

原创 17、通用枚举类型处理(二)

问题要是我们一个项目特别大,有几十个甚至是上百个枚举呢,那怎么办,难道我要一个个在typeHandler里面去加,加一百几十行?!个人觉得非常麻烦,影响我们的开发速度,so,能不能实现我们想要的像扫描下枚举的所在的包目录就可以注册的枚举做自动转换呢?具体怎么实现?typeHandler的注册流程具...

2017-06-26 23:44:21 603 0

原创 16、通用枚举类型处理(一)

官方介绍若想映射枚举类型 Enum,则需要从 EnumTypeHandler 或者 EnumOrdinalTypeHandler 中选一个来使用。比如说我们想存储取近似值时用到的舍入模式。默认情况下,MyBatis 会利用 EnumTypeHandler 来把 Enum 值转换成对应的名字。注意 ...

2017-06-26 23:43:25 1084 0

原创 15、处理枚举类型

官方介绍若想映射枚举类型 Enum,则需要从 EnumTypeHandler 或者 EnumOrdinalTypeHandler 中选一个来使用。比如说我们想存储取近似值时用到的舍入模式。默认情况下,MyBatis 会利用 EnumTypeHandler 来把 Enum 值转换成对应的名字。注意 ...

2017-06-26 23:41:59 289 0

提示
确定要删除当前文章?
取消 删除