Mybatis快速入门
MyBatis 快速入门 MyBatis 的前身就是 iBatis ,是一个作用在数据持久层的对象关系映射(Object Relational Mapping,简称 ORM)框架。 什么是 MyBatisMyBatis 是一款持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。 快速入门 这里,我将以一个入门级的示例来演示 Mybatis 是如何工作的。 注:本文后面章节中的原理、源码部分也将基于这个示例来进行讲解。 数据库准备在本示例中,需要针对一张用户表进行 CRUD 操作。其数据模型如下: 12345678910111213CREATE TABLE IF NOT EXISTS user ( id BIGINT(10) UNSIGNED NOT NULL AUTO_INCREMENT CO...
Java并发简介
并发概念进程和线程 进程: 可以视为程序的一个实例。 线程: 线程作为最小调度单位,进程作为资源分配的最小单位。 一个进程之内可以分为一到多个线程。 一个线是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行 Java 中,线程作为最小调度单位,进程作为资源分配的最小单位。 在 windows 中进程是不活动的,只是作为线程的容器。 进程和线程的差异: 一个程序至少有一个进程,一个进程至少有一个线程。 线程比进程划分更细,所以执行开销更小,并发性更高 进程是一个实体,拥有独立的资源;而同一个进程中的资源是多个线程共享的。 并行与并发单核 cpu 下,线程实际还是串行执行的。操作系统中有一个组件叫做任务调度器,将 cpu 的时间片(windows下时间片最小约为 15 毫秒)分给不同的程序使用,只是由于 cpu 在线程间(时间片很短)的切换非常快,人类感觉是 同时运行的 。总结为一句话就是: 微观串行,宏观并行 ,一般会将这种 线程轮流使用 CPU 的做法称为并发, concurrent cpu 时间片1 时间片2 时间片3 时间片4 co...
Spring 之 JPA
Spring 之 JPAJPA 为对象关系映射提供了一种基于 POJO 的持久化模型。 简化数据持久化代码的开发 为 Java 社区屏蔽不同持久化 API 的差异 Repository 是数据访问的抽象接口,JPA 是这种抽象的具体实现标准 快速入门(1)在 pom.xml 中引入依赖 1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId></dependency> (2)设置启动注解 123456789101112// 【可选】指定扫描的 Entity 目录,如果不指定,会扫描全部目录@EntityScan("io.github.dunwu.springboot.data.jpa")// 【可选】指定扫描的 Repository 目录,如果不指定,会扫描全部目录@EnableJpaReposit...
Spring 之事务
理解事务在软件开发领域,全有或全无的操作被称为事务(transaction)。事务允许你将几个操作组合成一个要么全部发生要么全部不发生的工作单元。传统上 Java EE 开发对事务管理有两种选择:全局事务或本地事务,两者都有很大的局限性。 事务应该具有 4 个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为 ACID。 快速入门创建 Service 接口实现类 TransactionServiceA 类,在 methodA() 方法中先往 tablea 表格插入一条数据,随后会调用 TransactionServiceB 服务的 methodB() 方法往 tableb 表格中插入一条数据。 123456789101112131415@Servicepublic class TransactionServiceA { @Autowired private TableService tableService; @Autowired private TransactionServiceB transactionServiceB; pub...
SpringBoot 之 Profile
SpringBoot 之 Profile 一个应用为了在不同的环境下工作,常常会有不同的配置,代码逻辑处理。Spring Boot 对此提供了简便的支持。 关键词: @Profile、spring.profiles.active 区分环境的配置properties 配置假设,一个应用的工作环境有:dev、test、prod 那么,我们可以添加 4 个配置文件: applcation.properties - 公共配置 application-dev.properties - 开发环境配置 application-test.properties - 测试环境配置 application-prod.properties - 生产环境配置 在 applcation.properties 文件中可以通过以下配置来激活 profile: 1spring.profiles.active = test yml 配置与 properties 文件类似,我们也可以添加 4 个配置文件: applcation.yml - 公共配置 application-dev.yml - 开发环境配置 ...
SpringBoot 之属性加载详解
加载 property 顺序Spring Boot 加载 property 顺序如下: Devtools 全局配置 (当 devtools 被激活 ~/.spring-boot-devtools.properties). 测试环境中的 @TestPropertySource 注解配置 测试环境中的属性 properties:@SpringBootTest 和 测试注解. 命令行参数 SPRING_APPLICATION_JSON 属性 ServletConfig 初始化参数 ServletContext 初始化参数 JNDI attributes from 通过 java:comp/env 配置的 JNDI 属性 Java 系统属性 (System.getProperties()) 操作系统环境比那里 RandomValuePropertySource 加载 random.* 形式的属性 jar 包外的 application-{profile}.properties 或 application-{profile}.yml 配置 jar ...
SpringBoot 之快速入门
Spring Boot 简介Spring Boot 可以让使用者非常方便的创建 Spring 应用。 Spring Boot 的目标是: 为所有 Spring 开发者提供更快且可广泛访问的入门体验。 开箱即用 提供一系列通用的非功能特性(例如嵌入式服务、安全、指标、健康检查和外部化配置) 完全不需要代码生成,也不需要 XML 配置。 Spring Boot 系统要求Spring Boot 的构建工具要求: Build Tool Version Maven 3.5+ Gradle 6.8.x, 6.9.x, and 7.x Spring Boot 支持的 Servlet 容器: Name Servlet Version Tomcat 9.0 4.0 Jetty 9.4 3.1 Jetty 10.0 4.0 Undertow 2.0 4.0 部署第一个 Spring Boot 项目 本节介绍如何开发一个小的“Hello World!” web 应用示例,来展示 Spring Boot 的一些关键功能。我们使用 Maven 来构建这个...
Spring 校验
Spring 校验Java API 规范(JSR303)定义了Bean校验的标准validation-api,但没有提供实现。hibernate validation是对这个规范的实现,并增加了校验注解如@Email、@Length等。Spring Validation是对hibernate validation的二次封装,用于支持spring mvc参数自动校验。 快速入门引入依赖如果 spring-boot 版本小于 2.3.x,spring-boot-starter-web 会自动传入 hibernate-validator 依赖。如果 spring-boot 版本大于 2.3.x,则需要手动引入依赖: 12345<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator-parent</artifactId> <version>6.2.5.Final</version>...
Spring 资源管理
Spring 资源管理 Version 6.0.3 Resource 接口相对标准 URL 访问机制,Spring 的 org.springframework.core.io.Resource 接口抽象了对底层资源的访问接口,提供了一套更好的访问方式。 12345678910111213141516171819202122232425262728public interface Resource extends InputStreamSource { boolean exists(); boolean isReadable(); boolean isOpen(); boolean isFile(); URL getURL() throws IOException; URI getURI() throws IOException; File getFile() throws IOException; ReadableByteChannel readableChannel() throws IOException; l...
Spring AOP
AOP 概念什么是 AOPAOP(Aspect-Oriented Programming,即 面向切面编程)与 OOP( Object-Oriented Programming,面向对象编程) 相辅相成,提供了与 OOP 不同的抽象软件结构的视角。 在 OOP 中,我们以类(class)作为我们的基本单元,而 AOP 中的基本单元是 Aspect(切面) 术语Aspect(切面)aspect 由 pointcount 和 advice 组成, 它既包含了横切逻辑的定义, 也包括了连接点的定义. Spring AOP 就是负责实施切面的框架, 它将切面所定义的横切逻辑织入到切面所指定的连接点中.AOP 的工作重心在于如何将增强织入目标对象的连接点上, 这里包含两个工作: 如何通过 pointcut 和 advice 定位到特定的 joinpoint 上 如何在 advice 中编写切面代码. 可以简单地认为, 使用 @Aspect 注解的类就是切面. advice(增强)由 aspect 添加到特定的 join point(即满足 point cut 规则的 join poin...









