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());