log

2025-02-20

定义Optional对象
import java.util.Optional
@Value("${myValue:#{null}}")
private Optional<String> value;

if (value.isPresent()) {
    // do something cool
}
-------------------------
@Entity
public class Book {
    @Column
    private LocalDate publishingDate;
    ...
    public Optional getPublishingDate() {
        return Optional.ofNullable(publishingDate);
    }
    public void setPublishingDate(LocalDate publishingDate) {
        this.publishingDate = publishingDate;
    }
}
Session session = em.unwrap(Session.class);
Optional<Book> book = session.byId(Book.class).loadOptional(1L);
-------------------------

使用@Entity(name=***)时: Repository中的@Query(***)中,只能写sql语句(当然也不用写nativeQuery=true了!)
使用@Entity+@Table(name=***)时: Repository中的@Query(***)中,可以写hql与sql(而且写sql时候必须加上nativeQuery=true)

nativeQuery = true时 有nativeQuery = true时,是可以执行原生sql语句
nativeQuery = false时
select * from xxx中xxx也不是数据库对应的真正的表名,而是对应的实体名,
并且sql中的字段名也不是数据库中真正的字段名,而是实体的字段名。
Optional.of():传递参数,如果of中的对象是null,就报空指针异常。
Optional.ofNullable():允许ofNullable传递null对象
Optional.empty():返回空的Optional实例
optional.isPresent():判断Optional实例是否为空
optional.orElse():如果optional为空的话返回orElse中的对象
optional.get():获取optional中的T对象
optional.map():如果optional不为null,则执行map方法中的映射函数得到返回值。
                optional.map(Function<? super T,? extends U> mapper)
                
常规写法
User user = .....
if(user != null) {
  String name = user.getUsername();
  if(name != null) {
    return name.toUpperCase();
  } else {
    return null;
  }
} else {
  return null;
}

使用optional
Optional<User> user = ...
return user.map(u -> u.getUsername())
           .map(name -> name.toUpperCase())
           .orElse(null);


常规写法
if (map.get("user")!=null){
    Map<String,Object> user = (Map<String, Object>) map.get("user");
    if (user.get("info")!=null){
        Map<String,Object> info = (Map<String, Object>) user.get("info");
        if (info.get("address")!=null){
            String address = (String) info.get("address");
            System.out.println(address);
        }
    }
}

使用optional
String address=Optional.ofNullable(map)
        .map(m->(Map<String,Object>)m.get("user"))
        .map(user->(Map<String,Object>)user.get("info"))
        .map(info->(String)info.get("address"))
        .orElse(null);


常规写法
if (user!=null){
    UserInfo info = user.getInfo();
    if (info!=null){
        String address = info.getAddress();
    }
}

使用optional
String address = Optional.ofNullable(user)
        .map(u -> u.getInfo())
        .map(info -> info.getAddress())
        .orElse(null);
        
当某个值为空时设置默认值:
User resultUser = Optional.ofNullable(user).orElse(new User());