스프링

JPA 초기 데이터 삽입

 

 

src/main/resource   에 import.sql 파일 이름으로 다음과 같이 데이터를 삽입 하는 쿼리를 작성한다.

INSERT INTO USER (USER_ID, PASSWORD , NAME,  EMAIL) VALUES('test', '1111' , '홍길동' ,  'test@gmail.com');
INSERT INTO USER (USER_ID, PASSWORD , NAME,  EMAIL) VALUES('admin', '1111' , '김민수' ,  'kiminsu@gmail.com');

 

 

 

 

 

mustache 문법 + 스프링 연동

 

데이터가 존재할 경우  {{#}}  {{/}}

데이터가 없을 경우 {{^}} {{/}}

 

머스터치
공식 : https://mustache.github.io/
데모 : https://mustache.github.io/#demo
- {{ }} 을 통해 빠른 치환
장점
- 웬만한 플랫폼을 모두 지원한다.
- 속도가 빠르다.
단점
- 플랫폼 공용으로 만들어졌기에 스프링 같은 곳에서 쓰기위해서는 모두 모델안에 넣어줘야한다.
- 상위를 선택하는 방법이 한정적임.


문법
예제 데이터

 
  1. {
  2. "header": "Colors",
  3. "items": [
  4. {"name": "red", "first": true, "url": "#Red"},
  5. {"name": "green", "link": true, "url": "#Green"},
  6. {"name": "blue", "link": true, "url": "#Blue"}
  7. ],
  8. "empty": false
  9. }

출력


 
  1. {{ header }}

IF
- NOT (^)을 제외하면 루프와 동일
- (^) 제외시 IF 개념이 아니라 반복 이지만 이해를 돕기위한 설명입니다.


 
  1. {{# header }}
  2. 해더가 존재함
  3. {{/ header }}

 
  1. {{^ header }}
  2. 해더가 존재하지 않음
  3. {{/ header }}

 
  1. {{^ header333 }}
  2. 해더333 이 존재하지 않음
  3. {{/ header333 }}

내부출력 - 자기자신


 
  1. {{# header }}
  2. 해드의 값은 {{.}} 임
  3. {{/ header }}

루프 : 사실상 위 IF 가 루프를 통하고있다.
- 즉 배열형이면 루프를 돌며 출력되며, 배열이 아닌 값이면 단일 출력이되며, 값이 없으면 출력되지않음.


 
  1. {{#items}}
  2. {{#first}}
  3. <li><strong>{{name}}</strong></li>
  4. {{/first}}
  5. {{#link}}
  6. <li><a href="{{url}}">{{name}}</a></li>
  7. {{/link}}
  8. {{/items}}

주석


 
  1. {{! 이렇게하면 주석이 됩니다. }}

상위선택
- 상위를 선택하는 문법이 한정적임
- 이렇게 사용할 경우 items 안에 해더가 없을때 한단계 위 해더가 선택된다.
- 단계별로 올라가도 끝내 해더가 나오지 않을 경우 빈값


 
  1. {{#items}}
  2. {{header }}
  3. {{/items}}

포함 : include
- 해당 경로에 있는 템플릿을 결합합니다.


 
  1. {{>경로}}



스프링에서 적용하기
메이븐 추가


 
  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-mustache</artifactId>
  4. </dependency>

src/main/resources/templates/test.html


 
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8"/>
  5. <title>{{ title }}</title>
  6. </head>
  7. <body>
  8. <div>
  9. {{ msg }}
  10. </div>
  11. </body>
  12. </html>

컨트롤러


 
  1. @RequestMapping("/")
  2. public String root(Model model, HttpSession session)
  3. {
  4. session.setAttribute("title", "타이틀 테스트");
  5. session.setAttribute("msg", "Hello!!");
  6. return "test";
  7. }

 

 

 

 

mustach session( 세션 사용 설정) 

http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

 

spring.mustache.expose-session-attributes=true

application.properties

spring.datasource.url=jdbc:h2:~/demo2;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
server.port=1111
spring.mustache.expose-session-attributes=true

 

 

 

class UserController

 


	@Autowired
	private UserRepository userRepository;
	
	@GetMapping("/loginForm")
	public String loginForm(){
		return "/user/login";
	}
	
	@PostMapping("/login")
	public String login(String userId, String password, HttpSession session){
		User user =userRepository.findByUserId(userId);
		if(user==null){
			log.info("login -  user.null");
			return "redirect:/users/loginForm";
		}
		if(!password.equals(user.getPassword())){
			log.info("login -  !password");
			return "redirect:/users/loginForm";
		}
		
		log.info("login -  success");
		session.setAttribute("user", user);
		return "redirect:/";
	}
	
	@GetMapping("/logout")
	public String logout(HttpSession session){
		session.removeAttribute("user");
		return "redirect:/";
	}
	
	

 

 

navigation.html

			<div class="collapse navbar-collapse" id="navbar-collapse2">
				<ul class="nav navbar-nav navbar-right">
					<li class="active"><a href="../index.html">Posts</a></li>
					{{^user}}
					<li><a href="/users/loginForm" role="button">로그인</a></li>
					<li><a href="/users/form" role="button">회원가입</a></li>
					{{/user}}
					
					{{#user}}
					<li><a href="/users/logout" role="button">로그아웃</a></li>
					<li><a href="/users/{{id}}/form" role="button">개인정보수정</a></li>
					{{/user}}
					
				</ul>
			</div>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  머나먼나라

촛불은 그 자신을 밝히기 위해 존재하는 것이 아니다. -수피명언

댓글 ( 7)

댓글 남기기

작성