小赵的技术实践笔记 - Java
type: channel
link: https://www.xzhao.vip/category/Java/
items: DTO/DO/VO案例简介
items: IntelliJ IDEA全版本一键激活脚本
items: Spring Boot 单元测试
items: SpringCloud实用篇02
items: SpringCloud01
items: Idea配置springboot多环境的切换的五种方案
items: 最新版IDEA SpringBoot开启devtools（热部署）功能
items: MyBatisPlus笔记
items: (余胜军）java培训视频相关资料（）
items: Spring Boot 框架基础入门

DTO/DO/VO案例简介
type: item
date: 2024-05-04T04:01:57+00:00
description: 《阿里巴巴开发手册》以及网上各种博客或多或少都有提到诸如DTO、DO、BO、PO、VO等等，也提倡对实体类进行分层。至于为什么要分层，它们的理由是“避免暴露内部设计细节，只展示必要的字段”，但我个人最大的感受其实是“解耦”。我曾遇到一件无奈的事，接口已经开发完毕，前后端也联合好了，结果产品临时要大改，Service层的逻辑基本要推倒重来，连查的表都不一样了。好在得益于DTO和VO的隔离，并没有影响到其它层，前端甚至完全不知道后端全部重写了，Swagger文档也和原来一模一样...不过个人觉得没必要去扣这些概念，比如BO、PO是啥我也记不清。一般来说，POJO分为三类即可：客户端/前端传入的DTO与数据库字段映射的DO返回给客户端/前端的VO也可以这样理解VO 是后端返给前端展示用的DTO 是前端传过来数据转换成后端的数据比如controller层来的各字段的数据转换成DTO，一个各个方法之间传递数据的都可以用DTODO 其实就是数据库存数据时候的实体一般都是直接使用Spring提供的BeanUtils进行数据拷贝，但它有两个问题：没有提供额外的映射关系，所以两个实体类字段名必须完全一致不支持深拷贝市面上有很多比Spring的BeanUtils更强大的转换工具，比如MapStruct啥的

IntelliJ IDEA全版本一键激活脚本
type: item
date: 2024-04-07T12:20:06+00:00
description: 下载地址：https://macz.lanzouj.com/iPBi41amzgni激活步骤1、下载激活压缩包解压2、点击运行【Jetbrains全家桶一键激活】ps：注意，显示为Success即为成功！1验证位置一：

Spring Boot 单元测试
type: item
date: 2023-11-09T07:25:06+00:00
description: IDEA创建测试类spring Boot中单元测试类写在src/test/java目录下，可以手动创建具体测试类，也可以通过IDEA自动创建测试类，如下图：（注：点选并打开相应代码界面，再点击菜单栏的Navigate）注解解释@SpringBootTest：获取启动类，加载配置，寻找主配置启动类（被 @SpringBootApplication 注解的） @RunWith(SpringRunner.class)：让JUnit运行Spring的测试环境,获得Spring环境的上下文的支持@AutoConfigureMockMvc：用于自动配置MockMvc,配置后MockMvc类可以直接注入,相当于new MockMvc @Before:初始化方法 ,对于每一个测试方法都要执行一次

SpringCloud实用篇02
type: item
date: 2023-05-06T00:54:51+00:00
description: 1.Nacos配置管理Nacos除了可以做注册中心，同样可以做配置管理来使用。1.1.统一配置管理当微服务部署的实例越来越多，达到数十、数百时，逐个修改微服务配置就会让人抓狂，而且很容易出错。我们需要一种统一配置管理方案，可以集中管理所有实例的配置。Nacos一方面可以将配置集中管理，另一方可以在配置变更时，及时通知微服务，实现配置的热更新。1.1.1.在nacos中添加配置文件如何在nacos中管理配置呢？然后在弹出的表单中，填写配置信息：注意：项目的核心配置，需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。1.1.2.从微服务拉取配置微服务要拉取nacos中管理的配置，并且与本地的application.yml配置合并，才能完成项目启动。但如果尚未读取application.yml，又如何得知nacos地址呢？因此spring引入了一种新的配置文件：bootstrap.yaml文件，会在application.yml之前被读取，流程如下：1）引入nacos-config依赖首先，在user-service服务中，引入nacos-config的客户端依赖： <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>2）添加bootstrap.yaml然后，在user-service中添加一个bootstrap.yaml文件，内容如下：spring: application: name: userservice # 服务名称 profiles: active: dev #开发环境，这里是dev cloud: nacos: server-addr: localhost:8848 # Nacos地址 config: file-extension: yaml # 文件后缀名这里会根据spring.cloud.nacos.server-addr获取nacos地址，再根据${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件id，来读取配置。本例中，就是去读取userservice-dev.yaml：3）读取nacos配置在user-service中的UserController中添加业务逻辑，读取pattern.dateformat配置：+6+9+完整代码：package cn.itcast.user.web; import cn.itcast.user.pojo.User; import cn.itcast.user.service.UserService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @Slf4j @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @Value("${pattern.dateformat}") private String dateformat; @GetMapping("now") public String now(){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat)); } // ...略 }在页面访问，可以看到效果：1.2.配置热更新我们最终的目的，是修改nacos中的配置后，微服务中无需重启即可让配置生效，也就是配置热更新。要实现配置热更新，可以使用两种方式：1.2.1.方式一在@Value注入的变量所在类上添加注解@RefreshScope：1.2.2.方式二使用@ConfigurationProperties注解代…

SpringCloud01
type: item
date: 2023-05-03T07:24:20+00:00
description: SpringCloud011.认识微服务随着互联网行业的发展，对服务的要求也越来越高，服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢？1.0.学习目标了解微服务架构的优缺点1.1.单体架构单体架构：将业务的所有功能集中在一个项目中开发，打成一个包部署。单体架构的优缺点如下：优点：架构简单部署成本低缺点：耦合度高（维护困难、升级困难）1.2.分布式架构分布式架构：根据业务功能对系统做拆分，每个业务功能模块作为独立项目开发，称为一个服务。分布式架构的优缺点：优点：降低服务耦合有利于服务升级和拓展缺点：服务调用关系错综复杂分布式架构虽然降低了服务耦合，但是服务拆分时也有很多问题需要思考：服务拆分的粒度如何界定？服务之间如何调用？服务的调用关系如何管理？人们需要制定一套行之有效的标准来约束分布式架构。1.3.微服务微服务的架构特征：单一职责：微服务拆分粒度更小，每一个服务都对应唯一的业务能力，做到单一职责自治：团队独立、技术独立、数据独立，独立部署和交付面向服务：服务提供统一标准的接口，与语言和技术无关隔离性强：服务调用做好隔离、容错、降级，避免出现级联问题微服务的上述特性其实是在给分布式架构制定一个标准，进一步降低服务之间的耦合度，提供服务的独立性和灵活性。做到高内聚，低耦合。因此，可以认为微服务是一种经过良好架构设计的分布式架构方案 。但方案该怎么落地？选用什么样的技术栈？全球的互联网公司都在积极尝试自己的微服务落地方案。其中在Java领域最引人注目的就是SpringCloud提供的方案了。1.4.SpringCloudSpringCloud是目前国内使用最广泛的微服务框架。官网地址：https://spring.io/projects/spring-cloud。SpringCloud集成了各种微服务功能组件，并基于SpringBoot实现了这些组件的自动装配，从而提供了良好的开箱即用体验。其中常见的组件包括：另外，SpringCloud底层是依赖于SpringBoot的，并且有版本的兼容关系，如下：我们课堂学习的版本是 Hoxton.SR10，因此对应的SpringBoot版本是2.3.x版本。1.5.总结单体架构：简单方便，高度耦合，扩展性差，适合小型项目。例如：学生管理系统分布式架构：松耦合，扩展性好，但架构复杂，难度大。适合大型互联网项目，例如：京东、淘宝微服务：一种良好的分布式架构方案①优点：拆分粒度更小、服务更独立、耦合度更低②缺点：架构非常复杂，运维、监控、部署难度提高SpringCloud是微服务架构的一站式解决方案，集成了各种优秀微服务功能组件2.服务拆分和远程调用任何分布式架构都离不开服务的拆分，微服务也是一样。2.1.服务拆分原则这里我总结了微服务拆分时的几个原则：不同微服务，不要重复开发相同业务微服务数据独立，不要访问其它微服务的数据库微服务可以将自己的业务暴露为接口，供其它微服务调用2.2.服务拆分示例以课前资料中的微服务cloud-demo为例，其结构如下：cloud-demo：父工程，管理依赖order-service：订单微服务，负责订单相关业务user-service：用户微服务，负责用户相关业务要求：订单微服务和用户微服务都必须有各自的数据库，相互独立订单服务和用户服务都对外暴露Restful的接口订单服务如果需要查询用户信息，只能调用用户服务的Restful接口，不能查询用户数据库2.2.1.导入Sql语句首先，将课前资料提供的cloud-order.sql和cloud-user.sql导入到mysql中：cloud-user表中初始数据如下：cloud-order表中初始数据如下：cloud-order表中持有cloud-user表中的id字段。2.2.2.导入demo工程用IDEA导入课前资料提供的Demo：项目结构如下：导入后，会在IDEA右下角出现弹窗：点击弹窗，然后按下图选择：会出现这样的菜单：配置下项目使用的JDK：2.3.实现远程调用案例在order-service服务中，有一个根据id查询订单的接口：根据id查询订单，返回值是Order对象，如图：其中的user为null在user-service中有一个根据id查询用户的接口：查询的结果如图：2.3.1.案例需求：修改order-service中的根据id查询订单业务，要求在查询订单的同时，根据订单中包含的userId查询出用户信息，一起返回。因此，我们需要在order-service中 向user-service发起一个http的请求，调用http://localhost:8081/user/{userId}这个接口。大概的步骤是这样的：注册一个RestTemplate的实例到Spring容器…

Idea配置springboot多环境的切换的五种方案
type: item
date: 2023-04-11T01:25:26+00:00
description: 一.springBoot启动在Program arguments:输入指令--spring.profiles.active=dev二. springBoot启动在Active Profiles:输入dev三.springBoot启动在Environment variables: 输入spring.profiles.active=dev四.maven启动Environment variables: 输入spring.profiles.active=dev五.maven启动Skip tests下输入spring.profiles.active=dev

最新版IDEA SpringBoot开启devtools（热部署）功能
type: item
date: 2023-03-26T14:00:42+00:00
description: 开发中，每次对类的修改，都需要重启服务，很浪费时间，影响效率。下面介绍一种springboot热部署的方法在pom文件中引入devtools依赖： <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency>这里多了一个optional选项，是为了防止将devtools依赖传递到其他模块中。当开发者将应用打包运行后，devtools会被自动禁用。同时需要在spring-boot-maven-plugin插件中进行如下的配置： <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins>设置IDEA的配置自动构建项目在高级选项中勾选

MyBatisPlus笔记
type: item
date: 2023-02-20T01:20:37+00:00
description: 学习目标[ ] 能够基于MyBatisPlus完成标准Dao开发[ ] 能够掌握MyBatisPlus的条件查询[ ] 能够掌握MyBatisPlus的字段映射与表名映射[ ] 能够掌握id生成策略控制[ ] 能够理解代码生成器的相关配置一、MyBatisPlus简介1. 入门案例问题导入MyBatisPlus环境搭建的步骤？1.1 SpringBoot整合MyBatisPlus入门程序①：创建新模块，选择Spring初始化，并配置模块相关基础信息 ②：选择当前模块需要使用的技术集（仅保留JDBC）③：手动添加MyBatisPlus起步依赖<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency>注意事项1：由于mp并未被收录到idea的系统内置配置，无法直接选择加入注意事项2：如果使用Druid数据源，需要导入对应坐标④：制作实体类与表结构（类名与表名对应，属性名与字段名对应）create database if not exists mybatisplus_db character set utf8; use mybatisplus_db; CREATE TABLE user ( id bigint(20) primary key auto_increment, name varchar(32) not null, password varchar(32) not null, age int(3) not null , tel varchar(32) not null ); insert into user values(null,'tom','123456',12,'12345678910'); insert into user values(null,'jack','123456',8,'12345678910'); insert into user values(null,'jerry','123456',15,'12345678910'); insert into user values(null,'tom','123456',9,'12345678910'); insert into user values(null,'snake','123456',28,'12345678910'); insert into user values(null,'张益达','123456',22,'12345678910'); insert into user values(null,'张大炮','123456',16,'12345678910');public class User { private Long id; private String name; private String password; private Integer age; private String tel; //自行添加getter、setter、toString()等方法 }⑤：设置Jdbc参数（application.yml）spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC username: root password: root⑥：定义数据接口，继承BaseMapperpackage com.itheima.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.itheima.domain.User; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserDao extends BaseMapper<User> { } ⑦：测试类中注入dao接口，测试功能package com.itheima; import com.ithei…

(余胜军）java培训视频相关资料（）
type: item
date: 2023-02-17T09:11:00+00:00
description: https://www.yuque.com/books/share/328bf500-e69a-464c-86d4-acbd961fcfd8?# 《JavaWeb开发》密码：ti3w

Spring Boot 框架基础入门
type: item
date: 2023-02-14T13:09:35+00:00
description: 学习目标[ ] 基于SpringBoot框架的程序开发步骤[ ] 熟练使用SpringBoot配置信息修改服务器配置[ ] 基于SpringBoot的完成SSM整合项目开发一、SpringBoot简介1. 入门案例问题导入SpringMVC的HelloWord程序大家还记得吗？SpringBoot是由Pivotal团队提供的全新框架，其设计目的是用来简化Spring应用的初始搭建以及开发过程原生开发SpringMVC程序过程1.1 入门案例开发步骤①：创建新模块，选择Spring初始化，并配置模块相关基础信息②：选择当前模块需要使用的技术集③：开发控制器类@RestController @RequestMapping("/books") public class BookController { @GetMapping("/{id}") public String getById(@PathVariable Integer id) { System.out.println("id ==> " + id); return "hello , spring boot! "; } }④：运行自动生成的Application类最简SpringBoot程序所包含的基础文件<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.0</version> </parent> <groupId>com.itheima</groupId> <artifactId>springboot-01-quickstart</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project> @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }Spring程序与SpringBoot程序对比注意事项：基于idea开发SpringBoot程序需要确保联网且能够加载到程序框架结构1.2 基于SpringBoot官网创建项目1.3 SpringBoot项目快速启动① 对SpringBoot项目打包（执行Maven构建指令package）② 执行启动指令java -jar springboot_01_quickstart.jar # 项目的名称根据实际情况修改注意事项：jar支持命令行启动需要依赖maven插件支持，请确认打包时是否具有SpringBoot对应的maven插件。<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>2. SpringBoot概述问题导入学习了SpringBoot入门案例之后，感觉对比SpringMVC哪一个更加方便简洁？SpringBoot是由Pivotal团队提供的全新框架，其设计目的是用来简化Spring应用的初始搭建以及开发过程Spring程序缺点配置繁琐依赖设置繁琐SpringBoot程序优点自动配置起步依赖（简化依赖配置）辅助功能（内置服务器，……）2.1 起步依赖starterSpringB…