Skip to content
On this page

entityManager

多表关联查询 + 类型转换

java
/**
	 * 查询记录(按用户)
	 * @param codeId: 码id
	 */
	@GetMapping(path="/search/log")
	@Token
	@SuppressWarnings("unchecked") // 避免类转换告警(由于泛型擦除机制)
	public @ResponseBody Result searchLog(
		@NotNull(message="用户不存在!") @LoginUser CustUser user
	) {
		String sqlString = "select csl.create_time as createTime, sb.name as brandName, sp.name as productName, spt.name as productTypeName " +
			"FROM code_search_log as csl " +
			"LEFT JOIN store_brand as sb " +
			"ON csl.brand_id = sb.id " +
			"LEFT JOIN store_product as sp " +
			"ON csl.product_id = sp.id " +
			"LEFT JOIN store_product_type as spt " +
			"ON csl.product_type_id = spt.id " +
			"where csl.cust_user_id = :userId " +
			"order by csl.create_time desc";
		List<UserSearchLogVO> data = (List<UserSearchLogVO>)entityManager.createNativeQuery(sqlString)
			.setParameter("userId", user.getId())
			.unwrap(NativeQueryImpl.class) // 类型转换
			.setResultTransformer(Transformers.aliasToBean(UserSearchLogVO.class)) // 类型转换
			.getResultList();

		return ResultResponse.success(data);
	}
java
@Data
public class UserSearchLogVO {
  // 品牌名称
  private String brandName;
  // 产品名称
  private String productName;
  // 产品型号
  private String productTypeName;
  // 查询时间
  private Date createTime;
}

以上代码改为为 JpaRepository:

java
public interface CodeSearchLogRepository extends JpaRepository<CodeSearchLog, Integer>, JpaSpecificationExecutor<CodeSearchLog>  {
  // 根据 二维码id 查询 扫码查询记录
  @Query(value = "SELECT csl.create_time as createTime, sb.name as brandName, sp.name as productName, spt.name as productTypeName " +
    "FROM code_search_log as csl " +
    "LEFT JOIN store_brand as sb " +
    "ON csl.brand_id = sb.id " +
    "LEFT JOIN store_product as sp " +
    "ON csl.product_id = sp.id " +
    "LEFT JOIN store_product_type as spt " +
    "ON csl.product_type_id = spt.id " +
    "WHERE csl.cust_user_id = :userId " +
    "ORDER BY csl.create_time DESC", nativeQuery = true)
  List<UserSearchLogVO> findByUserId(@Param("userId") Integer userId);
}
java
List<UserSearchLogVO> data = codeSearchLogRepository.findByUserId(user.getId());