自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 问答 (2)
  • 收藏
  • 关注

原创 mybatis 插件的原理-责任链和动态代理的体现

如果没有自定义过拦截器, 可以看我前面的文章。如果不知道 JDK 动态代理怎么使用的, 可以看我这文章。 责任链设计模式理解起来很简单, 网上找个例子看看即可。mybatis 插件的原理使用的是动态代理和责任链来实现的。1 拦截哪些方法在前面说过, 可以通过注解 Intecepts 和 Signature 来进行指定拦截哪些方法。 然而, 并不是说所有的方法都可以拦截的。mybatis 拦...

2019-09-28 22:20:09 477

原创 MyBatis 插件使用-自定义简单的分页插件

作为一个优秀的框架, 其除了要解决大部分的流程之外, 还需要提供给使用者能够自定义的能力。 MyBatis 有缓存, 有插件接口等。我们可以通过自定义插件的方式来对 MyBatis 进行使用上的扩展。以一个简单的 mysql 分页插件为例, 插件的使用包含以下步骤:1 分页参数的传递分页参数就是 offset 和 limit。 可以使用 RowBounds 来进行传递, 但是这样需要对原有的...

2019-09-27 22:00:55 1866 1

原创 优雅的对象转换解决方案-MapStruct使用进阶(二)

在前面, 介绍了 MapStruct 及其入门。 本文则是进一步的进阶。在 MapStruct 生成对应的实现类的时候, 有如下的几个情景。1 属性名称相同,则进行转化在实现类的时候, 如果属性名称相同, 则会进行对应的转化。这个在之前的文章代码中已经有所体现。 通过此种方式, 我们可以快速的编写出转换的方法。源对象类import lombok.Data;@Datapublic c...

2019-08-06 23:25:32 4439

原创 优雅的对象转换解决方案-MapStruct及其入门(一)

第一次看到 MapStruct 的时候, 我个人非常的开心。 因为其跟我内心里面的想法不谋而合。1 MapStruct 是什么?1.1 JavaBean 的困扰对于代码中 JavaBean 之间的转换, 一直是困扰我很久的事情。 在开发的时候我看到业务代码之间有很多的 JavaBean 之间的相互转化, 非常的影响观感, 却又不得不存在。 我后来想的一个办法就是通过反射, 或者自己写很多的...

2019-08-05 23:17:36 2344

原创 扒一拔: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 280

原创 mybatis源码- 反射模块一(跟着MyBatis学反射):类级别信息的封装

反射就是在运行的状态中, 对于任意的一个实体类, 都能知道这个类的所有属性和方法。 并将其封装成一个个对象, 对通过这些对象来实现对应实体类的创建, 以及访问该类的方法和属性。在我们创建了一个Java类之后, 编译出的.class文件在虚拟机中加载, 都会在JVM中创建一个Class对象,通过该对象来创建这个类的所有对象。在 Mybatis 中, 有对应的反射模块, 本文就是探究 mybati...

2018-12-20 13:33:57 1886 1

原创 反射那些基础-Class

1 Class 类是什么?在 Java 中, 一切皆对象。比如class Foo{ }这个类本身就是 java.liang.Class 的一个对象。 每一个 .class 文件在类加载器加载了之后, 都会在 JVM 中创建一个 Class 对象。所有的类都是在第一次使用时, 动态加载到 JVM 中。 当程序创建第一个对类的静态成员函数(构造函数也是静态方法)的引用时, 就会...

2018-12-18 23:20:35 179

原创 反射那点基础-Method

Method 类描述的是类对象的方法信息。 其中包含了被反射方法的信息, 访问信息。在运行时, 我们可以通过该类进行方法的调用。1 获取 Method1.1 方法因为 Java 中的 java.lang.reflect 包下所有类的构造函数都不为 public, 同时类都是 final 类型的, 因此, 不能直接通过外部 new 来获取该方法。获取所有的 public 方法,包括其父类, ...

2018-12-17 23:44:58 609

原创 Java 多线程(六)之Java内存模型

1. 并发编程的两个问题在并发编程中, 需要处理两个关键问题: 线程之间如何通信及线程之间如何同步通信指的是线程之间是以何种机制来交换信息, 在命令式编程中, 线程之间的通信机制有两种:共享内存和消息传递。在共享内存的模型中, 线程之间共享程序的公共状态, 通过读写内存中的公共状态进行隐式通信。在消息传递的并发模型中, 线程之间没有公共状态, 线程之间必须通过发送消息显示的进行通信。同步指的...

2018-12-10 23:48:00 213

原创 扒一扒: Java 中的枚举

在 Java 中, 枚举, 也称为枚举类型, 其是一种特殊的数据类型, 它使得变量能够称为一组预定义的常量。 其目的是强制编译时类型安全。因此, 在 Java 中, enum 是保留的关键字。1. 枚举的定义在 Java 是在 JDK 1.4 时决定引入的, 其在 JDK 1.5 发布时正式发布的。举一个简单的例子:以日常生活中的方向来定义, 因为其名称, 方位等都是确定, 一提到大家就...

2018-12-03 09:12:10 273 1

原创 HashMap及其原理

1 HashMap在JAVA中的怎么工作的?基于Hash的原理2 什么是哈希?最简单形式的 hash,是一种在对任何变量/对象的属性应用任何公式/算法后, 为其分配唯一代码的方法。一个真正的hash方法必须遵循下面的原则哈希函数每次在相同或相等的对象上应用哈希函数时, 应每次返回相同的哈希码。换句话说, 两个相等的对象必须一致地生成相同的哈希码。Java 中所有的对象都有 Hash...

2018-11-27 22:44:02 436

原创 函数指针

函数指针定义函数指针(也称为子例程指针或过程指针)是指向函数的指针。与引用数据不同, 函数指针指向内存中的可执行代码。解引用函数指针时, 就如同引用函数一样, 可以调用和传递参数。 这样的调用就称之为间接调用, 因为函数是通过变量间接调用的,而不是直接通过固定的标识符或地址调用。声明类型说明符 (*函数名) (参数)比如int (*p)(int x, int y);// 该函数指针...

2018-11-21 17:05:57 179

原创 mybatis源码-Mapper解析之SQL 语句节点解析(一条语句对应一个MappedStatement)

在 mybatis 中, 对应 CRUD 的是四种节点: <select>, <insert>, <delete>, <update>。在解析 Mapper.xml 文件中, 会调用 XMLStatementBuilder 来 进行这几个节点的解析。 解析完成后使用 MappedStatement 来表示一条条 SQL 语句。 完

2018-11-19 23:47:29 2142

原创 MyBatis-你所不了解的sql和include

在前一篇[MyBatis动态SQL(认真看看, 以后写SQL就爽多了)]中, 详细给出了动态 SQL 的用法, 也收到了至今为止最多的赞和日阅读量。今天在大致讲解一下 <sql> 和 <include> 节点的使用。sql 节点的基础对于 <sql> 节点, 很多人的理解

2018-11-14 23:21:14 2334

原创 MyBatis动态SQL

MyBatis 令人喜欢的一大特性就是动态 SQL。 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的。 MyBatis 动态 SQL 的出现, 解决了这个麻烦。MyBatis通过 OGNL 来进行动态 SQL 的使用的。目前, 动态 SQL 支持以下几种标签元素作用备注if判断语句单条件分支choose(when、otherw...

2018-11-05 16:07:22 249 1

原创 mybatis源码-解析配置文件(四-二)之配置文件Mapper解析(resultMap)

在 select 语句中查询得到的是一张二维表, 水平方向上看是一个个字段, 垂直方向上看是一条条记录。作为面向对象的语言, Java 中的的对象是根据类定义创建的。 类之间的引用关系可以认为是嵌套的关系。在 mybatis 中, resultMap 节点定义了结果集和结果对象(JavaBean)之间的映射规则。本文主要讲解的是 resultMap 的解析。1 两个基础类在阅读本文之前,...

2018-10-25 23:53:25 763

原创 Kafka 入门三问

当我在学习一个新技术的时候, 入门阶段, 基本上都遵循是什么->为什么->怎么用这样的原则。1 Kafka 是什么?1.1 背景Kafka 最初是 LinkedIn 的一个内部基础设施系统, 后续捐赠给了 Apache, 目前是 Apache 的一个顶级项目。1.2 定位在官网中, 现定位是分布式流处理平台:可以让你发布和订阅流式的记录。这一方面与消息队列或者企...

2018-10-22 14:02:21 289

原创 mybatis-高级结果映射之一对多(你知道一对多的结果是如何合并的吗)

在一对多的关系中, 主表的数据回对应关联表中的多条数据。 因此, 查询时就会查询出多条结果, 所以, 向类似的情况我们会使用 List 来进行存储关联表中获取到的信息。1 数据准备创建以下的名为 mybatis 的数据库, 并在其下创建4个表。在此就不贴出来建表的 SQL 语句了 , 感兴趣的可以去我的 Github:mybatis-mapping 中获取。1.2 实体类, 接口和XML...

2018-10-18 10:03:47 8708 4

原创 mybatis-高级结果映射之一对一

mybatis的高级结果映射可以很轻松的帮助我们处理一对一, 一对多的数据关系。1 数据准备1.1 数据库创建以下的名为 mybatis 的数据库, 并在其下创建4个表。在此就不贴出来建表的 SQL 语句了 , 感兴趣的可以去我的 Github:mybatis-mapping 中获取。1.2 实体类, 接口和XML使用 mybatis-代码生成器 生成相应的实体类, 接口和XML。...

2018-10-14 11:50:17 510

原创 mybatis 代码生成器(IDEA, Maven)及配置详解(部分配置你应该不知道)

在使用 mybatis 过程中, 当手写 JavaBean和XML 写的越来越多的时候, 就越来越同意出错。这种重复性的工作, 我们当然不希望做那么多。还好, mybatis 为我们提供了强大的代码生成–MybatisGenerator。通过简单的配置, 我们就可以生成各种类型的实体类, Mapper接口, MapperXML文件, Example对象等。 通过这些生成的文件, 我们就可以方...

2018-10-13 12:00:28 282

原创 mybatis百科-结果集映射类ResultMap

ResultMap 对应的是结果集 <resultMap>中的一个结果集。 其基本组成部分中, 含有 ResultMapping 对象。其组成大致如下:本文, 主要讲解一下该类的组成。1 成员变量 // resultMap 节点的 id private String id; // resultMap 节点的 type private Class<?>...

2018-10-23 23:13:45 884

原创 mybatis百科-列映射类ResultMapping

ResultMapping 对象是 mybatis 的 <resultMap> 节点在 ResultMap 对象中基础组成部分.ResultMapping 对象记录了结果集中一列与队友JavaBean中一个属性的对应关系。1 成员变量// Configuration 对象, 看过前面源码的应该知道这个对象的含义private Configuration configurati...

2018-10-22 23:28:46 2284

原创 mybatis 多个接口参数的注解使用方式(@Param)

1 简介1.1 单参数在 Mybatis 中, 很多时候, 我们传入接口的参数只有一个。 对应接口参数的类型有两种, 一种是基本的参数类型, 一种是 JavaBean。例如在根据主键获取对象时, 我们只需要传入一个主键的参数即可。 而在插入, 更新等操作时, 一般会涉及到很多参数, 我们就使用 JavaBean。1.2 多参数但是, 在实际的情况中, 我们遇到类似这样的情况可能:接口...

2018-10-09 09:40:18 13588

原创 mybatis源码-解析配置文件(四-1)之配置文件Mapper解析(cache)

相关文章推荐mybatis 缓存的使用, 看这篇就够了mybatis源码-解析配置文件(四)之配置文件Mapper解析1. 简介本文章主要讲解的是, xxxMapper.xml 文件中, cache 节点的源码。2. 解析XMLMapperBuilder.cacheElement() 方法主要负责解析 <cache> private void c...

2018-10-05 00:16:23 231

原创 mybatis源码-解析配置文件(四)之配置文件Mapper解析

在 mybatis源码-解析配置文件(三)之配置文件Configuration解析 中, 讲解了 Configuration 是如何解析的。其中, mappers作为configuration节点的一部分配置, 在本文章中, 我们讲解解析mappers节点, 即 xxxMapper.xml 文件的解析。1 解析入口在解析 mybatis-config.xml 时, 会进行解析 xxxMapp...

2018-10-04 00:46:56 287

原创 mybatis抽取出的工具-(一)通用标记解析器(即拿即用)

在深入理解 mybatis 原理过程中, 我不单单是想理解整个 mybatis 是怎么运行的, 我还想从这个过程中提取出一些对自己有益的编程方法, 编程思想, 注释, 以及一些实用工具类。1. 简介1.1 mybatis-config.xml 中使用在 mybatis-config.xml 文件中, 我们常常看到类似的配置<properties> <propert...

2018-10-03 13:26:05 894

原创 mybatis 缓存的使用, 看这篇就够了

缓存的重要性是不言而喻的。 使用缓存, 我们可以避免频繁的与数据库进行交互, 尤其是在查询越多、缓存命中率越高的情况下, 使用缓存对性能的提高更明显。mybatis 也提供了对缓存的支持, 分为一级缓存和二级缓存。 但是在默认的情况下, 只开启一级缓存(一级缓存是对同一个 SqlSession 而言的)。以下的项目是在mybatis 初步使用(IDEA的Maven项目, 超详细)的基础上进行。...

2018-09-30 13:28:33 57696 19

原创 mybatis源码-解析配置文件(三)之配置文件Configuration解析(超详细, 值得收藏)

1. 简介1.1 系列内容本系列文章讲解的是mybatis解析配置文件内部的逻辑, 即 Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);...

2018-09-19 09:13:59 911

原创 mybatis源码-解析配置文件(三)之配置文件Configuration解析(超详细, 值得收藏)

简介在之前的文章《mybatis 初步使用(IDEA的Maven项目, 超详细)》中, 讲解了mybatis的初步使用, 并总结了以下mybatis的执行流程: 通过 Resources 工具类读取 mybatis-config.xml, 存入 Reader; SqlSessionFactoryBuilder使用上一步获得的reader创建SqlSessionFactory对...

2018-09-19 09:12:14 450

原创 mybatis源码-解析配置文件(一)之XML的DOM解析方式

简介在之前的文章《mybatis 初步使用(IDEA的Maven项目, 超详细)》中, 讲解了mybatis的初步使用, 并总结了以下mybatis的执行流程:通过 Resources 工具类读取 mybatis-config.xml, 存入 Reader;SqlSessionFactoryBuilder使用上一步获得的reader创建SqlSessionFactory对象;通过 sq...

2018-09-19 00:17:17 450

原创 mybatis源码-解析配置文件(二)之解析的流程

1. 简介在之前的文章《mybatis 初步使用(IDEA的Maven项目, 超详细)》中, 讲解了mybatis的初步使用, 并总结了以下mybatis的执行流程: 通过 Resources 工具类读取 mybatis-config.xml, 存入 Reader; SqlSessionFactoryBuilder 使用上一步获得的 reader 创建 SqlSessionF...

2018-09-16 08:55:18 718

原创 Java设计模式-建造者(Builder)模式

最近在看Mybatis的源码, 在阅读解析 XML 配置文件的过程中, 发现使用到了建造者(Builder)模式。 因此, 打算重温一下该设计模式。由来假设我们需要画一个小人, 我们可能会有以下的构造函数定义:public Person(HeadType headType, HairType hairType, HairColor hairColor, FaceType fac...

2018-09-14 08:59:13 317

原创 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 12017 3

原创 静态代理和动态代理

代理模式(静态代理) 代理模式是为其他对象提供一种代理以控制对这个对象的访问。定义上也不算好理解, 上一个 《大话设计模式》 的图。Subject 类(一般是抽象类或接口), 定义了一个方法。RealSubject 类实现了这个接口, 正常的情况我们只需要 new 出这个类的实例对象, 然后调用这个方法就可以了。但是, 如果我们有需求说想要在这个方法的前面和后面进行一...

2018-09-03 21:58:20 135

原创 Java 多线程(五)之 synchronized 的使用

并发编程为我们带来了很多便利, 但同时也带来了线程安全问题。线程安全线程安全性的定义: 当多个线程访问某一个类时, 这个类始终能表示出正确的行为, 那么就称这个类是线程安全的。其产生的原因可以归结如下:1.共享数据: 只有共享的数据才会产生带来安全性问题。 如果是方法内部声明的变量, 其是在虚拟机栈中, 为每个线程独享, 不存在安全性问题。2.多个线程对共享数据进...

2018-09-01 12:53:20 2050

原创 Java 多线程(四)之守护线程

定义Java 中有两种线程: 一种是用户线程(User Thread),一种是守护线程(Daemon Thread)。守护线程是一种特殊的线程, 它的特殊有“陪伴”的含义, 当线程中不存在非守护线程时, 则守护线程自动销毁。垃圾回收线程就是一种守护线程, 当线程中没有非守护线程了, 则垃圾回收线程就会自动销毁。因此, 守护线程的作用就是为其他非守护线程的线程服务, 当非守护线程不存...

2018-08-29 22:57:33 424

原创 HashMap 源码解析(一)之使用、构造以及计算容量

简介HashMap 是基于哈希表的 Map 接口的实现。 它的使用频率是非常的高。集合和映射作为集合框架中的一员,在深入之前, 让我们先来简单了解一下集合框架以及 HashMap 在集合框架中的位置。从图中可以看出 1. 集合框架分为两种, 即集合(Collections)和映射(Map) 2. HashMap 是 AbstractMap 的子类。而 AbstractM...

2018-08-28 23:30:48 757

原创 Java 多线程(三)之线程状态及其验证

线程状态 Thread.State状态类型在指定的时间点, 一个线程有且只有一种状态。 这些状态是 JVM 的状态, 他们并没有反映操作系统的状态。定义Thread 的状态是定义在 Thread 内部的枚举类型。public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED...

2018-08-27 23:44:24 3938

原创 Java 多线程(二)之 Thread 优先级

Thread 中线程优先级相关属性每个线程均有优先级,在 Thread 中, 与优先级对应的属性如下:/** * 线程的优先级属性 */private int priority;/** * 线程所能拥有的最大优先级. */public final static int MIN_PRIORITY = 1;/** * 线程默认的优先级. */public final...

2018-08-23 23:20:42 3888

原创 Java 多线程之 Thread 类 和 Runnable 接口初步使用

Thread 类Thread 类是在 JDK1.0 时就存在的, 在 Java 中接触的多线程开发基本上都会从这个类开始。Thread之定义线程类使用 Thread 创建线程的方法很简单, Thread 是一个类, 在需要创建线程时, 我们只需要继承这个类, 并将 run() 方法进行重写即可。class PrimeThread extends Thread { l...

2018-08-21 23:39:21 238

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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