自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

横竖撇折点

一笔一划,记录我的爬坑之路

  • 博客(402)
  • 资源 (3)
  • 收藏
  • 关注

原创 Full GC 的触发及影响

JVM的Full GC会对整个堆内存进行回收,频繁触发会严重影响系统性能。电商系统在高并发场景下容易因老年代空间不足而触发Full GC,导致应用停顿和响应延迟。JVM通过垃圾回收器的迭代(从Serial到G1)、内存分配优化(栈上分配、大对象处理)以及元空间等改进措施,逐步减少Full GC的影响。示例代码展示了订单对象累积导致Full GC的情况,建议通过限制对象数量、调整JVM参数(增大堆内存、选用G1回收器)等方式优化系统性能。

2025-05-28 17:24:56 613

原创 Java并发知识点,ThreadLocal详解

ThreadLocal是一种线程级别的存储机制,适用于在多线程环境中为每个线程提供独立的变量副本。在开发电商网站时,ThreadLocal可以用于存储用户信息,使得在处理用户请求的整个过程中,各个方法都能方便地访问这些信息,而无需显式传递参数。例如,用户登录后,可以将用户信息存储在ThreadLocal中,后续的业务逻辑可以直接从中获取用户数据,简化代码并减少错误。然而,使用ThreadLocal时需注意线程池中的线程复用问题,必须在请求结束时清理ThreadLocal,以避免内存泄漏和数据混淆。此外,Th

2025-05-12 10:55:39 213

原创 Linux服务器上部署Docker全程指南,并将JDK1.8、MySQL、Redis和SpringBoot服务打包成Docker容器并启动

本文详细介绍了在CentOS系统上安装和配置Docker的步骤,包括安装依赖工具、添加Docker仓库、安装Docker引擎、启动Docker服务以及验证安装。此外,还提供了配置Docker镜像加速的方法,并演示了如何在Docker容器中安装JDK1.8、部署MySQL和Redis,以及如何将SpringBoot应用打包为Docker镜像并运行。最后,文章总结了完整启动流程、注意事项和常见问题的解决方案,帮助用户顺利使用Docker部署和管理应用。

2025-05-09 16:14:37 359 1

原创 高级Java开发工程师面试题,流计算 Flink面试题,流计算窗口机制与工业物联网设备监控,基于流计算的工业设备状态追踪与故障预测,流计算与批处理的混合架构设计(工业数据湖场景)

某工业数据湖需同时支持实时分析(如设备告警)和离线分析(如历史数据趋势)。工业物联网中,某工厂部署了数千个传感器实时监测设备温度、振动等数据。某工厂的生产线设备需实时追踪运行状态(如转速、压力),并预测潜在故障。

2025-05-07 17:01:22 1068

原创 JVM的FullGC有多么可怕,如何避免FullGC

如果老年代被塞得太满,JVM就不得不启动Full GC,收拾整个堆(包括Young和Old),这时候整个JVM线程都会被暂停,用户请求响应时间瞬间飙升。在实际开发中,合理配置GC参数、选择适合业务的回收器,加上代码层面的优化(比如减少大对象、避免内存泄漏),才能让系统在高并发下保持流畅。早期的垃圾回收器(比如Serial GC)是单线程的,Full GC时整个JVM会停顿,用户请求直接被“冻住”。后来引入了并行回收器(Parallel Scavenge),通过多线程加速GC,但Full GC时还是得停顿。

2025-05-07 11:18:56 616

原创 基于SpringBoot 和Mybatis设计一套通用的Java基础类,包含BaseEntity、BaseMapper、BaseService、BaseController

【代码】基于SpringBoot 和Mybatis设计一套通用的Java基础类,包含BaseEntity、BaseMapper、BaseService、BaseController。

2025-04-30 11:23:58 359

原创 Java高级开发工程师面试题,熔断机制相关面试题,熔断机制的核心原理与工业互联网场景应用,熔断与降级的协同设计,熔断机制在高并发场景下的优化

在工业互联网的设备监控系统中,设备数据采集服务(Service A)依赖第三方天气数据服务(Service B)获取实时气象信息。当Service B因网络波动或高负载出现故障时,如何通过熔断机制防止Service A被拖垮?在工业互联网的实时数据采集平台中,某设备数据上报接口(Service E)每秒处理10万+请求,依赖第三方数据清洗服务(Service F)。在工业互联网的订单管理系统中,订单服务(Service C)依赖库存服务(Service D)验证库存可用性。

2025-04-30 09:48:46 909

原创 Java高级开发工程师面试题,微服务面试题,熔断与降级机制,Hystrix熔断深度实现,熔断器工作原理与设计模式,熔断与降级协同设计,熔断,熔断模式架构设计器性能优化,

【代码】Java高级开发工程师面试题,微服务面试题,熔断与降级机制,Hystrix熔断深度实现,熔断器工作原理与设计模式,熔断与降级协同设计,熔断,熔断模式架构设计器性能优化,

2025-04-29 16:51:44 634 1

原创 一个通用的数据权限的过滤方法,简单,高效,好用,支持的数据权限范围:仅本人、本组织、本组织及子组织、所有数据

它的主要功能是根据当前登录用户的数据权限范围(如仅查看本人数据、本组织数据或子组织数据等),动态修改查询 SQL 的条件。SelectInterceptor 是一个功能强大的 MyBatis 拦截器,能够根据用户的数据权限范围动态修改查询条件,实现细粒度的数据权限控制。如果查询的是业务表,结合用户表和组织表,限制业务表的创建者 ID 在指定组织范围内。查询业务表时,结合用户表和组织表,限制业务表的创建者 ID 在指定组织范围内。查询参数的基类,包含默认查询条件、组织路径、忽略数据权限标志等属性。

2025-04-28 15:03:26 613

原创 3道Spring Cloud并发场景的架构师级别面试题,高并发场景下如何设计服务降级与限流策略?如何在分布式系统中实现高并发下的分布式锁?如何设计高并发下的分布式事务?

某电商系统需要实现“下单扣库存”的功能,涉及订单服务(Order Service)和库存服务(Inventory Service)。请设计一个基于Spring Cloud的分布式事务方案,确保订单创建与库存扣减的原子性,并说明如何处理异常情况。请设计一个基于Spring Cloud的降级与限流方案,确保系统在极端情况下不崩溃,并说明实现原理。请设计一个基于Spring Cloud的分布式锁方案,并说明如何处理锁的粒度、超时和死锁问题。

2025-04-28 14:11:55 1636

原创 基于工业互联网场景的Java面试题,Java Socket通讯面试系列-高并发场景下的Socket优化设计,TCP协议在工业场景中的可靠性保障,工业通信的安全与扩展性设计

某工业物联网平台需要同时连接10万台传感器设备,每个设备每秒发送一次数据。

2025-04-28 11:16:41 927

原创 字节跳动高级Java面试题盘点--时序数据库分片机制设计与Java客户端优化,时序数据库高可用与数据一致性保障,时序数据实时分析与Java流处理

某工业物联网平台需要实时监控十万台设备的传感器数据(温度、压力、振动等),每秒产生10万条时间序列数据。要求数据存储在时序数据库(如InfluxDB)中,并支持按设备ID、时间范围、区域等多维度高效查询。某工厂需要实时分析设备传感器数据(如温度异常),触发告警。要求Java应用消费InfluxDB的实时数据流,结合Flink或Kafka进行流处理。某工厂的智能巡检系统依赖InfluxDB存储设备状态数据,要求数据写入强一致性,且单节点故障时不影响服务。

2025-04-28 09:22:59 697

原创 工业互联网高级Java开发工程师面试题系列,工业设备状态监控系统设计(Redis缓存与持久化),分布式设备指令调度系统(Redis延迟队列),工业物联网高可用设备指令缓存(Redis Cluster集

【代码】工业互联网高级Java开发工程师面试题系列,工业设备状态监控系统设计(Redis缓存与持久化),分布式设备指令调度系统(Redis延迟队列),工业物联网高可用设备指令缓存(Redis Cluster集。

2025-04-27 17:33:53 569

原创 Java新特性之Project Loom

Project Loom 是Java平台上的一个创新项目,旨在为Java引入轻量级线程(fibers),从而简化并发编程并提高多核CPU的利用率。Loom的目标是让开发者能够更轻松地编写高效、可扩展的并发应用程序,同时保持代码的简洁性和易读性。

2025-04-27 15:10:25 937

原创 ELK Stack:日志管理与分析的全能战士,Java的日志管理

ELK Stack 是一个功能强大且灵活的日志管理和分析平台,适用于从小型到大型的各种系统规模。它不仅提供了高效的日志处理能力,还具备直观的可视化展示工具,帮助开发者和运维人员更好地理解和利用日志数据。通过上述介绍和示例代码,相信你已经对如何搭建和使用 ELK Stack 有了初步的认识。希望这些内容能够为你提供有价值的参考,助力你在日志管理领域迈出坚实的步伐。如果有任何疑问或需要进一步的帮助,请随时查阅官方文档或联系社区。

2025-04-27 14:46:26 825

原创 PlumeLog 和 Redis 集群:日志管理的梦幻组合

想象一下,你正在开发一款应用,每天生成海量的日志数据。如何高效地收集、存储和查询这些日志信息?PlumeLog 加上 Redis 集群就像是为这个问题量身定制的魔法药水。它们联手为你提供了一种既快速又可靠的解决方案。下面,我们就来揭开这组搭档背后的秘密。

2025-04-27 14:16:43 727

原创 JVM的FullGC有多么可怕,如何避免FullGC

如果老年代被塞得太满,JVM就不得不启动Full GC,收拾整个堆(包括Young和Old),这时候整个JVM线程都会被暂停,用户请求响应时间瞬间飙升。在实际开发中,合理配置GC参数、选择适合业务的回收器,加上代码层面的优化(比如减少大对象、避免内存泄漏),才能让系统在高并发下保持流畅。早期的垃圾回收器(比如Serial GC)是单线程的,Full GC时整个JVM会停顿,用户请求直接被“冻住”。后来引入了并行回收器(Parallel Scavenge),通过多线程加速GC,但Full GC时还是得停顿。

2025-04-27 11:34:13 900

原创 Java知识点详细解读,AQS详解

将复杂的同步问题抽象为简单的模板方法,使得开发者可以专注于资源的获取与释放逻辑,而无需处理线程阻塞、唤醒等底层细节。它是Java并发编程的基石,深刻影响了。假设有一个数据库连接池,需要支持多个线程同时访问,但每个时刻只能有一个线程获取连接。,它通过AQS的框架支持可重入、公平锁、超时机制等高级特性,完美解决上述问题。包的设计,为构建高性能、可扩展的并发工具提供了统一的框架。

2025-04-26 06:43:01 588

原创 Elasticsearch 学习之旅:从零开始掌握强大的搜索和分析引擎

想象一下,你站在一座巨大的图书馆前。这座图书馆里存放着无尽的信息,但问题是——如何快速找到你需要的那一本?这便是 Elasticsearch 的用武之地。它不仅仅是一个搜索引擎,更像是一个超级智能的图书管理员,能够瞬间定位并提供你想要的数据。无论是处理海量的日志、实时监控网站流量,还是为电商网站实现复杂的商品搜索,Elasticsearch 都能轻松胜任。

2025-04-25 14:15:46 679

原创 用用Jakarta EE试试:Java 企业应用的新篇章

想象一下,你正在开发一个复杂的企业级应用,需要处理从用户认证到数据持久化的各种任务。这时,Jakarta EE 就像一位经验丰富的导师站在你身边,为你提供了一整套强大的工具和框架,帮助你轻松应对这些挑战。Jakarta EE(以前称为 Java EE)是构建企业级应用程序的现代标准,它不仅继承了 Java 的优良传统,还引入了许多创新特性。

2025-04-25 10:54:45 965

原创 Java9新增的JPMS详解

Java Platform Module System (JPMS) 是Java 9引入的一项重要特性,它对Java语言和平台的发展产生了深远的影响。以下是关于JPMS的详细讲解,包括其产生的背景、发展过程、实际应用、以及它的意义。

2025-04-25 10:54:31 447

原创 ZGC详解

ZGC(Z Garbage Collector)是Java平台上的一个低延迟垃圾收集器,首次出现在Java 11中,并在后续版本中得到了不断的改进和优化。它设计的主要目标是在不影响应用程序性能的情况下提供非常低的暂停时间,即使是在处理超大堆内存(如数TB级别)时也能保持高效的垃圾回收。

2025-04-24 15:36:15 1972 4

原创 Jakarta EE 和 Spring Boot对比,用惯了Spring Boot,突然接手一个Jakarta EE项目,给我整不会了,赶紧现学一下

Jakarta EE 和 Spring Boot 是两个不同的框架,它们都旨在简化企业级 Java 应用程序的开发,但有着不同的设计理念、目标受众和技术实现。理解两者之间的关系和区别有助于选择最适合你项目需求的技术栈。

2025-04-24 14:37:52 1046 1

原创 在生产环境中,你如何确保 Kubernetes 中的 Java 应用程序具有高可用性和弹性?Java高级开发面试题

假设你在一家电子商务公司工作,公司的核心业务是在线购物平台。你们的应用是由多个微服务构成,其中一部分是使用 Spring Boot 构建的 Java 应用程序。这些应用部署在 Kubernetes 上,并且需要保证极高的可用性,即使部分节点或 Pod 失效也不能影响整体的服务。

2025-04-24 14:36:29 696

原创 当处理大规模并发请求时,你如何优化 Kubernetes 上 Java 应用的性能?Java高级开发面试题

想象一下,你正在为一款流行的游戏平台构建后台服务,该平台每天要处理数百万次玩家登录、匹配和结算请求。由于游戏本身的特性,高峰时段的流量可能会突然激增,这对服务器的压力极大。为了应对这种情况,你需要对 Kubernetes 中的 Java 应用进行优化,使其能够在高并发场景下依然表现良好。

2025-03-04 08:00:00 1681 1

原创 如何在 Kubernetes 上安全地管理和部署敏感信息(如密码、API 密钥等),同时确保不影响 CI/CD 流水线的速度?Java高级开发面试题

设想你在一个金融技术服务公司工作,负责开发和运维一组涉及支付处理、账户管理等功能的关键系统。这些系统需要与多个第三方服务交互,因此不可避免地涉及到大量的敏感信息,如 API 密钥、数据库凭证等。然而,直接把这些信息硬编码到代码库中显然是不明智的做法,既不安全也不利于自动化部署。所以,我们需要找到一种既能保证安全性又不影响效率的方法。

2025-03-03 20:00:00 1525

原创 Java开发面试题,在一个电商系统中,如何确保订单创建和库存减少的原子性?

设想你正在开发一个电商平台,在用户下单时需要同时完成两个操作:一是创建新的订单记录;二是从库存中扣除相应的商品数量。这两个步骤必须作为一个整体成功或失败,否则会导致数据不一致的问题。

2025-03-03 15:58:36 668

原创 Java开发面试题,在微服务架构下,如何解决跨服务调用中的分布式事务问题?

假设你在一家大型互联网公司工作,负责维护多个相互协作的微服务。为了提升用户体验,管理层要求你构建一个复杂的交易流程,其中涉及到不同服务之间的交互,如支付网关、库存管理系统、物流配送平台等。这些服务之间存在依赖关系,任何一个环节出错都会影响最终的结果。请你详细说明,在这种情况下,你会如何利用 Spring Boot 来应对上述挑战?请结合具体的业务场景,解释你是怎样设计分布式事务解决方案的,并通过 TCC 或 Saga 模式发现隐藏模式。另外,也请谈谈在保证高并发读写的同时,你是如何确保数据一致性的?

2025-02-28 14:45:00 522 1

原创 Linux 上安装 MySQL 并配置远程访问、开机自启以及数据库导入导出

大多数现代 Linux 发行版都使用 systemd 来管理服务。确保防火墙允许 MySQL 流量(默认端口是 3306)。这将引导你完成一系列的配置选项,包括移除匿名用户、禁止远程 root 登录等。默认情况下,MySQL 不允许远程连接。首先确保系统是最新的,然后根据你的 Linux 发行版选择适当的安装方式。在某些较新的发行版上,你可能需要先添加 MySQL 的官方仓库。授予特定用户远程访问权限。(取决于你的 Linux 发行版)。编辑 MySQL 配置文件。

2025-02-28 09:42:24 403

原创 Nacos启用鉴权,使用MySQL,Nacos+MySQL鉴权配置

Nacos是阿里巴巴开源的服务发现与配置管理平台,它支持多种功能,如服务注册、服务发现、动态配置管理等。为了确保Nacos的安全性和可靠性,在生产环境中通常需要启用鉴权机制,并且可以选择使用MySQL作为持久化存储来保存服务和配置信息。

2025-02-26 15:40:40 693

原创 Linux 上安装 Nacos 并配置开机自启、设置防火墙、关联 MySQL 以及用户鉴权

如果你的服务器上有防火墙(例如 UFW 或 firewalld),请确保开放 Nacos 默认使用的端口(8848)。Nacos 是基于 Java 的应用程序,因此首先需要确保你的系统中已经安装了 JDK。上述配置开启了简单模式下的用户鉴权,并设置了默认的管理员账户为 admin/nacos。Nacos 支持多种方式的身份验证,包括简单的用户名密码认证、OAuth2、JWT 等。如果没有安装,请根据你的 Linux 发行版选择合适的包管理器来安装 OpenJDK 或 Oracle JDK。

2025-02-23 20:20:04 929 1

原创 Linux 上安装 Redis 并进行常见配置

Redis 是一个开源的、高性能的键值对数据库,它支持多种数据结构如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)和有序集合(sorted sets)。以下是详细的安装步骤以及一些常见的配置操作。

2025-02-23 20:18:07 656

原创 PlumeLog 是一个轻量级的日志聚合系统,支持多种存储后端,包括 Redis。当与 Redis 集群(Redis Cluster)结合使用时,PlumeLog 可以实现高效的日志收集、存储和查询功

PlumeLog 是一个轻量级的日志聚合系统,支持多种存储后端,包括 Redis。当与 Redis 集群(Redis Cluster)结合使用时,PlumeLog 可以实现高效的日志收集、存储和查询功能。

2025-02-21 20:45:00 1285

原创 Java + Neo4j 实现好友推荐功能的设计方案

在 Java 中使用 Neo4j 实现好友推荐功能,可以通过以下步骤完成:从设计社交网络的数据模型开始,到编写 Cypher 查询以识别潜在的好友,再到通过 Java 驱动程序与 Neo4j 进行交互。

2025-02-21 19:00:00 180

原创 Java + Apache Flink 实现 IoT 实时数据分析的方案

使用 Apache Flink 进行物联网(IoT)实时数据分析是一个非常强大的解决方案,因为它提供了高吞吐量、低延迟以及精确一次处理语义的能力。以下是详细的实现方案,包括如何设置环境、构建数据流管道、定义业务逻辑以及部署和监控整个系统。

2025-02-21 14:16:08 1060

原创 Linux 上安装 JDK

Java Development Kit (JDK) 是开发 Java 应用程序所必需的工具集,它包括了 Java 编译器、运行时环境(JRE)以及其他开发工具。以下是详细的安装步骤以及一些常见的配置操作。

2025-02-20 19:00:00 344

原创 Linux 上安装 Docker

Docker 是一个开源平台,它允许开发者将应用程序及其依赖打包成容器化单元,从而确保应用在任何环境中都能一致地运行。以下是详细的安装步骤以及一些常见的配置操作。

2025-02-20 14:08:04 825

原创 Java开发面试题,在金融交易平台中,如何保证转账操作的强一致性?

想象你在一个专注于在线金融服务的企业工作,公司的主打产品是一款支持多种货币转换的国际汇款平台。由于资金安全至关重要,管理层特别强调转账过程中必须严格遵守强一致性原则,即任何时刻账户余额都不能出现负值或溢出的情况。请你分享一下在这个项目中是如何应用 Spring Boot 的事务管理功能的?具体而言,请详细描述你是怎么组织转账逻辑,并通过 XA 协议或本地消息表模式分析故障点、优化能源消耗等问题。另外,也请讨论一下你是如何处理海量转账数据流的,尤其是在低延迟要求下。

2025-02-19 14:21:27 602

原创 Docker 命令详解

Docker 是一个开源平台,它允许开发者将应用程序及其依赖打包成容器化单元,从而确保应用在任何环境中都能一致地运行。

2025-02-19 12:00:50 343

原创 Elasticsearch 操作命令详解

Elasticsearch 提供了一套强大的 RESTful API,允许你通过 HTTP 请求来进行各种操作,如索引(增加)、删除、更新文档,以及执行复杂的查询。以下是详细的命令介绍,包括增删改查、多条件查询、分页、聚合等。

2025-02-18 19:30:00 715

龙小乐视频剪辑助手,支持视频批量处理,视频混剪,视频分割,视频转图片,视频合并,免安装,解压即用,windows平台适用

龙小乐视频剪辑助手是一款集高效、便捷、专业于一体的视频处理软件,专为追求创意与效率的视频制作者、社交媒体达人、教育工作者及企业宣传团队量身打造。它融合了视频混剪、视频转图片、视频合并与视频分割四大核心功能,并支持批量操作,让复杂的视频编辑工作变得简单快捷。 视频混剪大师:革新性视频混剪技术,轻松从多个视频源中抽取精彩片段,无缝拼接成全新创意视频。支持批量处理,一次性导入多个视频文件,快速生成多个混剪作品,提升工作效率。 视频转图片神器:精准捕捉视频精彩瞬间,支持设置间隔时间自动截图,轻松将视频中的每一帧保存为高质量图片。批量转换功能,一次性处理多个视频文件,自动生成图片序列,适用于视频分析、社交媒体分享等多种场景。 视频合并:简化视频合并流程,一键将多个视频片段合并成一个连贯的视频文件,无需复杂剪辑操作。支持多种视频格式混合合并,自动转码匹配,确保合并后的视频播放流畅。 视频分割利器: 灵活设置分割时长,无论是按固定时间分割还是按场景自动分割,都能轻松实现。 预览分割点,确保分割位置的准确性,避免重要内容的遗漏。 支持批量分割视频文件,适用于视频素材整理、短视制作

2024-08-27

Spring Boot 代码生成器

自己写的非常好用的Java代码生成器,用于生成 RESTful 风格的 Controller、Service、Dao、Entity 层代码。 提供的源码简单明了,可以直接使用,方便快捷生成你的项目代码,避免繁琐的基础代码设计;也可以快速修改,生成你自己的代码风格。详细教程参考地址:https://gitbook.cn/new/gitchat/activity/5c68a42b3f0d0d43168e85cc

2020-04-17

kellerMapper.jar

这是一款轻量级的MyBatis插件,在GitHub上发布的有打好的jar包,25.2Kb,导入项目中即可使用,支持创建数据表、自定义查询、分页查询等常用的数据库操作。 依赖包 <dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> </dependencies> 目录结构 mybatis:MyBatis 通用 Mapper 相关 annotation:注解相关 FieldAttribute.java:字段注解,标示成员变量为数据库字段,并设置相应的约束信息,如:长度、非空、查询字段、索引字段等 KeyAttribute.java:主键注解,标示成员变量为主键,支持标注为自增主键 SortAttribute.java:排序注解,标示成员变量为排序字段 TableAttribute.java:数据表注解,标示实体类对应的表名称、说明信息 provider:Sql 语句生成相关 BaseCreateProvider.java:数据表创建语句的生成器,支持生成索引 BaseDeleteProvider.java:delete 语句生成器,支持根据 ID、主键、自定义条件删除 BaseInsertProvider.java:insert 语句生成器,支持自增主键的 insert 操作 BaseSelectProvider.java:select 语句生成器,支持分页查询、统计查询、自定义条件查询等 BaseUpdateProvider.java:update 语句生成器,支持根据 ID、主键修改数据 BaseEntity.java:所有实体类的父类,提供了自定义查询条件、分页查询、排序的扩展 BaseException.java:自定义异常,在通用 Mapper 运行过程中抛出的异常 BaseMapper.java:所有 Mapper 的父类,提供了通用 Mapper 功能 SqlFieldReader.java:Sql 字段解析类,用于解析实体类中的自定义注解,为生成 Sql 语句服务 TypeCaster.java:类型转换,用于将 Java 中的数据类型转换成相应的 MySql 数据类型 util:工具类相关 Console.java:日志输出工具类,用于在控制台、日志文件中输出相关信息 ObjectUtils.java:Object 工具类,用于对象的空值判断 StringUtils.java:字符串工具类,用于生成指定格式的字符串及对字符串进行各种处理 使用方式 实体类继承 BaseEntity 并使用注解 @TableAttribute(name = "user_info",comment = "用户信息表") public class UserInfo extends BaseEntity { // 标注是自增主键 @KeyAttribute(autoIncr = true) // 标注是数据库字段 @FieldAttribute private int id; // 设置字段注释、非空约束、作为查询条件 @FieldAttribute(value = "用户类型",notNull = true,isCondition = true) private Integer type; @FieldAttribute(value = "密码",length = 200, isDetailed = true) private String password; // 设置字段注释、非空约束、字段长度、是索引字段 @FieldAttribute(value = "邮箱",notNull = true,length = 200,isIndex = true) private String email; @FieldAttribute @SortAttrtibute private Date createTime = new Date(); @FieldAttribute(value = "用户账号状态",isCondition = true) private Integer status ; @FieldAttribute(value = "是否删除,1 表示删除",isCondition = true) private Integer isDelete; ... ... } Dao 层继承 BaseMapper @Mapper public interface UserMapper extends BaseMapper<UserInfo> { } 调用 /** * 根据类型和邮箱查询用户 * @param type * @param email * @return */ private UserInfo getByEmailAndType(int type,String email){ UserInfo userInfo = new UserInfo(); // 设置查询条件1 Email userInfo.setEmail(email); // 设置查询条件2 Type userInfo.setType(type); // 设置使用 And 连接多个查询条件 userInfo.setBaseKyleUseAnd(true); // 执行查询并返回结果 List<UserInfo> list = userMapper.baseSelectList(userInfo); if(list != null && list.size() > 0){ return list.get(0); } return null; }

2020-06-21

空空如也

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

TA关注的人

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