【实习记录】第6周 2023.07.31-2023.08.04

实习记录:

1. 生产者生产和消费者消费是异步的。

2. 生产者Producer给特定topic发一个Event对象的JSONObject.toJSONString(event),消费者Consumer接收到消息后,先将event字符串转换为JSON(Event event = JSONObject.parseObject(record.value().toString(), Event.class)),再转换成Event实例对象。再根据event对象构造需要插入到数据库的Message对象,再插入到数据库中,来发送站内消息。

3. 类上加上@Slf4j注解之后,可以不再声明logger,直接log.info();

        这个注解使得在编译的时候加上了

private static final Logger log = LoggerFactory.getLogger(A.class)

为什么加了@slf4j注解 就可以直接使用log了呢?_@slf4j log_怎么又有bug单的博客-CSDN博客

4. 判空时,null == a 和 a == null是一样的,但推荐写null == a;因为可能会写成null = a;编译时直接报错;而a = null是不报错的。

Java中null==值和 值==null的区别_null==和==null_CodeChenF的博客-CSDN博客

5. @PointCut(“@Annotation(com.lyzdfintech.opscp.management.aop.OperateLog)”)表示切点为带有@OperateLog注解的方法或类(看定义注解时的@Target()指向的是类还是方法还是其他)

@PointCut(“@Annotation()”): https://wenku.csdn.net/answer/630730b8e4d811edbcb5fa163eeb3507

6. 设计库需要进行关联的时候,关联的字段尽量在迁库的时候也不能改变。eg: 以合作伙伴编号 格式:C00001作为附件表的外键,而不是合作伙伴id(自增的)(迁库之后,自增id会和之前库里的不一样,所以就和文件表对应不上了)

7. @Mapper和@Repository的区别:二者都可以将bean进行装配,而@Repository需要在启动类上加上@MapperScan(basePackages = "com.lyzdfintech.opscp.management.mapper")注解,用于配置扫描地址。

@Mapper和@Repository的区别_@mapper和@repository区别_骑鹤下江南呀的博客-CSDN博客

8. @NotBlank只能作用在String,@NotNull可以作用在基本数据类型上。要配合@Valid注解使用

        @NotBlank的使用以及效果:@NotBlank的使用以及效果_Aku_2020的博客-CSDN博客

9. @NotBlank(message = “不能为空”, groups = {Add.class, Edit.class})

        配合 @Validated(Add.class) / @Validated(Edit.class)

        @NotNull @NotBlank及分组校验

validation校验 @NotNull @NotBlank及分组校验_南城.南城的博客-CSDN博客

10. 在类上加@Transactional(rollbackFor = Exception.class),类里边所有的public方法都是一个事务。

11. @Api写在Controller类上,@ApiModel(tags = “系统管理”),这个controller中的所有接口生成的接口文档都会在tags这个list下

        @ApiModel()写在类上

        @ApiModelProperty()写在方法、字段(属性)上

        @ApiOperation()写在方法上,表示一个http请求的操作

Swagger常见注解@API、@ApiOperation、@ApiParam等_瓜皮康的博客-CSDN博客

12. @EqualsAndHashCode(callSuper = true/false),用在子类的注解,当callSuper为true时,当子类和父类的属性都相同时,equals才相同;为false时,只要子类相同就可以,父类相不相同无所谓。

@EqualsAndHashCode(callSuper = true/false) 作用_equalsandhashcode 作用_ldj2020的博客-CSDN博客

13. @NoArgsConstructor作用在实体类上,是lombok的注解,生成一个无参构造器

lombok 基础注解之 @NoArgsConstructor_笑看烟雨红尘的博客-CSDN博客

Lombok 的三个构造方法注解@NoArgsConstructor,@RequiredArgsConstructor 和 @AllArgsConstructor 的用法 | 程序员笔记

14. @TableName(“table_name”)作用在与数据库对应的实体类上,指明该实体类对应的数据库名字,操作的数据库由BaseMapper<E>的泛型决定

        @TableId(value="id", type = IdType.AUTO)  //代表自增算法  作用在主键上。

        @TableField(value = “table_field”) //指定属性所对应的字段名(如果没有该注解,则默认数据库字段名为用“_”拼接变量名,eg:变量名为producerName,则默认数据库中对应字段为producer_name)

MYBatis-Plus常用注解@TableName、@TableId、@TableField、@TableLogic_@tablename注解_我爱布朗熊的博客-CSDN博客

15. 在mybatis中有一个resultMap标签,它是为了映射select查询出来的结果的集合,其主要作用是将实体类中的字段与数据库表中的字段进行关联映射。当实体类中的字段与数据库表中的字段相同时,可以将resultMap标签中的关联关系忽略不写。当实体类中的字段与数据库表中的字段不相同时,就需要在resultMap标签中将实体类字段与数据库字段一一进行关联映射,或者开启驼峰规则(mybatisPlus默认开启驼峰命名映射),让它自动转换。

        使用resultMap,就要禁用驼峰规则。如果不想改实体类的话,可以采用resultMap。

mybatis的mapper.xml中resultMap标签的使用详解_mapper.xml resultmap_光阴不负卿的博客-CSDN博客

16. @TableField(exist = false) 注解加载bean属性上,表示当前属性不是数据库的字段,但在项目中必须使用,这样在新增等使用bean的时候,mybatis-plus就会忽略这个,不会报错。

17. postman测试时代码报错:Could not initialize class org.xnio.channels.Channels(在其他人电脑上没问题);

        原因:jdk版本问题,jdk1.8.0_302有问题,改成jdk1.8.0_202成功运行。

Could not initialize class org.xnio.channels.Channels【亲测好使】_Java架构师Array的博客-CSDN博客

18. 截断表,重置主键并删除表中数据:TRUNCATE TABLE table_name

        @TableId("id"),数据库中id设置为了自增,但是该注解的默认主键自增策略为IdType.NONE(源码中写的:该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)),导致新增的数据中id是19位长度的数字。@TableId(value = "id", type = IdType.AUTO)时,自增id从1开始。

        原来的其他代码中未使用@Table()注解,数据库中id为一长串

如何解决mybatis-plus主键id太长_mybaits long长度_@逾越的博客-CSDN博客

使用@TableId注解注解时,遇到雪花算法出现前后端显示不一致_@tableid type为idtype.none时_一只代码小白啦啦啦的博客-CSDN博客

        当我们没有指定主键生成策略或者主键策略为NONE的时候,他跟随的是全局策略(在application.properties里配置的,默认是assign_id雪花算法mybatis-plus.global-config.db-config.id-type=assign_id),因此即使没写@TableId用的就是雪花算法:

        雪花算法是64位二进制的数字串,转换为十进制之后是19位(所以数据库中id19位)

        雪花算法优点数据迁移时,id不会从1自增,否则很容易产生主键冲突。雪花算法的时间位还有一个很重要的作用是可以根据时间进行排序。

        int类型自增的不方便数据迁移,UUID又不能根据时间排序。

分布式系统主键生成策略-雪花算法_主键雪花算法_码农六子的博客-CSDN博客

19. 数据库中的update_time点上了“根据当前时间戳更新”,当调用mapper.update()系列函数时才会将时间写入数据库的该字段。

20. @TableField(value = "create_time", fill = FieldFill.INSERT) 在插入时自动填充时间,不再需要setCreateTime和setUpdateTime

        @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") 注解指明时区和时间格式。

21. 数据库更新file时,update_time值不更新,这是因为selectByld可以取出update time的旧值,更新时填充策略会判断属性已有值,不进行自动填充,因此update time不会自动更新。而且官方目前没有直接提供强制更新的方法。 查看fillStrategy方法源码,我们也可以看到只有属性没有被填充值,才会执行set方法。

        解决方法@TableField(update = "now()"),注解上添加update=”now()”

关于updateById()无法自动更新时间以及空值_初级bug小天才的博客-CSDN博客

22. BeanUtils.copyProperties()

        将两个对象间的共同名字的属性进行拷贝。org.springframework.beans.BeanUtils包下的BeanUtils.copyProperties(a,b)是a拷贝到b

BeanUtils.copyProperties() 详解_除了菜还是菜的博客-CSDN博客

23. @RequestBody注解

        主要 用来接收前端传递给后端的json字符串中的数据 的(请求体中的数据)

        接受前端传输的json数据,并装配到后端的对象中。由于get方法没有请求体,所以get方法不能加@RequestBody注解。

@RequestBody介绍_@requesbody_coding sheep的博客-CSDN博客

日报:

2023.07.31

1. 走一遍kafka流程:启动zookeper、启动kafka、新建topic和partition并发送消息、新建消费者cmd获取当前topic的消息;kafka启动遇到了问题,删除日志文件后问题解决。

2. Spring整合kafka(引入pom依赖+配置application.properties),用spring容器中的KafkaTemplate和@KafkaListener注解

3. 改idea的increase/decrease font size快捷键,卸载xbox以及关闭游戏录制功能

4. 生产者调用的service是controller中的,来源于前端的请求,而消费者调用的service不是前端请求,所以没有request和response

5. 重构评论、点赞和关注功能,利用kafka在事件发生时向broker发送事件;消息队列用于异步处理,削峰解耦

2023.08.01

1. 数据库连接:3310 配置信息在微信文件传输助手

2. 克隆下来的项目仍然不能解析私有包:maven的resource的com中的私有包删掉_remote..文件;maven刷新、项目rebuild

3. 什么时候用公司封装的库,什么时候用springboot自带的库(比如注解、工具类等等)( controller包中以Controller为结尾的类是使用的spring原生的注解(@Service、@RestController等等),以Service为结尾的类是使用的公司封装的注解等)

4. lombok在pom文件里没有,是如何引入的

5. 前后端对接,没有详细设计文档,前后端的接口名称自己定义(前后端自己交流),参数直接在需求文档里看

6. 写生态伙伴增删改查需求:建表,建Mapper、mapper.xml、Service、entity;写addPartner接口

2023.08.02

1. 完成添加合作伙伴addPartner接口、上传文件upload、删除文件接口和级联删除文件函数

2. 查@NotBlank、@NotNull等lombok的注解,以及分组检验(message,groups={Add.class, Edit.class})

3. 查@Transactional(rollbackFor = Exception.class)注解,只有抛出异常时才会回滚

4. 看swagger的@Api(在controller tags)、@ApiOperate(value="", notes="")作用在方法上、@ApiModel()作用在类上、@ApiModelProperty()作用在方法/属性上

5. 看@EqualsAndHashCode(callSuper = true)、@NoArgsConstructor()和MybatisPlus的@TableName()、@TableId()、@TableField(exist=false)等注解

6. 自己写ReqDto和ResDto类

2023.08.03

1. postman测试时代码报错:Could not initialize class org.xnio.channels.Channels(在其他人电脑上没问题);原因:jdk版本问题,jdk1.8.0_302有问题,改成jdk1.8.0_202成功运行。

2. @TableId("id"),数据库中id设置为了自增,但是该注解的默认自增策略为IdType.NONE(源码中写的:该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)),导致新增的数据中id是19位长度的数字(雪花算法,64位二进制->19位十进制)。@TableId(value = "id", type = IdType.AUTO)时,自增id从1开始。

3. 实现合作伙伴的queryDetail、delete、queryList、edit接口。

4. 遗留问题:1)为什么都用POST请求? 2)文件表的update_time不是北京时间,但是new Date()是东八区的。

2023.08.04

1. 请假

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值