文章目录
@Mapper 注解 – 更新 Bean 对象
MapStruct使用指南:https://zhuanlan.zhihu.com/p/368731266
有时候, 我们不是想返回一个新的 Bean 对象, 而是希望更新传入对象的一些属性。这个在实际的时候也会经常使用到。
在 AddressMapper 类中, 新增如下方法
/**
* Person->DeliveryAddress, 缺失地址信息
* @param person
* @return
*/
DeliveryAddress person2deliveryAddress(Person person);
/**
* 更新, 使用 Address 来补全 DeliveryAddress 信息。 注意注解 @MappingTarget
* @param address
* @param deliveryAddress
*/
void updateDeliveryAddressFromAddress(Address address,
@MappingTarget DeliveryAddress deliveryAddress);
注解 @MappingTarget后面跟的对象会被更新。 以上的代码可以通过以下的测试。
@Test
public void updateDeliveryAddressFromAddress() {
Person person = new Person();
person.setFirstName("first");
person.setDescription("perSonDescription");
person.setHeight(183);
person.setLastName("homejim");
DeliveryAddress deliveryAddress = AddressMapper.INSTANCE.person2deliveryAddress(person);
assertEquals(deliveryAddress.getFirstName(), person.getFirstName());
assertNull(deliveryAddress.getStreet());
Address address = new Address();
address.setDescription("addressDescription");
address.setHouseNo(29);
address.setStreet("street");
address.setZipCode(344);
AddressMapper.INSTANCE.updateDeliveryAddressFromAddress(address, deliveryAddress);
assertNotNull(deliveryAddress.getStreet());
JSON 复杂对象转换
Map<String, List<Catelog2Vo>> result = JSON.parseObject(catalogJSON, new TypeReference<Map<String, List<Catelog2Vo>>>(){});
导入一个配置类
application.yml与bootstrap.yml的区别
- 若application.yml 和bootstrap.yml 在同一目录下:bootstrap.yml 先加载 application.yml后加载
- 一旦bootStrap.yml 被加载,则内容不会被覆盖。
ImmutableMap 使用实例及好处
1.对不可靠的客户代码库来说,它使用安全,可以在未受信任的类库中安全的使用这些对象 2.线程安全的:immutable对象在多线程下安全,没有竞态条件 3.不需要支持可变性, 可以尽量节省空间和时间的开销. 所有的不可变集合实现都比可变集合更加有效的利用内存 (analysis) 4.可以被使用为一个常量,并且期望在未来也是保持不变的
immutable对象可以很自然地用作常量,因为它们天生就是不可变的对于immutable对象的运用来说,它是一个很好的防御编程(defensive programming)的技术实践。
tip :key 和 value 不能为 null
案例:
Map<Integer, String> INTEGER_STRING_MAP =
new ImmutableMap.Builder<Integer, String>().
put(30, "IP地址或地址段").
put(31, "端口号或范围").
put(32, "IP地址或地址段").
put(33, "端口号或范围").
put(34, "代码值").
put(38, "探针名称").
put(39, "网络协议号(protocol)").
put(40, "ipv6源IP(ipv6_src_addr)").
put(41, "ipv6目标IP(ipv6_dst_addr)").
put(42, "网络协议名称(protocol_map)").
put(43, "输入接口snmp(input_snmp)")
.build();
}
Java中lombok @Builder注解使用
原文链接:https://juejin.cn/post/6844903859387809799
给对象设置值得时候可以链式调用,看上去会优雅一点
public class User {
private Integer id;
//注意这里的默认值
private String name = "李四";
private String address;
}
传统的给对象的每个属性设置值得写成这样:
User user = new User();
user.setId(1);
user.setName("张三");
user.setAddress("北京");
加上 @Builder 注解之后,可以写成链式调用
@Builder
@Data
class User {
private Integer id;
@Builder.Default
private String name = "李四";
private String address;
}
public static void main(String[] args) {
User user = User.builder()
.id(1)
.name("张三")
.address("北京")
.build();
}
tip:
- @Builder.Default 有默认值的必须加上这个注解
- 子类的 Builder 对象没有父类的属性,所以设置值得时候不会找到父类的属性
Mybatis 动态 sql (selectDSLCompleter)
https://zhuanlan.zhihu.com/p/343289971
异步操作
demo:https://blog.csdn.net/C18298182575/article/details/104016591