遇到的陌生函数
xxxMapper.selectList()
: 使用mybatis获取数据库某几行数据。
new QueryWrapper<>().lambda()
: 创建sql查询对象isNull(实体类::getXXX)
: 判断某个字段是否为空or() / and()
: 链式连接多个查询条件
ifPresent()
和 Optional<实体类>
的配合使用
ifPresent
是 Java 8 引入的一个方法,它是 java.util.Optional 类的一个实例方法
- 消费操作:如果 Optional 对象包含非空值,ifPresent 方法会将这个值传递给一个 Consumer 接口的实现,即一个接受一个参数的函数式接口,并执行这个接口的 accept 方法。
- 避免空指针异常:通过使用 ifPresent,你可以在不直接调用 get() 方法的情况下,对 Optional 对象中的值进行操作,从而避免可能的空指针异常。
- 链式调用:ifPresent 方法返回 Optional 对象本身,这使得你可以在调用 ifPresent 后继续链式调用其他 Optional 方法。
Optional
类是 Java 8 为了帮助开发者更优雅地处理可能为 null 的情况而引入的。
peek()
: 跟 foreach()
有点像,但peek是中间操作,foreach是终端操作。findFirst()
: findFirst() 是一个终端操作,它用于返回流中的第一个元素。如果流为空(即没有任何元素),则 findFirst() 返回一个空的 Optional 对象。
分批处理
- 思路一: 如果数据库读取数据时无法一次性读入所有数据到后端服务器中,或者业务需求只需要一次接口访问处理一部分数据时。
- Mapper层读取数据时使用 .last(“limit 10”) 来限制读取的条数
- 思路二: 如果一次性读入了所有数据,但是数据在处理过程中还需调用外部接口,但是外部接口无法一次性承受所有数据的批量访问。
Lists.partition(实体对象列表, 批次大小)
parallelStream()
- 分批处理时,如何将流中元素和外部接口批量返回的数据进行对应。建议可以使用访问接口时和接口返回时数据中的不变量作为map的key,建立起两者之间的联系。
命名规范和常见的取名示例
- 包名:
- 应该全部使用小写字母
- 通过以公司或组织域名的逆序开始
- 避免使用缩写,除非它是广泛认可的
- 类名
- 使用驼峰命名法,首字母大写
- 类名应该是名词,如
User
, Order
, PaymentService
- 接口名
- 通常以大写字母I 开头,后面跟驼峰命名法
- 接口名应该是形容词或过去分词,如
IUserRepository
, IOrderService
- 方法名
- 使用驼峰命名法,首字母小写
- 方法名应该是动词或动词短语,描述方法的行为
- 变量名
- 使用驼峰命名法,首字母小写
- 变量名应该是描述性的,表名变量的用途
- 常见命名:
- 数据库一中的一条数据:
entity
- 数据库映射对象:
do
- 视图映射对象:
vo
- 输入对象/输出对象:
inputObj / ouputObj