[Spring Boot] Thymeleaf 타임리프 템플릿 사용하기 (3) :: Thymeleaf 변수 표현식 및 선택 변수 표현식
by 캐떠린변수 표현식(Variable Expression) 및 선택 변수 표현식(Selection Variable Expression)
- Variable Expressions, 변수 표현식 '${...}'
- Selection Variable Expression, 선택 변수 표현식 '*{...}'
타임리프 템플릿 사용하기 (1)에서 작업해놓은 프로젝트에 이어서 작업하기
1. TestMapper.xml : Mapper 기본 설정
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.thymeleaf.mapper.TestMapper">
</mapper>
2. TestDTO.java
package com.test.thymeleaf.domain;
import lombok.Data;
@Data
public class TestDTO {
private String title;
private String author;
private String discount;
}
3. ThymeleafApplication.java : 메인 클래스에 MapperScan 추가하기
package com.test.thymeleaf;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan(basePackages = "com.test.thymeleaf.mapper")
public class ThymeleafApplication {
public static void main(String[] args) {
SpringApplication.run(ThymeleafApplication.class, args);
}
}
MapperScan(basePackages="") 에 추가해야만 mapper 패키지를 찾아서 인터페이스를 쿼리 날릴 수 있는 담당자로 인식한다.
4. TestController.java
@Controller
public class TestController {
@Autowired
private TestMapper mapper; //DB
@Autowired
private TestDAO dao; //HashMap
@GetMapping(value = "/m2.do")
public String m2(Model model) {
//객체 반환(map/obj)
model.addAttribute("map", dao.get());
model.addAttribute("dto", mapper.get());
return "m2";
}
}
5. TestDAO.java
package com.test.thymeleaf.repository;
import java.util.HashMap;
import org.springframework.stereotype.Repository;
@Repository
public class TestDAO {
public HashMap<String, Integer> get() {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("kor", 100);
map.put("eng", 90);
map.put("math", 80);
return map;
}
}
6. TestMapper.java
package com.test.thymeleaf.mapper;
import com.test.thymeleaf.domain.TestDTO;
public interface TestMapper {
TestDTO get();
}
7. TestMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.thymeleaf.mapper.TestMapper">
<select id="get" resultType="com.test.thymeleaf.domain.TestDTO">
select title, author, discount from tblBook
where seq = 5
</select>
</mapper>
8. m2.html
<!DOCTYPE html>
<html xmlns:th="https://thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="https://me2.do/5BvBFJ57">
</head>
<body>
<h1>Thymeleaf <small>객체 출력</small></h1>
<h2>Map</h2>
<div th:text="${map}"></div>
<ul>
<li th:text="${map.get('kor')}"></li>
<li th:text="${map.kor}"></li>
<li th:text="${map.eng}"></li>
<li th:text="${map.math}"></li>
</ul>
<h2>DTO</h2>
<div th:text="${dto}"></div>
<ul>
<li th:text="${dto.getTitle()}"></li>
<li th:text="${dto.title}"></li>
<li th:text="${dto.author}"></li>
<li th:text="${dto.discount}"></li>
</ul>
<hr>
<!-- 선택 변수 표현식 -->
<h3>선택 변수 표현식</h3>
<ul th:object="${map}">
<li th:text="*{kor}"></li>
<li th:text="*{eng}"></li>
<li th:text="*{math}"></li>
</ul>
<ul th:object="${dto}">
<li th:text="*{title}"></li>
<li th:text="*{author}"></li>
<li th:text="*{discount}"></li>
</ul>
</body>
</html>
번외. m2.html : 선택 변수 표현식 테스트 해보며 익히기
<hr>
<div>테스트</div>
<div th:text="*{title}"></div> <!-- X -->
<div th:text="*{kor}"></div> <!-- X -->
<br>
<div th:object="${dto}"> <!-- O -->
<div th:text="*{title}"></div>
</div>
<div th:object="${map}"> <!-- O -->
<div th:text="*{kor}"></div>
</div>
<br>
<div th:object="${dto}"></div> <!-- X -->
<div th:text="*{author}"></div>
★결론★: 선택 변수 표현식을 사용하기 위해서는 부모 태그에 th:object 속성을 사용하여 서버에서 보내는 객체명을 적어줘야하고, 자식 태그에 th:text 등의 속성을 사용하여 변수명을 적어줘야만 원하는 값을 정상적으로 출력할 수 있다.
*글 작성에 참고한 내용: 학원 쌤의 열정적인 수업
'Spring' 카테고리의 다른 글
[Spring Boot] Thymeleaf 타임리프 템플릿 사용하기 (5) :: Thymeleaf 연산자 (0) | 2024.01.17 |
---|---|
[Spring Boot] Thymeleaf 타임리프 템플릿 사용하기 (4) :: Thymeleaf 메세지 표현식(Message Expressions) (0) | 2024.01.17 |
[Spring Boot] Thymeleaf 타임리프 템플릿 사용하기 (2) :: Thymeleaf 플러그인 설치하기 (0) | 2024.01.17 |
[Spring Boot] Thymeleaf 타임리프 템플릿 사용하기 (1) :: Thymeleaf 표현식 및 변수 표현식 (0) | 2024.01.17 |
[Spring Boot] Spring Boot에서 MyBatis 연동하기 (2) | 2024.01.15 |
블로그의 정보
All of My Records
캐떠린