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连接时
未指定时区。不过这两点检查之后,都没有问题。最后把目光放到了容器里。

Java关于时间操作整理

由于最近的项目中,经常需要对时间进行操作和计算,每次搜索出的计算方式都不一样,为了保证代码的统一性,还是仔细的看一下,java的时间和相关处理类,到底都有什么吧。

Date (java.util.date)

Date类的大部分方法都被标记为Deprecated过时方法。在java1.8之后,增加了新的时间处理类(java.time)。

UDP与JavaUDP操作

UDP是什么

  • 全称 User Datagram Protocol
  • 一种用户数据报协议,又称用户数据报文协议
  • 是一个简单的面向数据报的传输层协议,正式规范为RFC 768
  • 用户数据协议、非连接协议

UDP为什么不可靠

  • 它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份
  • UDP在IP数据报的头部,仅仅加入了复用和数据校验(字段)
  • 发送端生产数据,接收端从网络中抓取数据
  • 结构简单、无校验、速度快、容易丢包、可广播

使用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

×