Clay 的技术空间

用进废退 | 艺不压身

大纲

缓存机制

MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。MyBatis 中默认定义了两级缓存:

  • 一级缓存和二级缓存
    • 默认情况下,只有一级缓存(SqlSession 级别的缓存,也称为本地缓存)开启
    • 二级缓存需要手动开启和配置,它是基于 namespace 级别的缓存
    • 为了提高扩展性,MyBatis 定义了缓存接口 Cache,可以通过实现 Cache 接口来自定义二级缓存
阅读全文 »

大纲

前言

本文的所有案例代码,若没有特别说明,默认都基于以下的表结构和 JavaBean 类编写,可以直接从 GitHub 下载对应章节 mybatis-lesson-15

1
2
3
4
5
6
7
8
CREATE TABLE `t_employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`last_name` varchar(255) DEFAULT NULL,
`gender` char(1) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`dept_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Employee {

private Long id;
private String lastName;
private String gender;
private String email;
private Department department;

......

@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", gender=" + gender + ", email=" + email + ", department=" + department + "]";
}
}
阅读全文 »

大纲

Java 中四种的引用

在 Java 中有四种引用,分别是:强引用、软引用、弱引用、虚引用。伴随这四种引用一起使用的,还有 WeakHashMap、ReferenceQueue(引用队列)等。

阅读全文 »

大纲

SQL 映射文件

select 标签

本节所需的案例代码,可以直接从 GitHub 下载对应章节 mybatis-lesson-7

属性说明

select 标签用于定义查询操作,拥有以下常用属性:

  • id:唯一标识符,用来引用这条语句,需要与接口的方法名一致。
  • parameterType:参数类型,可以不传递,MyBatis 会根据 TypeHandler 自动推断参数类型。
  • resultType:返回值类型,可以是类型别名或者全限定类名。如果返回结果是集合,则其值是集合中元素的类型。resultType 不能和 resultMap 同时使用。

提示

select 标签还拥有很多其他属性,详细说明请点击这里查看。

阅读全文 »

大纲

JVM 的参数类型

标配参数

参数参数说明使用例子
-version 查看版本号 java -version
-help 查看命令帮助手册 java -help
-showversion 查看版本信息 java -showversion
阅读全文 »

大纲

SQL 映射文件

MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。SQL 映射文件只有很少的几个顶级标签(按照应被定义的顺序列出):

  • cache – 该命名空间的缓存配置
  • cache-ref – 引用其它命名空间的缓存配置
  • resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强大的标签
  • parameterMap – 老式风格的参数映射,此标签已被废弃,并可能在将来被移除,请使用行内参数映射
  • sql – 可被其它语句引用的可重用语句块
  • insert – 映射插入语句
  • update – 映射更新语句
  • delete – 映射删除语句
  • select – 映射查询语句
阅读全文 »

大纲

前言

本节所需的案例代码,可以直接从 GitHub 下载对应章节 mybatis-lesson-3

MyBatis 全局配置文件

MyBatis 默认的全局配置文件是 mybatis-config.xml,且 XML 配置文件里的标签是有顺序的,由前到后依次是 properties, settings, typeAliases, typeHandlers, objectFactory, objectWrapperFactory, reflectorFactory, plugins, environments, databaseIdProvider, mappers

属性(properties)

在企业级开发中,往往会将数据库的连接信息写到单独的配置文件中,这样日后方便统一管理。MyBatis 为此提供了 properties 标签,用于读取外部的的 Properties 配置文件,读取到的属性值可以在整个 MyBatis 配置文件中用来替换需要动态配置的属性值。

  • config.properties
1
2
3
dataSource.user=root
dataSource.password=123456
dataSource.jdbcUrl=jdbc:mysql://127.0.0.1:3306/mybatis_lesson?characterEncoding=utf8&autoReconnect=true&useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
阅读全文 »

大纲

JVM 的垃圾收集机制

确定对象是否可以回收

在 Java 中,如何确定一个对象是否可以回收呢?常用的算法有两种:引用计数算法、可达性分析算法。

引用计数算法

引用计数算法(Reference Counting)是通过判断对象的引用数量来决定对象是否可以被回收。它的思路是给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加 1;当引用失效时,计数器值就减 1;任何时刻计数器为 0 的对象就是不可能再被使用的。大部分场景下,这个算法都是不错,效率也比较高;但是 Java 虚拟机里面没有选用引用计数算法来管理内存,其中最主要的原因是它很难解决对象之间相互循环引用的问题;而且对对象赋值时均要维护引用计数器,同时计数器本身也有一定的消耗。

阅读全文 »

AOP 的常用注解

  • @Before:前置通知,在目标方法执行之前执行
  • @After:后置通知,在目标方法执行之后执行(始终会执行)
  • @AfterReturning:后置返回后通知,在目标方法正常返回后执行(发生异常不会执行)
  • @AfterThrowing:后置异常通知,在目标方法抛出异常后执行
  • @Around: 环绕通知,可以在目标方法执行前后执行自定义逻辑
  • @Pointcut:定义切入点,指定在哪些连接点上应用切面的逻辑
  • @Aspect:定义切面,通常与 @Component 结合使用,将其标记为 Spring 容器中的一个 Bean
阅读全文 »
0%