Java项目记录与思考

本文详细介绍了Java项目中的关键技术和组件,包括Lombok简化代码、SwaggerAPI文档、Jackson序列化、SpringBoot框架、MyBatisORM、JWT安全、AOP切面编程、MongoDBNoSQL、node.js前端适配、npm包管理等,旨在帮助读者全面理解Java项目开发流程。
摘要由CSDN通过智能技术生成

前言

用于记录java项目相关


一、黑马–苍穹外卖

项目语法

  1. common 工具类
    pojjo 普通java对象
    server 服务端代码

  2. .idea文件夹 由 IDEA自动生成

  3. pom文件用于管理项目依赖的版本

  4. POJO细分 :
    VO 前端展示
    DTO前后端传输
    Entity 实体对象

  5. Lombok :样板代码,导入后只需要注解配置,减少冗余

  6. Lombok :
    @Data 自动生成get、set方法
    @Builder builder模式创建实例
    @NoArgsConstructor 无参构造方法
    @AllArgsConstructor 有参构造方法(所有)

7.@ApiModel(description = “员工登录返回的数据格式”) : 基于Swagger(一个api文档工具) 的 api文档生成注解 ,description为描述

8.@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = “yyyy-MM-dd HH:mm:ss”) : 规范序列化格式 string类型,格式为xxx

9.BigDecimal类型: 高精度浮点数 ,大于double的16位

10.LocalDateTime类型: java中的时间类

11.json序列化依赖: jackson-databind

12.Api文档生成依赖: knife4j-spring-boot-starter

13.xml中 : parent父项目(继承依赖) dependency 当前项目依赖

14.spring-boot依赖: 其一 spring-boot-configuration-processor

15.常量定义方法: public static final String PASSWORD_ERROR = “密码错误”;

16.线程局部存储器: public static ThreadLocal threadLocal = new ThreadLocal<>();

一个线程可以创建多个 threadloacal实例,用于存储不同值。 不同线程threadloacal独立

17.enum: 用于存放枚举类型

18.super() : 调用父类构造方法

19.this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false) : 配置json

20. this.registerModule(simpleModule): json注册模块

21.JWT : 安全令牌组件

22.json 内容设置: JSONObject amount = new JSONObject(); amount.put(“currency”, “CNY”)

23. java.util.Base64 : 二进制转文本包 String packageSign = Base64.getEncoder().encodeToString(signature.sign());

24.@SpringBootApplication : Springboot快速启动

25.@EnableTransactionManagement : 注解方式的事务管理

26.@Slf4j : 开启日志记录注解

27.@EnableCaching : 开启缓存

28.@EnableScheduling : 开启定时任务调度

29.Spring boot启动方法:
SpringApplication.run(SkyApplication.class, args) 主启动项
自动关联注解 @Controller @Service @Repository @Configuration @Component

30.@Target(ElementType.METHOD) : 限定自定义注解的范围,只能用在方法上

31.@Retention(RetentionPolicy.RUNTIME) : 注解保留策略 ,运行时保留

32.自定义注解之一 传递value操作方法
public @interface AutoFill
{
//数据库操作类型:UPDATE INSERT
OperationType value();
}

33.@Aspect : 定义切面

34.@Component : 基本组件注解

35.@Pointcut(“execution(* com.sky.mapper..(…)) && @annotation(com.sky.annotation.AutoFill)”)
定义切点 匹配com.sky.mapper中所有方法 带有@AutoFill的将作为切点,可以应用通知业务。

36.@Before(“autoFillPointCut()”)
前置通知,调用 autoFillPointCut()

37. getclass() + .invoke : 反射调用
Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class);
setUpdateUser.invoke(entity,currentId);

38.@Bean : 容器管理对象

39.@Configuration : 配置型注解 ,用于声明bean

40.@ConditionalOnMissingBean : 不存在该bean时,创建bean

41.@Autowired : 注解的自动装配

42:拦截器
registry
.addInterceptor(jwtTokenAdminInterceptor) 拦截器类型
.addPathPatterns(“/admin/**”) 拦截路径
.excludePathPatterns(“/admin/employee/login”); 排除路径

43.Docket docket = new Docket(DocumentationType.SWAGGER_2)
Api接口相关

44. 资源静态映射 handler -> location
registry.addResourceHandler(“/doc.html”).addResourceLocations(“classpath:/META-INF/resources/”);

45.ServerEndpoint 注册辅助 :import org.springframework.web.socket.server.standard.ServerEndpointExporter;

46.@RestController : @Controller 控制器注解 + @ResponseBody 响应结果直接作为http结果返回

47.@RequestMapping(“/admin/category”) : 配置路径映射

48.@Api(tags = “分类相关接口”) :API分类描述

49. @PostMapping : 路径映射后的post请求处理注解

50. @ApiOperation(“新增分类”) : API子类

51.@RequestBody CategoryDTO categoryDTO :接受请求中的参数 多为json 和 xml

52. @GetMapping(“/page”) : 路径映射后的 /page , post请求处理注解

53. @DeleteMapping :路径映射后的http delete请求处理

54. @PutMapping: 路径映射后的http put请求处理

55.@PathVariable(“status”) Integer status : 从路径中获取status变量,转化为Integer类型参数

56. @PostMapping(“/status/{status}”) : { } 动态路径参数

57.@RequestParam : 接受请求中的参数

58. @CacheEvict(cacheNames = “setmealCache”,key = “#setmealDTO.categoryId”) : 缓存清除注解

59. @ExceptionHandler : 业务异常注解

60.@Mapper : MyBatis 中的Mapper ,用于定义sql语句

61. @Insert() : 注解声明insert方法

62.@Select(“select * from address_book where id = #{id}”) : 注解声明select方法

63.@Update(“update address_book set is_default = #{isDefault} where user_id = #{userId}”) :注释声明@Update方法

64.@Delete(“delete from address_book where id = #{id}”) :注释声明delete方法

65.@AutoFill(value = OperationType.UPDATE) :默认值填充

66.MyBatis : 接口代理 , 接口 +注解 实现sql功能

67. @Transactional :事务注解

68.@Service: :业务层注解

69. 从配置文件中读取属性值
@Value(“${sky.shop.address}”)
private String shopAddress;

70.@Scheduled(cron = "0 * * * * ? ") :定时任务注解

71.@ServerEndpoint(“/ws/{sid}”) :定义WebSocket 服务器端点

72.@OnOpen :OnOpen所标记的方法会在WebSocket 启动后立即执行

73. @OnMessage :服务器接受消息时调用

74. @OnClose :客户端与服务器连接关闭时调用

75.yml文件: 标准配置文件

76.xml文件: maven配置文件 、sql语句文件

77.<resultMap> : mybatis语法, 将查询到的结果赋值给对应java对象

78.@Test :Junit测试注解

79.JUnit: Java 编程语言中的单元测试框架

80.重构项目的依赖(maven) :配置完成后,右键–>Maven–>重构 ,方可运行。

81.sql服务启动 : 管理员身份打开命令行 -> net start mysql

82.Mysql workbench sys :系统工具,无需深入理解

83.Mysql workbench 表约束:
Primary Key (PK): 主键约束,唯一标识
Not Null (NN): 非空约束
Unique (UQ):唯一性约束,表中该项不能重复
Binary (B): 二进制约束,必须存储二进制数字
Unsigned (UN): 无符号值约束,不能是负数
Zero Fill (ZF):零填充约束,小于指定位数时,前面填充0
Auto Increment (AI):自增约束
Generated (G):自动生成约束,该列由数据库自动计算所得。

84.Sql workbench :
技术点 三个小符号 代表 信息、配置、表单
技术点 填写表单 apply即可

85.yml文件中: 前后端连接(redis) 、后端与数据库连接密码(data source) 不同

86.Mysql workbench : 作为连接数据库的桥梁 ,可以先在sql中验证数据库账号密码

87.数据库连接:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
host: localhost
port: 3306
database: sky_take_out
username: root
password: 111111

88.前后端连接:
redis:
host: localhost
port: 6379
password: 123456
database: 10

89. 项目运行逻辑:
controller 接受请求 ->转 service 接口 -> 转 mapper层 (由于Mybaits , 使用接口+注解实现)

90.BeanUtils.copyProperties(categoryDTO, category) : 属性拷贝,相同赋值,不同赋值为null

91. category.setStatus(StatusConstant.DISABLE) : set方法 status是属性名称

92.Mybatis示例: 接口+注解

@Insert(“insert into category(type, name, sort, status, create_time, update_time, create_user, update_user)” +
" VALUES" +
" (#{type}, #{name}, #{sort}, #{status}, #{createTime}, #{updateTime}, #{createUser}, #{updateUser})")
@AutoFill(value = OperationType.INSERT)
void insert(Category category);

93.Localhost地址 127.0.0.1

94.Jackson 一种流行的java序列化 反序列化器

95.@ConfigurationProperties(prefix = “sky.alioss”) : prefix部分 前缀添加

96.public class PageResult implements Serializable {} : 表明 具有Serializable的能力(此处) / 实现Serializable的接口

96.@Builder : 构建对象方法 (有参构造) ,无参构造默认生成

97.@Data :设置对象属性方法

98. interface: 接口声明

99. @interface : 注解声明

100.@Target(ElementType.METHOD) : 作用域

101.@Retention(RetentionPolicy.RUNTIME) : 运行时保留,可通过反射获取该注解,执行相关逻辑

102.@Aspect : 切面类AOP注解

103.@ConditionalOnMissingBean :条件创建bean注解,当不存在bean时 ,才会创建

104:controller: 偏向于用户界面的请求 service偏向于业务逻辑

项目组件

1.node.js :基于Chrome v8 的 javascript引擎 , 目前作为 前端接口和后端服务逻辑的适配(有其他功能)。
2.npm :node js的包安装工具,类似于conda的包管理
3.前后端分离开发 api接口文档 : yapi,使用接口文档可以不再去理解前端代码 ,建议本地部署
4.本地服务: localhost : 端口号
5.Docker : 用于封装微服务
6.MongoDB : 一种 nosql 数据库
7.pm2: node js 的进程管理工具

结语

Java项目视频看了很多,但是总觉得没有深入理解一个项目,本文章用于汇总记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@白圭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值