Статьи

Spring Boot & Hibernate: печать запросов и переменных

Уже поздно в офисе, и вы застряли с этим странным кодом Jpa с JoinColumns и каскадами, и вы не можете найти, что идет не так. Вы хотите, чтобы был способ просмотреть напечатанные запросы, а также значения.
С небольшой настройкой приложения Spring Boot это возможно.

С помощью Ломбока вот наша модель jpa.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
package com.gkatzioura.hibernatelog.dao;
 
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
 
import lombok.Data;
 
@Data
@Entity
@Table(name = "application_user")
public class ApplicationUser {
 
    @Id
    private Long id;
 
    private String username;
 
    private String password;
 
}

Это хранилище

1
2
3
4
5
6
package com.gkatzioura.hibernatelog.dao;
 
import org.springframework.data.repository.CrudRepository;
 
public interface ApplicationUserRepository extends CrudRepository {
}

Не найденное исключение

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.gkatzioura.hibernatelog.controller;
 
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
 
@ResponseStatus(value = HttpStatus.NOT_FOUND)
class ApplicationUserNotFoundException extends RuntimeException {
 
    public ApplicationUserNotFoundException() {
    }
 
    public ApplicationUserNotFoundException(String message) {
        super(message);
    }
 
    public ApplicationUserNotFoundException(String message, Throwable cause) {
        super(message, cause);
    }
 
    public ApplicationUserNotFoundException(Throwable cause) {
        super(cause);
    }
 
    public ApplicationUserNotFoundException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

И контроллер

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.gkatzioura.hibernatelog.controller;
 
import java.util.Optional;
 
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
 
import com.gkatzioura.hibernatelog.dao.ApplicationUser;
import com.gkatzioura.hibernatelog.dao.ApplicationUserRepository;
 
@RestController
public class ApplicationUserController {
 
    private final ApplicationUserRepository applicationUserRepository;
 
    public ApplicationUserController(ApplicationUserRepository applicationUserRepository) {
        this.applicationUserRepository = applicationUserRepository;
    }
 
    @GetMapping("/user/{id}")
    @ResponseBody
    public ApplicationUser getApplicationUser(@PathVariable Long id) {
        Optional applicationUser = applicationUserRepository.findById(id);
        if(applicationUser.isPresent()) {
            return applicationUser.get();
        } else {
            throw new ApplicationUserNotFoundException();
        }
    }
 
}

Добавляя следующее в application.yaml, мы обеспечиваем создание таблицы с помощью hibernate, ведение журнала запросов, форматирование зарегистрированных запросов sql, а также отображаемые значения фактических параметров.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
spring:
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        show_sql: true
        use_sql_comments: true
        format_sql: true
logging:
  level:
    org:
      hibernate:
        type: trace

Только

1
curl http://localhost:8080/user/1

И вы получили свои журналы.

Опубликовано на Java Code Geeks с разрешения Эммануила Гкациоураса, партнера нашей программы JCG. См. Оригинальную статью здесь: Spring Boot & Hibernate: печать запросов и переменных

Мнения, высказанные участниками Java Code Geeks, являются их собственными.