
Java 进阶
文章平均质量分 80
阿进的写字台
I don’t know what I think until I try to write it down
展开
-
Java 多线程(三)之线程状态及其验证
线程状态 Thread.State状态类型在指定的时间点, 一个线程有且只有一种状态。 这些状态是 JVM 的状态, 他们并没有反映操作系统的状态。定义Thread 的状态是定义在 Thread 内部的枚举类型。public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED...原创 2018-08-27 23:44:24 · 4229 阅读 · 0 评论 -
mybatis-高级结果映射之一对多(你知道一对多的结果是如何合并的吗)
在一对多的关系中, 主表的数据回对应关联表中的多条数据。 因此, 查询时就会查询出多条结果, 所以, 向类似的情况我们会使用 List 来进行存储关联表中获取到的信息。1 数据准备创建以下的名为 mybatis 的数据库, 并在其下创建4个表。在此就不贴出来建表的 SQL 语句了 , 感兴趣的可以去我的 Github:mybatis-mapping 中获取。1.2 实体类, 接口和XML...原创 2018-10-18 10:03:47 · 8989 阅读 · 4 评论 -
mybatis 多个接口参数的注解使用方式(@Param)
1 简介1.1 单参数在 Mybatis 中, 很多时候, 我们传入接口的参数只有一个。 对应接口参数的类型有两种, 一种是基本的参数类型, 一种是 JavaBean。例如在根据主键获取对象时, 我们只需要传入一个主键的参数即可。 而在插入, 更新等操作时, 一般会涉及到很多参数, 我们就使用 JavaBean。1.2 多参数但是, 在实际的情况中, 我们遇到类似这样的情况可能:接口...原创 2018-10-09 09:40:18 · 13894 阅读 · 0 评论 -
mybatis 缓存的使用, 看这篇就够了
缓存的重要性是不言而喻的。 使用缓存, 我们可以避免频繁的与数据库进行交互, 尤其是在查询越多、缓存命中率越高的情况下, 使用缓存对性能的提高更明显。mybatis 也提供了对缓存的支持, 分为一级缓存和二级缓存。 但是在默认的情况下, 只开启一级缓存(一级缓存是对同一个 SqlSession 而言的)。以下的项目是在mybatis 初步使用(IDEA的Maven项目, 超详细)的基础上进行。...原创 2018-09-30 13:28:33 · 58961 阅读 · 19 评论 -
MyBatis动态SQL
MyBatis 令人喜欢的一大特性就是动态 SQL。 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的。 MyBatis 动态 SQL 的出现, 解决了这个麻烦。MyBatis通过 OGNL 来进行动态 SQL 的使用的。目前, 动态 SQL 支持以下几种标签元素作用备注if判断语句单条件分支choose(when、otherw...原创 2018-11-05 16:07:22 · 284 阅读 · 1 评论 -
mybatis源码-Mapper解析之SQL 语句节点解析(一条语句对应一个MappedStatement)
在 mybatis 中, 对应 CRUD 的是四种节点: <select>, <insert>, <delete>, <update>。在解析 Mapper.xml 文件中, 会调用 XMLStatementBuilder 来 进行这几个节点的解析。 解析完成后使用 MappedStatement 来表示一条条 SQL 语句。 完原创 2018-11-19 23:47:29 · 2228 阅读 · 0 评论 -
扒一扒: Java 中的枚举
在 Java 中, 枚举, 也称为枚举类型, 其是一种特殊的数据类型, 它使得变量能够称为一组预定义的常量。 其目的是强制编译时类型安全。因此, 在 Java 中, enum 是保留的关键字。1. 枚举的定义在 Java 是在 JDK 1.4 时决定引入的, 其在 JDK 1.5 发布时正式发布的。举一个简单的例子:以日常生活中的方向来定义, 因为其名称, 方位等都是确定, 一提到大家就...原创 2018-12-03 09:12:10 · 587 阅读 · 1 评论 -
HashMap及其原理
1 HashMap在JAVA中的怎么工作的?基于Hash的原理2 什么是哈希?最简单形式的 hash,是一种在对任何变量/对象的属性应用任何公式/算法后, 为其分配唯一代码的方法。一个真正的hash方法必须遵循下面的原则哈希函数每次在相同或相等的对象上应用哈希函数时, 应每次返回相同的哈希码。换句话说, 两个相等的对象必须一致地生成相同的哈希码。Java 中所有的对象都有 Hash...原创 2018-11-27 22:44:02 · 709 阅读 · 0 评论 -
Java 多线程(六)之Java内存模型
1. 并发编程的两个问题在并发编程中, 需要处理两个关键问题: 线程之间如何通信及线程之间如何同步通信指的是线程之间是以何种机制来交换信息, 在命令式编程中, 线程之间的通信机制有两种:共享内存和消息传递。在共享内存的模型中, 线程之间共享程序的公共状态, 通过读写内存中的公共状态进行隐式通信。在消息传递的并发模型中, 线程之间没有公共状态, 线程之间必须通过发送消息显示的进行通信。同步指的...原创 2018-12-10 23:48:00 · 258 阅读 · 0 评论 -
反射那点基础-Method
Method 类描述的是类对象的方法信息。 其中包含了被反射方法的信息, 访问信息。在运行时, 我们可以通过该类进行方法的调用。1 获取 Method1.1 方法因为 Java 中的 java.lang.reflect 包下所有类的构造函数都不为 public, 同时类都是 final 类型的, 因此, 不能直接通过外部 new 来获取该方法。获取所有的 public 方法,包括其父类, ...原创 2018-12-17 23:44:58 · 1038 阅读 · 0 评论 -
反射那些基础-Class
1 Class 类是什么?在 Java 中, 一切皆对象。比如class Foo{ }这个类本身就是 java.liang.Class 的一个对象。 每一个 .class 文件在类加载器加载了之后, 都会在 JVM 中创建一个 Class 对象。所有的类都是在第一次使用时, 动态加载到 JVM 中。 当程序创建第一个对类的静态成员函数(构造函数也是静态方法)的引用时, 就会...原创 2018-12-18 23:20:35 · 221 阅读 · 0 评论 -
扒一拔:Java 中的泛型(一)
文章目录1 泛型1.1 为什么需要泛型1.2 类型参数命名规约2 泛型的简单实用2.1 最基本最常用2.2 简单泛型类2.2.1 非泛型类2.2.2 泛型类的定义2.2.3 泛型类的使用2.3 简单泛型接口2.3.1 定义2.3.2 实现2.4 简单泛型方法2.4.1 泛型方法声明2.4.2 泛型方法的调用3 类型变量边界3.1 定义3.2 示例4 泛型, 继承和子类型4.1 泛型和继承4.2 泛...原创 2018-12-26 11:51:36 · 1011 阅读 · 0 评论 -
优雅的对象转换解决方案-MapStruct及其入门(一)
第一次看到 MapStruct 的时候, 我个人非常的开心。 因为其跟我内心里面的想法不谋而合。1 MapStruct 是什么?1.1 JavaBean 的困扰对于代码中 JavaBean 之间的转换, 一直是困扰我很久的事情。 在开发的时候我看到业务代码之间有很多的 JavaBean 之间的相互转化, 非常的影响观感, 却又不得不存在。 我后来想的一个办法就是通过反射, 或者自己写很多的...原创 2019-08-05 23:17:36 · 2401 阅读 · 0 评论 -
mybatis-高级结果映射之一对一
mybatis的高级结果映射可以很轻松的帮助我们处理一对一, 一对多的数据关系。1 数据准备1.1 数据库创建以下的名为 mybatis 的数据库, 并在其下创建4个表。在此就不贴出来建表的 SQL 语句了 , 感兴趣的可以去我的 Github:mybatis-mapping 中获取。1.2 实体类, 接口和XML使用 mybatis-代码生成器 生成相应的实体类, 接口和XML。...原创 2018-10-14 11:50:17 · 564 阅读 · 0 评论 -
mybatis 代码生成器(IDEA, Maven)及配置详解(部分配置你应该不知道)
在使用 mybatis 过程中, 当手写 JavaBean和XML 写的越来越多的时候, 就越来越同意出错。这种重复性的工作, 我们当然不希望做那么多。还好, mybatis 为我们提供了强大的代码生成–MybatisGenerator。通过简单的配置, 我们就可以生成各种类型的实体类, Mapper接口, MapperXML文件, Example对象等。 通过这些生成的文件, 我们就可以方...原创 2018-10-13 12:00:28 · 332 阅读 · 0 评论 -
Java 多线程(二)之 Thread 优先级
Thread 中线程优先级相关属性每个线程均有优先级,在 Thread 中, 与优先级对应的属性如下:/** * 线程的优先级属性 */private int priority;/** * 线程所能拥有的最大优先级. */public final static int MIN_PRIORITY = 1;/** * 线程默认的优先级. */public final...原创 2018-08-23 23:20:42 · 4090 阅读 · 0 评论 -
HashMap 源码解析(一)之使用、构造以及计算容量
简介HashMap 是基于哈希表的 Map 接口的实现。 它的使用频率是非常的高。集合和映射作为集合框架中的一员,在深入之前, 让我们先来简单了解一下集合框架以及 HashMap 在集合框架中的位置。从图中可以看出 1. 集合框架分为两种, 即集合(Collections)和映射(Map) 2. HashMap 是 AbstractMap 的子类。而 AbstractM...原创 2018-08-28 23:30:48 · 944 阅读 · 0 评论 -
Java 多线程之 Thread 类 和 Runnable 接口初步使用
Thread 类Thread 类是在 JDK1.0 时就存在的, 在 Java 中接触的多线程开发基本上都会从这个类开始。Thread之定义线程类使用 Thread 创建线程的方法很简单, Thread 是一个类, 在需要创建线程时, 我们只需要继承这个类, 并将 run() 方法进行重写即可。class PrimeThread extends Thread { l...原创 2018-08-21 23:39:21 · 281 阅读 · 0 评论 -
Java 多线程(五)之 synchronized 的使用
并发编程为我们带来了很多便利, 但同时也带来了线程安全问题。线程安全线程安全性的定义: 当多个线程访问某一个类时, 这个类始终能表示出正确的行为, 那么就称这个类是线程安全的。其产生的原因可以归结如下:1.共享数据: 只有共享的数据才会产生带来安全性问题。 如果是方法内部声明的变量, 其是在虚拟机栈中, 为每个线程独享, 不存在安全性问题。2.多个线程对共享数据进...原创 2018-09-01 12:53:20 · 2097 阅读 · 0 评论 -
Java 多线程(四)之守护线程
定义Java 中有两种线程: 一种是用户线程(User Thread),一种是守护线程(Daemon Thread)。守护线程是一种特殊的线程, 它的特殊有“陪伴”的含义, 当线程中不存在非守护线程时, 则守护线程自动销毁。垃圾回收线程就是一种守护线程, 当线程中没有非守护线程了, 则垃圾回收线程就会自动销毁。因此, 守护线程的作用就是为其他非守护线程的线程服务, 当非守护线程不存...原创 2018-08-29 22:57:33 · 592 阅读 · 0 评论 -
静态代理和动态代理
代理模式(静态代理) 代理模式是为其他对象提供一种代理以控制对这个对象的访问。定义上也不算好理解, 上一个 《大话设计模式》 的图。Subject 类(一般是抽象类或接口), 定义了一个方法。RealSubject 类实现了这个接口, 正常的情况我们只需要 new 出这个类的实例对象, 然后调用这个方法就可以了。但是, 如果我们有需求说想要在这个方法的前面和后面进行一...原创 2018-09-03 21:58:20 · 161 阅读 · 0 评论 -
mybatis 初步使用(IDEA的Maven项目, 超详细)
创建 Maven 项目1. 菜单上选择新建项目 File | New | Project2. 选择左侧的Maven 由于我们只是创建一个普通的项目, 此处点击 Next即可。3. 输入GroupId和ArtifactId 在我的项目中, GroupId 填 com.homejim.mybatis ArtifactId 填 helloMyba...原创 2018-09-09 11:56:22 · 12200 阅读 · 3 评论 -
mybatis源码-解析配置文件(二)之解析的流程
1. 简介在之前的文章《mybatis 初步使用(IDEA的Maven项目, 超详细)》中, 讲解了mybatis的初步使用, 并总结了以下mybatis的执行流程: 通过 Resources 工具类读取 mybatis-config.xml, 存入 Reader; SqlSessionFactoryBuilder 使用上一步获得的 reader 创建 SqlSessionF...原创 2018-09-16 08:55:18 · 906 阅读 · 0 评论 -
Java设计模式-建造者(Builder)模式
最近在看Mybatis的源码, 在阅读解析 XML 配置文件的过程中, 发现使用到了建造者(Builder)模式。 因此, 打算重温一下该设计模式。由来假设我们需要画一个小人, 我们可能会有以下的构造函数定义:public Person(HeadType headType, HairType hairType, HairColor hairColor, FaceType fac...原创 2018-09-14 08:59:13 · 356 阅读 · 0 评论 -
mybatis抽取出的工具-(一)通用标记解析器(即拿即用)
在深入理解 mybatis 原理过程中, 我不单单是想理解整个 mybatis 是怎么运行的, 我还想从这个过程中提取出一些对自己有益的编程方法, 编程思想, 注释, 以及一些实用工具类。1. 简介1.1 mybatis-config.xml 中使用在 mybatis-config.xml 文件中, 我们常常看到类似的配置<properties> <propert...原创 2018-10-03 13:26:05 · 1164 阅读 · 0 评论 -
mybatis源码-解析配置文件(四)之配置文件Mapper解析
在 mybatis源码-解析配置文件(三)之配置文件Configuration解析 中, 讲解了 Configuration 是如何解析的。其中, mappers作为configuration节点的一部分配置, 在本文章中, 我们讲解解析mappers节点, 即 xxxMapper.xml 文件的解析。1 解析入口在解析 mybatis-config.xml 时, 会进行解析 xxxMapp...原创 2018-10-04 00:46:56 · 368 阅读 · 0 评论 -
mybatis源码-解析配置文件(四-1)之配置文件Mapper解析(cache)
相关文章推荐mybatis 缓存的使用, 看这篇就够了mybatis源码-解析配置文件(四)之配置文件Mapper解析1. 简介本文章主要讲解的是, xxxMapper.xml 文件中, cache 节点的源码。2. 解析XMLMapperBuilder.cacheElement() 方法主要负责解析 <cache> private void c...原创 2018-10-05 00:16:23 · 391 阅读 · 0 评论 -
优雅的对象转换解决方案-MapStruct使用进阶(二)
在前面, 介绍了 MapStruct 及其入门。 本文则是进一步的进阶。在 MapStruct 生成对应的实现类的时候, 有如下的几个情景。1 属性名称相同,则进行转化在实现类的时候, 如果属性名称相同, 则会进行对应的转化。这个在之前的文章代码中已经有所体现。 通过此种方式, 我们可以快速的编写出转换的方法。源对象类import lombok.Data;@Datapublic c...原创 2019-08-06 23:25:32 · 4788 阅读 · 0 评论