博客-前言

第一篇博客

平日里有过几次写作输出的冲动最后都放弃了。平时学业上的写作,我自己可以感受到写作对自己想法的磨砺。可能形容并不准确。简单来说我觉得写作的过程反过来会影响到写作者本身。原因我想可能是有些想法想写出来就需要深入思考,又或者说写东西时会让你进入思考状态,我自己是个比较较真的人,就喜欢反复斟酌,这个过程中也是对我无形的锻炼吧。所以最近总是想写点什么,却因为除了高中的作文,大学的大作业之外,确无其他的写作经历。又感觉不知道要写什么。直到近两天读到周志明老师的长篇博客《凤凰架构》

这本书讲了很多架构方面的知识,架构演进,分布式环境各种的技术问题和解决方案等等。目前读到分布式事务。读到这本书我突然产生了写技术博客的冲突,恰好最近想写点什么,我又在深入学习java,就干脆写一些技术博客吧。

具体写什么我又犯了难。在读周老师的凤凰架构时,发现一个简单的技术名词背后可能有很多的问题需要解决。有些问题不去学习了解是不可能知道的。比如周老师在分布式篇章写的服务发现,负载均衡,流量控制,链路追踪等问题,对我这个没有系统了解,实践过分布式的人来说,是很难自己想到分布式系统中要有这么多的门道,况且这些问题本身看似是一个细节,却同时又是一个足够大的问题,可以有很多种的实现。这种感觉是一直存在的,学之前了解颇为片面,学之后才知道是什么东西。所以我决定深入一个问题系统性的去构建一个组件。解决一些具体的问题恰好正打算要学习微服务,同时在周老师的博客中学习了RPC(Remote Procedure Call,RPC)的一些基本问题。我又在网上了解了rpc系统的实现难度。实现一个较为简单的rpc系统的工作量应该是可以接受的。所以我决定自己去编写一个简单的rpc。接下来就涉及到写一个rpc需要什么技术了。所以我想先简单聊聊rpc。

RPC

强烈推荐一下周老师对于RPC演进的讲述
https://icyfenix.cn/architect-perspective/general-architecture/api-style/rpc.html

从周老师的博客中了解到
首先RPC的初衷是为了让计算机能够跟调用本地方法一样去调用远程方法
所以首先从本地方法的调用来切入,从进程间通信IPC(Inter-Process Communication,IPC)的角度看,似乎可以将RPC看做IPC的特例。当然这是有一系列问题的。随着后面对RPC的看法不断迭代,最终我们可以将RPC协议的实现归结到三个问题:

  • 如何表示数据
  • 如何传递数据
  • 如何确定方法

简单的说一下:
表示数据可以简单理解为序列化和反序列化
传递数据就涉及到了网络编程,java网络编程自然能想到netty。所以我准备先学习一下netty在去做RPC实现。

netty学习

在网上找了一下资料
首先是一本书
《跟闪电侠学 Netty:Netty 即时聊天实战与底层原理》
简单看了下评价,感觉不错。如果看下去感觉不好可能会换一本或者干脆不看书了。

然后在b站找了一个黑马的视频课。已经看完了nio部分,觉得老师讲解的很好。就是可能一些概念没有具体的深入,比较分散。我又是一个比较喜欢刨根问底的,就自己去翻了一些博客。
比如对于SelectionKey这个对象。
SelectionKey内部有:

  • Interest Set兴趣集合
  • Ready Set就绪集合
  • Channel通道
  • Selector选择器
  • Attach附加对象
    视频没直接讲解,而是在编写客户端服务端代码时去遇到问题去使用,分散在几个视频中。
    当然老师也说了主体是netty,不会在nio部分过多的耗费时间。
    总之目前来看,课程内容很干,我感觉很好。准备就跟着学。

结语

本篇文章可能废话很多,写到这发现已经写了两个小时,本来还想着把nio部分做一个笔记总结,只能放到明天了。
可能是积攒的倾诉欲太强了哈哈,写了许多自己的心路历程,写完才发觉废话很多。后面纯技术学习的文章应该不会这样了。应该类似于学习笔记与学习感受,文章结构会符合所学技术的知识结构,不会像这篇有点随笔的意思。

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一篇简单的 Mybatis-Plus 技术博客,仅供参考。 Mybatis-Plus 技术博客 前言 Mybatis-Plus 是一个基于 Mybatis 的增强工具,简化了 Mybatis 的使用,提供了许多实用的功能,如自动生成代码、分页、多租户、乐观锁等,并且完全兼容 Mybatis。 本文将介绍 Mybatis-Plus 的基本使用和一些高级功能,希望对使用 Mybatis-Plus 的开发者有所帮助。 正文 一、基本使用 1.引入依赖 在 pom.xml 文件中引入 Mybatis-Plus 的依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version> </dependency> ``` 2.配置数据源 在 application.yml 文件中配置数据源信息: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: root driver-class-name: com.mysql.jdbc.Driver ``` 3.配置 Mybatis-Plus 在 Mybatis 的配置文件中使用 Mybatis-Plus 的插件: ```xml <configuration> <plugins> <!-- Mybatis-Plus 插件 --> <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"/> </plugins> </configuration> ``` 4.创建实体类 创建一个 User 实体类,使用注解标注数据库表名和字段名: ```java @Data @TableName("user") public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; private String email; } ``` 5.创建 Mapper 创建一个 UserMapper 接口,继承 Mybatis-Plus 的 BaseMapper 接口: ```java public interface UserMapper extends BaseMapper<User> { } ``` 6.使用 Mapper 在 Service 中使用 UserMapper 的方法: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User getById(Long id) { return userMapper.selectById(id); } @Override public List<User> list() { return userMapper.selectList(null); } @Override public boolean save(User user) { return userMapper.insert(user) > 0; } @Override public boolean update(User user) { return userMapper.updateById(user) > 0; } @Override public boolean delete(Long id) { return userMapper.deleteById(id) > 0; } } ``` 二、高级功能 1.分页查询 使用 Mybatis-Plus 的 Page 类进行分页查询: ```java @Override public IPage<User> page(Integer pageNum, Integer pageSize) { Page<User> page = new Page<>(pageNum, pageSize); QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().gt(User::getAge, 18); return userMapper.selectPage(page, queryWrapper); } ``` 2.多租户 使用 Mybatis-Plus 的 MultiTenantType 接口和 MultiTenantLineHandler 类实现多租户: ```java public class MybatisPlusTenantLineHandler implements TenantLineHandler { @Override public Expression getTenantId() { // 返回当前租户 ID return new LongValue(1L); } @Override public String getTenantIdColumn() { // 返回租户 ID 的字段名 return "tenant_id"; } @Override public boolean ignoreTable(String tableName) { // 返回是否忽略该表 return "user".equalsIgnoreCase(tableName); } } @Configuration public class MybatisPlusConfig { @Bean public TenantLineInnerInterceptor tenantLineInnerInterceptor() { return new TenantLineInnerInterceptor(new MybatisPlusTenantLineHandler()); } @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(tenantLineInnerInterceptor()); return interceptor; } } ``` 3.乐观锁 使用 Mybatis-Plus 的 @Version 注解实现乐观锁: ```java @Data @TableName("user") public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private Integer age; private String email; @Version private Integer version; } @Override public boolean update(User user) { return userMapper.updateById(user) > 0; } ``` 结论 Mybatis-Plus 是一个非常实用的工具,可以显著提高开发效率和代码质量。本文介绍了 Mybatis-Plus 的基本使用和一些高级功能,希望对大家有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值