在很多时候,我们并不是想要查询到数据库中所有的列内容,而是中间特定的列对应的内容,使用Spring boot Jpa实现这类查询需要下面的步骤:
首先需要一个实体类, 比如
@Table(name = "LoginLog")
@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class LoginLog {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name = "id", columnDefinition = "bigint", nullable = false, unique = true)
Long id;
@Column(name = "userId", columnDefinition = "bigint")
Long userId;
@Column(name = "ip", columnDefinition = "varchar(20)", nullable = false)
String ip;
@Column(name = "address", columnDefinition = "varchar(50)")
String address;
@Column(name = "create_time", columnDefinition = "datetime default now()")
String create_time;
}
上面对应的信息有id, userId, ip, address, create_time, 如果我只想要ip, address, create_time
, 那么我需要重新定义一个接口, 接口中间是实体类对应的getter
!!
public interface LoginLogInfo {
/*
自定义查询结果集 获取用户的登录日志
*/
String getIp();
String getAddress();
String getCreate_time();
}
定义好这个接口之后,我们可以直接以返回类型的形式使用这个接口
@Query(value = "SELECT ip, address, create_time FROM login_log WHERE user_id=:user_id", nativeQuery = true)
List<LoginLogInfo> findAllByUserId(@Param("user_id") Long user_id);
这样返回的结果就是我们需要的内容了