Maven创建子模块
Maven创建子模块在一个多模块的Maven项目中,通常使用<module>标签在父POM(Project Object Model)文件中来定义子模块。
这样可以将多个Maven项目组织在一起,使它们成为一个整体的构建单元。
如何定义子模块
首先,创建一个父项目的POM文件pom.xml,其中包含所有子模块的定义:
12345678910111213141516<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> ...
SQL必知必会-读书笔记(九)
SQL必知必会-读书笔记(九)何为查询(query)
本质上任何SQL都是查询。但此术语一般用于SELECT语句
子查询
子查询总是从内向外处理
MySQL 中,子查询并不局限于仅仅只能查询单列,但对于部分SQL语言来说,可能限制只能查询单列
子查询并不总是执行数据检索最有效的方法,视具体情况,联表的优先级会大于子查询
有多个查询时,尽量用完全限定列名(表名.列名)
子查询常用于 IN() 中
联表 JOIN
联表是关系型数据库最关键,最核心,最灵魂的操作
关系型数据库为了保证良好的可伸缩性,通常会将关系和具体内容分开存储,在查询完整信息时,就需要使用到 JOIN
JOIN 时不加条件,最终返回的结果将会是两张表的笛卡尔积,检索出的行数将是表1的行数×表2的行数,这种联结也叫叉联结
ON 条件为等值时也叫等值联结
联结是很消耗资源的,联结的表越多,性能下降越厉害,虽然SQL本身不限制每个联结约束中表的数量,但原则上联结的表越少越好
使用联结时可以多看执行计划,找出最合适的联结方案
lombok使用教程
lombok使用教程
Lombok 是一个用于简化 Java 编程的库,它通过注解来自动生成样板代码,从而减少了手动编写样板代码的繁琐。
@Getter 和 @Setter
自动为类中的字段生成 getter 和 setter 方法。
@Getter 和 @Setter 不具有可选参数。它们的作用是生成 getter 和 setter 方法,默认生成所有字段的 getter 和 setter。
@ToString
自动生成 toString() 方法。
**includeFieldNames**:是否包括字段名。
默认值:false
作用:设置为 true 时,生成的 toString() 方法会包含字段名,例如 "Person(name=John, age=30)"。
**exclude**:排除某些字段。
默认值:空数组
作用:指定要排除在 toString() 方法中的字段。例如,@ToString(exclude = "age") 将排除 age 字段。
**callSuper**:是否调用父类的 toString ...
Swagger Knife4j 使用总结
Swagger Knife4j 使用总结
使用 Swagger 和 Knife4j 来增强 API 文档和界面,方便开发者做一些简单的功能测试,也方便了前后端联调
Step 1. 导入依赖123456789101112<!-- https://doc.xiaominfo.com/docs/quick-start#openapi2 Swagger + Knife4j --><dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-openapi2-spring-boot-starter</artifactId> <version>4.4.0</version></dependency><!-- Hibernate Validator for data validation --><dependency> <groupId>org.h ...
SQL必知必会-读书笔记(八)
SQL必知必会-读书笔记(八)GROUP BY
分组,可以和聚合函数配合,例如:
123456# 统计按照x_id分组后,每个分组的个数。如果不加 GROUP BY,相当于统计所有行的数量SELECT x_id, count(*) as x_num FROM your_tableGROUP BY x_id
GROUP BY子句可以包含任意数目的列,可以进行更精细的分组
不管有多少列,建立分组时,所有的列都是当成一个整体处理,所以不能从个别的列取回数据
GROUP BY子句的每个列都必须是检索列或有效表达式(不能是聚集函数),如果SELECT中使用了表达式,GROUP BY子句中也要指定相同的表达式,不能使用别名
大多数SQL不允许GROUP BY列带有长度可变的数据类型(MySQL允许,但是不建议,因为分组时处理字符数据比较慢)
除聚集计算语句外,SELECT的每一列都必须在GROUP BY子句中给出
如果分组中包含具有 NULL 值的行,则NULL会作为一个分组返回,如果列中有多行NULL值,它们将会被作为一个分组
GROUP BY必须出现在WHERE语句之后,O ...
Spring核心代码模块-总览
Spring核心代码模块-总览Spring 最主要的核心就是 IOC 容器,这个容器根据我们的配置文件创建了各种 Bean 且编织它们之间的依赖关系,管理这些 Bean 的生命周期。所以最核心的代码模块是:
spring-core:核心类库,包括资源访问等一些工具类,别的模块都会依赖此模块
spring-beans:对 Bean 的支持,包括控制反转和依赖注入,核心工厂 BeanFacotry 就在这个模块。
spring-context:Spring 的上下文,支持数据验证、国际化、事件传播等支持,ApplicationContet 就在这里,可以理解为运行时的 Soring 容器
基于上面的这些核心模块,Spring 也提供了很多重要的支持:
spring-aop:AOP 的支持
spring-jdbc:jdbc的支持
spring-orm: orm 的支持
spring-webmvc: mvc 的支持
SQL必知必会-读书笔记(七)
SQL必知必会-读书笔记(七)COUNT() 函数
COUNT(*) : 计算表中行的数目
COUNT(cloumn_name) : 计算column_name的行数,会忽略NULL
MAX() 函数
MAX() 函数会忽略表中的 NULL 值
MAX() 作用于非字符型数据时,返回排序后的最后面的行
MIN() 函数
MIN() 函数会忽略表中的 NULL 值
MIN() 作用于非字符型数据时,返回排序后的最前面的行
SUM() 函数
可以使用多个列的值计算 SUM,例如:SUM(column1 * column2)
SUM() 函数会忽略表中的 NULL 值
DISTINCT
DISTINCT 不能用于 COUNT(*)
DISTINCT 可以用于 MIN(),MAX(),但没有意义
MyBatis XML文件详解
MyBatis XML文件详解定义文件版本、编码、规范通常写在xml文件开头
12<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
定义命名空间定义这个xml文件对应到哪一个mapper接口文件上,namespace 建议写全路径名
正文部分可以定义各种 resultMap 和 CRUD的SQL语句
123<mapper namespace="com.jd.y.insight.domain.repository.mybatis.mapper.master.ext.IndustryCompanyRelationExtMapper"><!-- 正文 --></mapper>
定义result ...
MySQL查询时拼接列名
MySQL查询时拼接列名在 MySQL 中,拼接字段最常用的方法是使用 CONCAT() 函数和 CONCAT_WS() 函数。
使用 CONCAT() 函数CONCAT() 函数用于将多个字符串连接成一个字符串。如果任何一个参数为 NULL,CONCAT() 函数会将其视为空字符串并继续连接其他参数。
语法:1CONCAT(string1, string2, ..., stringN)
拼自定义字符串:12SELECT CONCAT('Hello, ', 'world!', ' How are you?') AS result;-- output:Hello, world! How are you?
拼字段:12SELECT CONCAT(first_name, ' ', last_name) AS full_nameFROM employees;
使用 CONCAT_WS() 函数CONCAT_WS() 函数与 CONCAT() 类似,但它允许你指定一个分隔符,将其插入到拼接的字符串之间。 ...
Spring 循环依赖详解
Spring 循环依赖详解什么是循环依赖循环依赖(Circular Dependency)是指两个或多个模块(组件、类、服务等)之间互相依赖,从而形成一个循环的依赖关系。
这种情况在软件开发中是比较常见的一个问题,尤其是在复杂的系统中。
为什么会出现循环依赖循环依赖通常是由于以下几个原因导致的:
模块间的紧密耦合:模块之间的耦合度过高,彼此依赖过于密切。
不合理的设计:系统设计时没有充分考虑模块的独立性和复用性。
单一职责原则的违反:模块的职责过于复杂,导致需要依赖多个其他模块来完成其功能。
循环依赖的问题
难以维护:模块之间的耦合度过高,修改一个模块可能需要修改多个相关模块。
难以测试:由于模块之间的依赖关系复杂,独立测试某个模块变得困难。
可能导致运行时错误:在某些情况下,循环依赖可能导致程序在运行时崩溃或出现异常,有时候甚至连编译的无法通过。
如何解决循环依赖使用构造器注入与Setter注入的结合使用构造器注入时,循环依赖会导致两个或多个bean无法实例化,因为每个bean在实例化时都需要另一个尚未实例化的bean。
Setter注入可以部分缓解这个问题,因为Spri ...
