@Controller public class SecurityController { @GetMapping("/messages/inbox") public ModelAndView currentUserName(@AuthenticationPrincipal CustomUser customUser) { String username = customUser.getUsername(); // .. find messages for this user and return them ... } }
말 줄임표 // Text truncation 줄임표를 사용하여 긴 텍스트의 문자열을 자릅니다. 콘텐츠의 내용이 너무 길 경우 .text-truncate 클래스를 사용하여 문자열을 자를 수 있습니다. display: inline-block 또는 display: block이 필요합니다. Praeterea iter est quasdam res quas ex communi. Praeterea iter est quasdam res quas ex communi.
문법 요약 아래에서 더 자세히알아보겠지만 타임리프에서 사용하는 문법은 다음과 같다. 간단한 표현 변수 표현식: ${...} 선택 변수 표현식: *{...} 메세지 표현식: #{...} 링크 URL 표현식: @{...} 조각 표현식: ~{...} 리터럴 텍스트: 'one text', 'Anothr one!', ... 숫자: 0, 34, 3.0, 12.3, ... 불린: true, false 널: null 리터럴 토큰: one, sometext, main, ... 문자 연산 문자 합치기: + 리터럴 대체: | The name is ${name}| 산술 연산 Binary operators: +, -, *, /, % Minus sign (unary operatior): - 불린 연산..
Spring = Spring Framework Spring은 JAVA 애플리케이션 개발을 위한 포괄적인 인프라를 지원해주는 Framework이다. 종속성 주입 등 다양한 기능을 제공하고 있다. Spring Boot Spring Boot는 기본적으로 Spring Framework를 설정하는데 필요한 구성을 제거하는 확장 버전이라고 생각하면 편하다. 개발자 입장에서 더 빠르고 효율적으로 프로그램 개발이 가능하도록 지원한다. 결론 Spring Boot는 Spring 자체의 확장 버전이다. 개발, 테스트, 배포가 Spring Framework에 비해서 혁신적으로 간편해졌다. 특정 프로젝트에서 필수적인 종속성 구성이 필요하다면 Spring을, 일반적인 종속성 구성으로 구현이 가능한 프로젝트라면 Spring Boo..
엔티티만으로는 데이터베이스에 데이터를 저장하거나 조회 할 수 없다. 데이터 처리를 위해서는 실제 데이터베이스와 연동하는 JPA 리포지터리가 필요하다. 리포지터리는 엔티티에 의해 생성된 데이터베이스 테이블에 접근하는 메서드들(예: findAll, save 등)을 사용하기 위한 인터페이스이다. 데이터 처리를 위해서는 테이블에 어떤 값을 넣거나 값을 조회하는 등의 CRUD(Create, Read, Update, Delete)가 필요하다. 이 때 이러한 CRUD를 어떻게 처리할지 정의하는 계층이 바로 리포지터리이다.
엔티티는 데이터베이스 테이블과 매핑되는 자바 클래스를 말합니다. spring-boot-starter-data-jpa 의존성을 추가하고 @Entiy 어노테이션을 붙이면 테이블과 자바 클래스가 매핑이 됩니다. 그래서 JPA에서 '하나의 엔티티 타입을 생성한다'라는 의미는 '하나의 클래스를' 작성한다는 의미가 됩니다. 엔티티라는 용어는 때로는 클래스를 의미하는 경우도 있고, 클래스에 의해 생성된 인스턴스를 의미하는 경우가 있습니다. 정확히 얘기 하자면, 엔티티 클래스 와 엔티티 인스턴스 혹은 엔티티 객체라는 표현이 정확합니다.
이전 페이지가 없으면 비활성화 th:classappend="${!paging.hasPrevious} ? 'disabled'" 다음 페이지가 없으면 비활성화 th:classappend="${!paging.hasNext} ? 'disabled'" 이전 페이지 링크 th:href="@{|?page=${paging.number-1}|}" 다음 페이지 링크 th:href="@{|?page=${paging.number+1}|}" 페이지 리스트 루프 th:each="page: ${#numbers.sequence(0, paging.totalPages-1)}" 현재 페이지와 같으면 active 적용 th:classappend="${page == paging.number} ? 'active'"