Java 实用小笔记 (持续更新......)

@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

org.springframework.context.ApplicationEventPublisher

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值