//Google AdSense

Configuration

63P

편리한 두 줄을 class로 !?

configration 어노테이션 명시

Configuration 어노테이션을 구현하여 클래스가 하나 이상의 Bean 메소드를 제공
스프링 컨테이너가 Bean의 정의를 생성하고 런타임시 그 Bean이 요청을 처리할 것을 선언.

궁극적으로 Sql Session Package를 얻어야 함

인터페이스 구현체가 필요

SqlSessionFactoryBean 클래스를 통해 인터페이스 구현

package kr.or.ksmart35.springboot_mybatis.config;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan(basePackages = "kr.or.ksmart35.springboot_mybatis", sqlSessionFactoryRef = "mybatisSessionFactory")
public class MybatisConfig {
	
	@Bean(name = "mybatisSessionFactory") 
	public SqlSessionFactory mybatisConfig(ApplicationContext context, DataSource dataSource) throws Exception {
		SqlSessionFactoryBean mybatisFactory = new SqlSessionFactoryBean();
		mybatisFactory.setDataSource(dataSource);
		mybatisFactory.setMapperLocations(context.getResources("classpath:mapper/**/*.xml"));
		mybatisFactory.setTypeAliasesPackage("kr.or.ksmart35.springboot_mybatis.domain");
		return mybatisFactory.getObject();
	}
}

SqlSessionFactoryBean 클래스 타입의 객체를 생성하여

dataSource, mapperLocations,typeAliasesPackage 설정 후 object리턴

Bean어노테이션으로 Spring(IOC) Container에 Bean을 등록하도록 하는 메타데이터를 기입

MapperScan 어노테이션으로 bascPackage와 sqlSessionFactoryRef 설정


interceptor

100P

package kr.or.ksmart35.springboot_mybatis.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

@Component 
public class LoginInterceptor implements HandlerInterceptor{
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
			HttpSession session = request.getSession();
			String sessionId = (String) session.getAttribute("SID");
			if(sessionId == null) {
				response.sendRedirect("/login");
				return false;
			}
		return true;
	}
}

dispatcher servlet 이전 handler interceptor에서 요청된 분기작업을 실행하도록함.

component 어노테이션으로 Spring(IOC) Container에 Bean을 등록하도록 하는 메타데이터를 기입

bean 어노테이션 : 개발자가 직접 제어할 수 없는 외부 라이브러리 등을 Bean으로 등록하기 위함
 vs 
component 어노테이션 : 개발자가 직접 작성한 Class를 Bean으로 등록하기 위함

package kr.or.ksmart35.springboot_mybatis.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import kr.or.ksmart35.springboot_mybatis.interceptor.LoginInterceptor;

@Configuration
public class WebConfig implements WebMvcConfigurer{
	
	@Autowired LoginInterceptor loginInterceptor;
	
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(loginInterceptor)
				.addPathPatterns("/**")
				.excludePathPatterns("/css/**")
				.excludePathPatterns("/")
				.excludePathPatterns("/login")
				.excludePathPatterns("/logout")
				.excludePathPatterns("/addMember");
	}
}

configuration 어노테이션 명시

구현한 interceptor 를 autowired 시키고 

webMvcConfigurer 인터페이스를 구현하여 interceptor add/exclude path pattern 설정


mybatis 사용 시 동적 쿼리를 이용하여 검색을 쉽게 처리할 수 있음!!!!!!!!!!!!!!!!!!!!


class에서 어노테이션을 통해 각종 설정이 가능해서 개발이 편리해진다!!

'SpringBoot' 카테고리의 다른 글

[Mybatis] logback  (0) 2020.06.02
[SpringBoot] 혼자서 실습  (0) 2020.06.01
[MyBatis] mybatis03  (0) 2020.05.27
[MyBatis] mybatis02 Dynamic SQL  (0) 2020.05.26

org.springframework.web.servlet.mvc.support.RedirectAttributes

스프링프레임워크에서 지원하는 redirect의 경우에도 데이터를 이동할 수 있게 해주는 클래스

get 방식으로 데이터가 전송됨.


@GetMapping("/login")
	public String login (Model model, @RequestParam(name="message", required = false) String message) {
		model.addAttribute("message",message);
		return "login/login";
	}
<label th:if="${message != null}" th:text="${message}"></label>

 


 

'SpringBoot' 카테고리의 다른 글

[SpringBoot] 혼자서 실습  (0) 2020.06.01
[MyBatis] Mybatis04 configuration / interceptor  (0) 2020.06.01
[MyBatis] mybatis02 Dynamic SQL  (0) 2020.05.26
[MyBatis] mybatis01  (0) 2020.05.25

Dynamic SQL

쿼리 내에 조건문을 사용하여 중복되는 쿼리들을 최소화할 수 있다.

 

trim 엘리먼트

여러 구문 중 하나만 실행할 수 있다.

 

update sql문

UPDATE tb_member
	SET
		m_id='',
		m_pw='',
		m_level='',
		m_name='',
		m_email=''

	WHERE m_id=''

trim 엘리먼트 사용시

<update id="modifyMember" parameterType="Member">
		UPDATE tb_member
		<trim prefix="SET" suffixOverrides=",">
			<if test="memberLevel != null and memberLevel !=''.toString()">m_level=#{memberLevel},</if>
			<if test="memberName != null and memberName !=''.toString()">m_name=#{memberName},</if>
			<if test="memberEmail != null and memberEmail !=''.toString()">m_email=#{memberEmail}</if>
		</trim>
		<where>
			<if test="memberId != null and memberId !=''.toString()">m_id=#{memberId}</if>
		</where>
	</update>

set 엘리먼트는 동적으로 SET 키워드를 붙히고 필요없는 콤마를 제거

prefix와 suffix (overrides) 키워드로 접두사와 접미사 관리가 쉬워짐

 

'SpringBoot' 카테고리의 다른 글

[MyBatis] Mybatis04 configuration / interceptor  (0) 2020.06.01
[MyBatis] mybatis03  (0) 2020.05.27
[MyBatis] mybatis01  (0) 2020.05.25
[SpringBoot] Thymeleaf layout  (0) 2020.05.19

Mybatis

개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크

* 퍼시스턴스 프레임워크(Persistence Framework)는 데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들의 집합이다. 퍼시스턴스 프레임워크를 사용하면 JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 시스템을 빠르게 개발할 수 있으며 안정적인 구동도 보장한다.

공식 사이트 : http://www.mybatis.org/mybatis-3/ko/index.html

 

MyBatis – 마이바티스 3 | 소개

마이바티스는 무엇인가? 마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와 ��

mybatis.org

라이브러리 추가 (mvnrepository.com)

  <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>x.x.x</version>
  </dependency>

웹 프로젝트 3 Layer

Spring Boot DI 

KsmartMapper.java
 @Mapper
 public interface KsmartMapper {
   
    public Member getMemberList(매개변수);
   
}
KsmartMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="kr.or.ksmart.mapper.KsmartMapper">
   <select id="getMemberList" parameterType=“매개변수의 데이터 타입" resultType="kr.or.ksmart.vo.Member">
SELECT *
FROM tb_member
   </select>

   <insert id="" parameterType=“"></insert>
   <update id="" parameterType=“"></update>
   <delete id="" parameterType=“"></delete>
</mapper>

@Mapper interface 구현을 mapper.xml에서 함


WAS 부팅시 위 정보로 connect pool 저장

패키지 별칭을 정할 수 있다.

Member.java
package ksmart35.springboot_mybatis.domain;

public class Member {
	private String memberId;
	private String memberPw;
	private String memberName;
	private String memberLevel;
	private String memberEmail;
	public String getMemberId() {
		return memberId;
	}
	public void setMemberId(String memberId) {
		this.memberId = memberId;
	}
	public String getMemberPw() {
		return memberPw;
	}
	public void setMemberPw(String memberPw) {
		this.memberPw = memberPw;
	}
	public String getMemberName() {
		return memberName;
	}
	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}
	public String getMemberLevel() {
		return memberLevel;
	}
	public void setMemberLevel(String memberLevel) {
		this.memberLevel = memberLevel;
	}
	public String getMemberEmail() {
		return memberEmail;
	}
	public void setMemberEmail(String memberEmail) {
		this.memberEmail = memberEmail;
	}
	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("Member [memberId=");
		builder.append(memberId);
		builder.append(", memberPw=");
		builder.append(memberPw);
		builder.append(", memberName=");
		builder.append(memberName);
		builder.append(", memberLevel=");
		builder.append(memberLevel);
		builder.append(", memberEmail=");
		builder.append(memberEmail);
		builder.append("]");
		return builder.toString();
	}
		
}
MemberMapper.java
package ksmart35.springboot_mybatis.mapper;

import org.apache.ibatis.annotations.Mapper;

import ksmart35.springboot_mybatis.domain.Member;

@Mapper
public interface MemberMapper {
	//회원가입
	public int addMember (Member member);
}
MemberMapper.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="ksmart35.springboot_mybatis.mapper.MemberMapper">
	<insert id="addMember" parameterType="Member">
		INSERT INTO tb_member
		(m_id, m_pw, m_level, m_name, m_email)
		VALUES (#{memberId}
				, #{memberPw}
				, #{memberLevel}
				, #{memberName}
				, #{memberEmail})
	</insert>
</mapper>
    
MemberService.java
package ksmart35.springboot_mybatis.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import ksmart35.springboot_mybatis.domain.Member;
import ksmart35.springboot_mybatis.mapper.MemberMapper;

@Service
@Transactional
public class MemberService {
	@Autowired private MemberMapper memberMapper;
	public int addMember(Member member) {
		return memberMapper.addMember(member);
	}
}
MemberController.java
	@PostMapping("/addMember")
	public String addMember(Member member) {
		System.out.println(member.toString());
		memberService.addMember(member);
		return "index";
	}
	

화면에서 보여지는 처리과정의 역순으로 작성하는게 편함

Thymeleaf의 레이아웃 기능

  • fragments 를 이용해서 레이아웃을 분리하고 조립하는 방식의 페이지 처리 가능
  • 프로젝트내 fragments폴더 작성 header.htmlfooter.html작성

layout.html의 변경 default 안에 모든 태그가 온전하게 있어야 함.

MVN


Thymeleaflayout dialect 사용하기

  • 확장 라이브러리를 이용하면 insert가 아니라, 하나의 템플릿을 기준으로 화면을 끼워 넣는 형태의 개발 가능
  • 모든 페이지마다 th:insert등이 사용될 필요가 없음

 

 

 

DI : 의존성 주입

자바기반 설정방식이나 XML기반 설정방식에서 명시적으로 Bean을 선언하는 것과 달리
DI 컨테이너에 빈을 자동으로 주입하는 방식
MainService.java
package ksmart35.springboot.service;

import java.util.List;

import org.springframework.stereotype.Service;

import ksmart35.springboot.dao.Member;

@Service
public class MainService {
	
	public List<Member> repeat (List<Member> list) {
		for(int i = 1; i <=10;i++) {
			 list.add(new Member("id00"+i,"pw00"+i,"홍0"+i,"홍0"+i+"@ksmart.or.kr"));
		}
		return list;
	}
}
MainController.java 
>Autowired
package ksmart35.springboot.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import ksmart35.springboot.dao.Member;
import ksmart35.springboot.service.MainService;

@Controller
public class MainController {
	//DI 의존성 주입
	 @Autowired
	 private MainService mainService;
	
	 @GetMapping("/exam5")
	 public String exam5 (Model model) {
		 String title = "ksmart35";
		 List<Member> list = new ArrayList<Member>();
		 //객체생성
		    model.addAttribute("memberList", mainService.repeat(list));
		 return "exam/exam5";
	 }
}	

 

 


지역변수

MainController.java
package ksmart35.springboot.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import ksmart.springboot.dao.Member;

@Controller
public class MainController {

	 @GetMapping("/exam5")
	 public String exam5 (Model model) {
		 String title = "ksmart35";
		 List<Member> list = new ArrayList<Member>();
			 for(int i = 1; i <=10;i++) {
				 list.add(new Member("id00"+i,"pw00"+i,"홍0"+i,"홍0"+i+"@ksmart.or.kr"));
			}
		    System.out.println(list.toString() + "<--list");
		    model.addAttribute("memberList", list);
		 return "exam/exam5";
	 }
}	
exam5.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymleaf.org">
<head>
<meta charset="UTF-8">
<title th:text="${title}" ></title>
</head>
<body>
	<!-- 지역변수 -->
	<!-- 조건문 -->
	<table border="1" th:with="target='지역변수'">
		<thead>
			<tr>
				<th>구분</th>
				<th>아이디</th>
				<th>비밀번호</th>
				<th>이름</th>
				<th>이메일</th>
			</tr>
		</thead>
		<tbody>
			<tr th:each="m, i : ${memberList}">
				<td th:text="${i.index}"></td>
				<td th:text="${m.mId}"></td>
				<td th:text="${m.mPw}"></td>
				<td th:text="${m.mName}"></td>
				<td th:text="${m.mEmail}"></td>
			</tr>
		</tbody>
		<tfoot>
			<tr>
				<td colspan="5" th:text="${target}"></td>
			</tr>
		</tfoot>
	</table>
</body>
</html>


조건문

<!DOCTYPE html>
<html xmlns:th="http://www.thymleaf.org">
<head>
<meta charset="UTF-8">
<title th:text="${title}" ></title>
</head>
<body>
	<!-- 지역변수 -->
	<!-- 조건문 -->
	<table border="1" th:with="target='지역변수', id='id001'">
		<thead>
			<tr>
				<th>구분</th>
				<th>아이디</th>
				<th>비밀번호</th>
				<th>이름</th>
				<th>이메일</th>
			</tr>
		</thead>
		<tbody>
			<tr th:each="m, i : ${memberList}">
				<td th:text="${i.index}"></td>
				<td th:if="${m.mId == id}" style="color: red;" th:text="${m.mId}"></td>
				<td th:unless="${m.mId == id}" th:text="${m.mId}"></td>
				<td th:text="${m.mPw}"></td>
				<td th:text="${m.mName}"></td>
				<td th:text="${m.mEmail}"></td>
			</tr>
		</tbody>
		<tfoot>
			<tr>
				<td colspan="5" th:text="${target}"></td>				
			</tr>
		</tfoot>
	</table>
</body>
</html>

 


<!DOCTYPE html>
<html xmlns:th="http://www.thymleaf.org">
<head>
<meta charset="UTF-8">
<title th:text="${title}" ></title>
</head>
<body>
	<!-- 지역변수 -->
	<!-- 조건문 -->
	<table border="1" th:with="target='지역변수', id='id001'">
		<thead>
			<tr>
				<th>구분</th>
				<th>아이디</th>
				<th>비밀번호</th>
				<th>이름</th>
				<th>이메일</th>
			</tr>
		</thead>
		<tbody>
			<tr th:each="m, i : ${memberList}">
				<td th:text="${i.index}"></td>
				<td th:if="${m.mId == id}" style="color: red;" th:text="${m.mId}"></td>
				<td th:unless="${m.mId == id}" th:text="${m.mId}"></td>
				<td th:text="${m.mPw}"></td>
				<th:block th:if="${m.mId eq id}">
					<td th:text="${m.mName}" style="color: red;"></td>
					<td th:text="${m.mEmail}" style="color: red;"></td>
				</th:block>
				<th:block th:if="${m.mId ne id}">
					<td th:text="${m.mName}"></td>
					<td th:text="${m.mEmail}"></td>
				</th:block>
			</tr>
		</tbody>
		<tfoot>
			<tr>
				<td colspan="5" th:text="${target}"></td>				
			</tr>
		</tfoot>
	</table>
</body>
</html>


Basic Objects

MainController.java
package ksmart35.springboot.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import ksmart.springboot.dao.Member;

@Controller
public class MainController {
	 @GetMapping("/exam6")
	 public String exam6 (Model model) {
		 String title = "ksmart35";
		 model.addAttribute("title", title);
		 return "exam/exam6";
	 }
}	
exam6.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymleaf.org">
<head>
<meta charset="UTF-8">
<title th:text="${title}" ></title>
</head>
<body>
	<div th:with="nowValue=${#dates.createNow()}, price=12345">
		<h1>[[${nowValue}]]</h1><br>
		<h1 th:text="${#dates.format(nowValue, 'yyyy-MM-dd HH:mm:ss')}"></h1><br>
		<h1 th:text="${#numbers.formatInteger(price,3,'COMMA')}"></h1><br>
	</div>
</body>
</html>

createToday로 적용하면 날짜만 제대로 출력되고 시간은 00:00:00으로 나온다.


Link

MainController.java

package ksmart35.springboot.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import ksmart.springboot.dao.Member;

@Controller
public class MainController {
	 @GetMapping("/exam7")
	 public String exam7 (Model model) {
		List<String> list = new ArrayList<String>();
		String title = "ksmart35 hungry";
		model.addAttribute("title",title);
		 return "exam/exam7";
	 }
}	

exam7.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymleaf.org">
<head>
<meta charset="UTF-8">
<title th:text="${title}" ></title>
</head>
<body>
	<!-- 링크 연결 @{/exam1}  -->
	<th:block th:each="num : ${#numbers.sequence(1,6)}">
	<a th:href="@{${'/exam' + num + '?' +}}">[[${'exam' + num}]]</a>
	</th:block>
</body>
</html>


get방식으로 값을 전달

> @{${'/exam' + num}(id='id001',pw='pw001')}

<!DOCTYPE html>
<html xmlns:th="http://www.thymleaf.org">
<head>
<meta charset="UTF-8">
<title th:text="${title}" ></title>
</head>
<body>
	<!-- 링크 연결 @{/exam1}  -->
	<th:block th:each="num : ${#numbers.sequence(1,6)}">
	<a th:href="@{${'/exam' + num}(id='id001',pw='pw001')}">[[${'exam' + num}]]</a>
	</th:block>
</body>
</html>

get방식으로 전달한 값을 받는 처리

MainController.java
>null 처리에 유의하자.
package ksmart35.springboot.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import ksmart.springboot.dao.Member;

@Controller
public class MainController {
 
	 @RequestMapping(value = "/exam1", method = RequestMethod.GET)
	 public String exam1(Model model
			 			, @RequestParam(name = "id",required = false) String id
			 			, @RequestParam(name = "pw",required = false) String pw) {
		 String title = "ksmart35";
		 Member member1 = new Member();
		 member1.setmId("id001");
		 Member member2 = new Member();
		 member2.setmId("id002");
		 model.addAttribute("title", title);
		 model.addAttribute("member1", member1);
		 model.addAttribute("member2", member2);
         
		 if(id!=null && !"".equals(id)) {
			 System.out.println( id + " < id");
			 model.addAttribute("id", id);
		 }
		 if(pw!=null && !"".equals(pw)) {
			 System.out.println( pw + " < pw");
			 model.addAttribute("pw", pw);
		 }
		 		 
		 return "exam/exam1";
	 }
}	
exam1.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymleaf.org">
<head>
<meta charset="UTF-8">
<title th:text="${title}" ></title>
</head>
<body>
	EXAMPLE1
	<label th:text="${member1.mId}"></label>
	<label th:text="${member2.mId}"></label><br>
	<label th:text="${'id : '+ id}"></label><br>
	<label th:text="${'pw : ' + pw}"></label>
	<label></label>
</body>
</html>


Command 객체 사용

>DTO,DAO 사용해야하는 작업이 매우 간략해짐

MainController.java
package ksmart35.springboot.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import ksmart.springboot.dao.Member;

@Controller
public class MainController {

	 @RequestMapping(value = "/exam1", method = RequestMethod.GET)
	 public String exam1(Model model
			 			, Member member) {
		 String title = "ksmart35";
		 Member member1 = new Member();
		 member1.setmId("id001");
		 Member member2 = new Member();
		 member2.setmId("id002");
		 model.addAttribute("title", title);
		 model.addAttribute("member1", member1);
		 model.addAttribute("member2", member2);
		 		 
		 if(member !=null && !"".equals(member)) {
			 System.out.println( member + " < member");
			 model.addAttribute("member", member);
		 }
		 
		 return "exam/exam1";
	 }
}

 

exam1.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymleaf.org">
<head>
<meta charset="UTF-8">
<title th:text="${title}" ></title>
</head>
<body>
	EXAMPLE1
	<label th:text="${member1.mId}"></label>
	<label th:text="${member2.mId}"></label><br>
	
	<label th:text="${'id : ' + member.mId}"></label><br>
	<label th:text="${'pw : ' + member.mPw}"></label>
	<label></label>
</body>
</html>


 

'SpringBoot' 카테고리의 다른 글

[MyBatis] mybatis01  (0) 2020.05.25
[SpringBoot] Thymeleaf layout  (0) 2020.05.19
[SpringBoot] Spring boot  (0) 2020.05.18
[Servlet]  (0) 2020.05.18

+ Recent posts