自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

远方的灯塔

技术改变世界

  • 博客(38)
  • 收藏
  • 关注

原创 自定义MyBatis插件

本文介绍了如何通过自定义插件来深入理解 MyBatis 插件的原理和机制,包括创建 Maven 项目、导入 MyBatis 相关依赖、完善配置文件等。同时还涵盖了插件接口-Interceptor 的相关方法以及自定义插件的实现过程。

2024-06-13 11:57:49 420

原创 MyBatis插件机制介绍与原理

该博客介绍了插件的概念及其在 MyBatis 中的应用。MyBatis 插件通过拦截和增强核心组件,如 Executor、StatementHandler、ParameterHandler 和 ResultSetHandler,实现了灵活且可扩展的持久层操作方式。插件的机制利用动态代理技术,使得开发人员能够根据需求选择适合的数据库操作方式,并轻松扩展 MyBatis 的功能。

2024-06-12 11:13:05 343

原创 MyBatis-RedisCache源码分析

RedisCache 是 MyBatis 的二级缓存实现类,通过操作 jedis 来实现数据的存储和获取。构造方法中通过 RedisConfigurationBuilder 创建 RedisConfig 对象,并使用该对象创建 Jedis 连接池。

2024-06-11 14:09:42 439

原创 MyBatis的二级缓存整合redis

MyBatis的二级缓存在分布式环境下存在问题,可以使用分布式缓存解决。使用redis作为MyBatis的二级缓存,需要导入mybatis-redis包,并根据配置文件设置redis连接参数。修改Mapper接口和查询方法的注解,开启缓存功能。测试验证结果是否命中缓存,并查看redis缓存内容。

2024-06-05 16:14:01 892

原创 深度剖析MyBatis的二级缓存

MyBatis的二级缓存是基于mapper的namespace的,多个SqlSession可以共享同一个二级缓存区域。使用二级缓存需要手动开启,并且可以通过useCache和flushCache属性来控制缓存的使用和刷新。

2024-05-15 10:48:13 423

原创 深度剖析MyBatis的一级缓存

MyBatis的一级缓存是默认开启的,在同一个SqlSession中,对于相同的查询语句会先从缓存中查找结果,如果不存在则去数据库查询,并将查询结果保存到缓存中。当SqlSession执行了commit操作时,会清空缓存,以保证数据的一致性。

2024-05-15 10:36:31 330

原创 MyBatis缓存的概念

本文介绍了缓存的概念,并着重介绍了MyBatis对缓存的支持,包括一级缓存和二级缓存。一级缓存是SqlSession级别的,而二级缓存是Mapper级别的,能够提高系统的响应速度。

2024-05-14 14:08:32 159

原创 MyBatis的注解实现复杂映射开发

本文介绍了使用 XML 配置方式实现复杂映射的方法,以及在注解开发中通过 @Results、@Result、@One 和 @Many 注解来完成复杂关系的配置,包括一对一查询的模型和语句以及创建 User 和 Order 实体。

2024-05-14 13:56:01 657

原创 MyBatis复杂映射开发之多对多查询

本文介绍了多对多关系模型中用户表和角色表的关系,以及如何通过查询语句查询所有用户及其对应的角色。通过修改实体类和接口方法,并配置对应的XML文件,展示了查询所有用户及其角色的示例。

2024-03-05 09:48:30 944

原创 MyBatis复杂映射开发之一对多查询

本文介绍了如何进行一对多查询模型,在用户和订单表关系中,展示了通过 SQL 查询用户及其订单信息,并通过 Java 代码实现了在 MyBatis 中查询所有用户信息以及用户关联的订单信息。

2024-02-26 10:12:20 430

原创 MyBatis复杂映射开发之一对一查询

本文介绍了一对一查询需求下的用户表和订单表关系,展示了如何查询一个订单并同时查询出对应的用户信息。通过创建 User 和 Order 实体,并建立关联,实现了订单和用户信息的查询功能。

2024-02-21 10:19:32 867

原创 MyBatis配置与使用指南:基本流程、常用配置解析及动态SQL实践

本文详细介绍了MyBatis的基本流程,包括配置文件加载、SqlSessionFactory工厂创建等,并解析了常用配置,如日志输出、数据源管理、类型别名等。此外,还讨论了动态SQL的实践,包括条件查询、SQL片段抽取等技巧。

2024-02-18 14:54:11 955

原创 MyBatis的基本使用

本文介绍了使用MyBatis进行数据库操作的开发步骤,包括添加MyBatis坐标、创建user数据表、编写User实体类和映射文件UserMapper.xml。通过示例代码展示了相关配置和SQL操作,帮助开发者快速入门MyBatis。

2024-01-18 10:34:25 355

原创 MyBatis的基本介绍及优势

MyBatis(原名iBatis)是一个半自动轻量级的ORM持久层框架,起源于Apache软件基金会的iBatis项目,2010年迁移到Google Code并更名为MyBatis,2013年再迁移到GitHub。该框架通过定制化SQL、存储过程和高级映射,避免了JDBC代码,支持使用简单的XML或注解配置实现类、接口和POJO映射为数据库记录。文章还介绍了ORM思想,对比了MyBatis和Hibernate,强调了MyBatis的优势,着重于业务和数据的分离。

2024-01-11 12:04:46 413

原创 使用getMapper方式对自定义持久层框架进行优化

本文介绍了通过使用代理模式优化MyBatis持久层框架中的Dao层代码重复和硬编码问题。通过引入getMapper方法和动态代理,实现Dao层接口的自动生成,简化了整个操作过程模板,同时消除了硬编码,提高了代码的灵活性和可维护性。

2024-01-08 14:46:17 343

原创 自定义持久层框架的代码实现二

本文实现了一个简单的MyBatis框架,包括数据库连接、SQL语句解析、参数设置、结果封装等功能。具体实现包括配置文件加载、Mapper接口与SQL语句映射、动态SQL处理、连接池管理等。通过这个框架可以简化数据库操作,提高开发效率。

2023-11-08 12:25:12 62

原创 自定义持久层框架的代码实现一

本文介绍了一个基于Java和Kotlin的MyBatis框架示例项目的结构和关键代码部分,包括配置文件、Mapper文件、资源处理类以及SqlSessionFactory的构建对象。示例项目用于展示如何配置MyBatis,读取资源,构建SqlSessionFactory,以便进行数据库操作。

2023-11-08 12:23:50 54

原创 自定义持久层框架的设计思路

本文介绍了自定义持久层框架的核心要点,实现思路,以及在项目和框架本身两方面的实现方式。使用端需要引入框架的jar包并提供数据库和SQL配置信息,而框架本身对JDBC代码进行封装,包括加载配置文件、创建JavaBean、解析配置文件、生成SqlSessionFactory以及实现CRUD操作。

2023-11-08 12:22:47 48

原创 解析原生JDBC开发问题与优化方案

本文介绍了在Java中使用JDBC进行数据库操作时可能遇到的问题,如数据库连接频繁创建释放、SQL硬编码、结果集解析困难等,并提出了解决方案。作者通过使用数据库连接池、将SQL语句抽取到配置文件、利用反射内省等技术来解决这些问题,从而提高了系统性能和代码可维护性。

2023-11-08 12:19:33 64 1

原创 macOS搭建openjdk8编译环境

本文介绍了在macOS上编译OpenJDK的环境准备和步骤,包括安装必要的软件和工具,解决常见错误,以及提供了相关资源链接。文章详细讲解了如何配置Xcode、安装ccache、解决编译错误,并提供了编译OpenJDK的命令。适用于想要在macOS上编译OpenJDK的开发者。

2023-09-21 13:40:24 228

原创 Netty源码剖析

本文对Netty源码进行了深入剖析,透过Netty源码来理解Netty框架背后的原理。Nety源码剖析下载netty源码https://github.com/netty/netty导入netty源码直接IDEA导入Maven项目选择 pom.xml 即可。新建demo项目在example项目下面新建最简单的demoEventLoop事件循环组(线程组)源码EventLoopGroup 是一组 EventLoop 的抽象,Netty 为了更好的利用多核 CPU 资源,一般会有多个 Ev

2022-05-04 14:07:09 2623

原创 Netty高级进阶之Netty中的粘包和拆包的解决方案

本文阐述了Netty中常见的粘包和拆包问题,并深入分析了常用的解决方案。Netty高级进阶之Netty中的粘包和拆包的解决方案粘包和拆包简介粘包和拆包是TCP网络编程中不可避免的,无论是服务端和客户端,当读取或发送消息时,都需要考虑TCP底层的粘包/拆包机制。TCP是个流协议,流,就是没有界限的一组数据。TCP底层并不了解上层业务数据的具体含义它会根据TCP的缓冲区的实际情况进行包的拆分。在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小包封装成一个大的数据包发送,这

2022-05-04 14:01:48 1386 1

原创 Netty高级进阶之基于Netty的Websocket开发网页聊天室

本通过实战演练,学习了如何基于Netty的websocket开发一个网页聊天室。Netty高级进阶之基于Netty的Websocket开发网页聊天室Webdocket简介Websockt是一种在单个TCP连接上进行全双工通信的协议。Websocket使客户端和服务端的数据交互变得简单,允许服务器主动向客户端推送数据。在Websocket API中,客户端只需要与服务器完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。他的应用场景如下:社交订阅协同编辑/编程股票基金报价

2022-05-04 14:00:24 1483

原创 Netty高级进阶之基于Netty的HTTP服务器开发

本通过实战演练,学习了如何基于Netty开发一个HTTP服务器。Netty高级进阶之基于Netty的HTTP服务器开发介绍Netty的HTTP协议栈可靠性高,性能优异。相对于传统的Tomcat、Jetty等服务器,它更加轻量级和小巧,灵活性和定制型也更好。功能需求Netty服务器在8080端口监听浏览器发出请求”http://localhost:8080“服务器回复消息给客户端”你好,我是Netty服务器“,并对特定请求资源进行过滤服务端代码实现NettyHttpServer

2022-05-04 13:57:24 1503

原创 Netty高级进阶之基于Netty的群聊天室案例

本文通过实战演练,学习了如何使用Netty开发一个群聊天室。Netty高级进阶之基于Netty的群聊天室案例案例要求编写一个 Netty 群聊系统,实现服务器端和客户端之间的数据简单通讯实现多人群聊服务器端:可以监测用户上线,离线,并实现消息转发功能客户端:可以发送消息给其它所有用户,同时可以接受其它用户发送的消息聊天室服务端编写服务端/** * 聊天室服务端 * * @name: NettyChatServer * @author: terwer * @date: 2

2022-05-04 13:56:26 670

原创 Netty高级进阶之Netty解码器

本文介绍了Netty编解码器的继承体系、常用API以及实际应用。netty高级Netty编解码器Java的编解码编码(Encode)称为序列化,它将对象序列为字节数组,用于网络传输、数据持久化或者其他用途。解码(Decode)称为反序列化,它将从网络、磁盘等读取的字节数组还原成原始对象(通常是原始对象),以方便后面的业务逻辑操作。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OMFJo9YH-1651643667787)(https://cdn.jsde

2022-05-04 13:54:44 3360

原创 Netty入门与异步模型

本文通过一个Netty入门案例来阐述Netty的异步模型。netty入门案例Netty是由JBOSS提供的一个开源框架,它的Maven坐标如下:<dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.76.Final</version></dependency&gt

2022-05-04 13:53:22 400

原创 Netty核心API介绍

本文介绍了Netty的核心API以及他们的使用。Netty核心API介绍ChannelHandler及其实现类API关系如下:#mermaid-svg-AcY3OPMp0F8Vaam5 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-AcY3OPMp0F8Vaam5 .error-icon{fill:#552222;}#mermaid-svg-AcY3OPMp0F

2022-05-04 13:50:26 716

原创 Netty核心原理与线程模型

本文深入浅出的介绍了netty基础及高级使用,并通过分析netty源码来理解netty背后的原理。netty核心原理netty介绍官网:https://netty.io/原生NIO存在的问题NIO类库和API繁杂,使用麻烦。需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。需要具备其他额外技能:要熟悉Java多线程编程,因为NIO涉及到Reactor模式,必须对多线程和网络编程非常熟悉,才能编写出高质量的NIO程序

2022-05-04 13:46:34 162

原创 RPC架构设计

本文阐述了socket编程、IO网络模型,netty的原理以及Netty源代码的分析。RPC架构设计2022/03/01 校对完成文章更新历史2022/03/01 初稿。socketsocket网络编程socket概述socket套接字是两台主机之间逻辑连接的端点。TCP/IP协议是传输层协议,主要解决数据在网络中的传输socket是网络通信之间的抽象接口,它包含网络通信的五种基础信息:连接使用的协议、本地主机的ip地址、本地进程协议端口、远程主机ip地址、远程进程的协议端口。s

2022-05-04 13:40:29 1296

原创 自定义RPC框架

分布式的基础问题是远程服务是怎么通讯的。`java` 领域有很多可实现远程通讯的技术,例如:`RMI` 、`Hessian` 、`SOAP` 、`ESB` 和 `JMS` 等。

2022-03-14 01:00:31 920

原创 Session一致性问题及解决方案

Session问题原因分析从根本上来说是因为Http协议是无状态的协议。客户端和服务端在某次会话中产 生的数据不会被保留下来,所以第二次请求服务端无法认识到你曾经来过, Http为什么要设计为无状态 协议?早期都是静态⻚面无所谓有无状态,后来有动态的内容更丰富,就需要有状态,出现了两种用于 保持Http状态的技术,那就是Cookie和Session。场景:nginx默认轮询策略Session一致性的方案Nginx的 IP_Hash 策略(可以使用)同一个客户端IP的请求都会被路由到同一个目标服.

2022-02-09 00:20:01 497

原创 分布式调度问题及解决方案

调度—>定时任务,分布式调度—>在分布式集群环境下定时任务这件事Elastic-job(当当网开源的分布式调度框架)定时任务的场景定时任务形式:每隔一定时间/特定某一时刻执行 例如:订单审核、出库订单超时自动取消、支付退款礼券同步、生成、发放作业物流信息推送、抓取作业、退换货处理作业数据积压监控、日志监控、服务可用性探测作业定时备份数据金融系统每天的定时结算数据归档、清理作业报表、离线数据分析作业什么是分布式调度1)运行在分布式集群环境下的调度任务(同一个定时任务程序

2022-02-09 00:06:31 2529

原创 分布式ID问题及解决方案

为什么需要分布式ID分布式集群环境下的全局唯一ID分布式ID的方案UUID指的是Universally Unique Identifier,翻译为中文是通用唯一识别码产生重复 UUID 并造成错误的情况非常低,因此大可不必考虑此问题。 Java中得到一个UUID,可以使用java.util包提供的方法public class MyTest { public static void main(String[] args) { System.out.println(java

2022-02-08 16:44:39 1246

原创 分布式集群同步时钟问题

时钟不同步导致的问题时钟这里指的是服务器时间时钟不一致问题示例,订单集群时钟同步配置集群时钟同步思路1、分布式集群中各个服务器节点都可以连接互联网,思路如下操作方式#使用 ntpdate 网络时间同步命令ntpdate -u ntp.api.bz #从一个时间服务器同步时间windows有计划任务Linux也有定时任务,crond,可以使用linux的定时任务,每隔10分钟执行一次ntpdate命令2、分布式集群中某一个服务器节点可以访问互联网或者所有节点都不能够访问互联网,思路

2022-02-08 16:02:51 212

原创 一致性hash问题及解决方案

分布式和集群的区别分布式一定是集群,但是集群不一定是分布式。集群是多个实例一起工作,分布式啊将一个系统拆分,拆分之后就是多个实例。复制性的集群不是拆分,是复制。更清晰的解释https://cloud.tencent.com/developer/article/1579435大白话的解释专业案例解释hash算法回顾什么是hash算法哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。WikiPedia的解释A hash

2022-01-29 21:55:59 1103

原创 Spring Boot实现一致性Session应用实例

常规方法在Nginx轮询策略的时候会出现session不一致的问题,解决办法就是session保存到redis。

2022-01-26 11:28:38 353

原创 Tomcat的体系架构及原理

http请求到达服务器之后,会交给Servlet容器来处理,Servlet通过Sevlet接口调用业务类。

2022-01-20 22:18:14 1786

空空如也

空空如也

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

TA关注的人

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