SpringDataJPA使用@Query Native查询返回Map与对象转换

在使用JPA来操作数据库时,在遇到复杂查询时(包括JOIN嵌套等),需要使用到@Query来使用原生SQL或者Hibernate的HQL进行查询,Repository中编写如下:

1
2
3
4
5
6
7
8
9
10
11
12
// 仅为演示样例
public interface UserRepository extends JpaRepository<User, Integer> {
@Query(value = "select * from user as u where u.group_id = :gid",
countQuery = "select count(*) from user as u where u.group_id = :gid",
nativeQuery = true)
Page<Map<String, Object>> findAllUserByGroupId(@Param("gid") Integer groupId, Pageable pageable);

@Query(value = "select * from user as u where u.group_id = :gid",
countQuery = "select count(*) from user as u where u.group_id = :gid",
nativeQuery = true)
Page<Object[]> findAllUserByGroupId2(@Param("gid") Integer groupId, Pageable pageable);
}

@Query支持使用两种方式进行接收:

  • Object[]:
    通过使用 Object[0], Object[1] 来获取结果字段值,需要手动将字段转换为对应的Bean字段,非常的不优雅。
  • Map<String, Object>:
    Map中的Key为对应的数据库字段String名,Object为字段对应的值,通过使用Map.get(key)来获取对应字段的值,相比Object[]会优雅一些。

那么有没有一种办法,可以将Map转换为对应的Object?

记一次生产环境上线的经历

最近写了一个项目,也是两三年没写后端的我再次尝试后端项目,在开发和部署的过程中,都遇到了许多奇奇怪怪的问题,
记录下来,也算是对这段时间惊心动魄经历的一次总结吧。

K8s容器内部时间错误

项目上线后,是使用Docker+K8s进行运维和部署的,但是测试环境是普通ECS主机。测试环境一切正常,
但是在生产环境出现了订单时间出现了错误,起初是认为自己项目时间没有做"UTC+8"处理,或者是mysql连接时
未指定时区。不过这两点检查之后,都没有问题。最后把目光放到了容器里。

使用swagger自动生成html文档

使用swagger自动生成html文档

使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
--启动类添加注解--
@EnableSwagger2

--添加依赖--
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>

启动后访问地址
http://localhost:8060/swagger-ui.html

使用RedisTemplate操作Redis

使用RedisTemplate操作Redis

  • 补充:List,Set,Map 区别
    • List,Set都继承自Collection接口,Map不是
    • List特点:元素有放入顺序,元素可以重复
    • Set特点:元素无放入顺序,元素不可重复,重复元素会被覆盖。
      • (元素虽然放入无顺序,但是元素在set中的位置是由该元素的HashCode决定的,其位置其实是固定的)
    • Map特点:适合存储键值对的数据
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×