'Spring Boot'에 해당되는 글 6건

  1. 2019.03.29 스프링부트 로그 설정
  2. 2019.03.29 [Spring Boot] MyBatis + Mysql 샘플2
  3. 2019.03.29 [Spring Boot] MyBatis + Mysql 샘플
  4. 2019.03.28 DAO, DTO, VO란?
  5. 2019.03.28 스프링 MVC 패턴이란?
  6. 2019.03.28 WEB MVC HelloWorld
posted by 귀염둥이채원 2019. 3. 29. 18:19

1. application.properties 파일에 log 설정

logging.level.root=INFO 
logging.level.com.example.demo=ERROR 


2. HelloController.java 추가

package com.example.demo.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

	private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
	
	@RequestMapping("/")
	public String index() {
		return "hello world!";
	}

	@RequestMapping("/log")
	public String log() {
		logger.debug("debug log");
		logger.info("info log");
		logger.warn("warn log");
		logger.error("error log");
		return "hello world!";
	}
}

 

'Spring Boot' 카테고리의 다른 글

[Spring Boot] MyBatis + Mysql 샘플2  (0) 2019.03.29
[Spring Boot] MyBatis + Mysql 샘플  (0) 2019.03.29
DAO, DTO, VO란?  (0) 2019.03.28
스프링 MVC 패턴이란?  (0) 2019.03.28
WEB MVC HelloWorld  (0) 2019.03.28
posted by 귀염둥이채원 2019. 3. 29. 16:02

스프링부트에서 MyBatis 샘플 프로그램입니다.

 

1. MySQL DDL & DML 생성

CREATE TABLE MEMBER (ID INT PRIMARY KEY, NAME VARCHAR(50), PHONE VARCHAR(20)); 

INSERT INTO MEMBER (ID, NAME, PHONE) VALUES (1, 'xml', '010-9912-1234'); 
INSERT INTO MEMBER (ID, NAME, PHONE) VALUES (2, 'annotation', '010-2333-4321'); 
mysql> desc MEMBER;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int(11)     | NO   | PRI | NULL    |       |
| NAME  | varchar(50) | YES  |     | NULL    |       |
| PHONE | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> select * from MEMBER;
+----+------------+---------------+
| ID | NAME       | PHONE         |
+----+------------+---------------+
|  1 | xml        | 010-9912-1234 |
|  2 | annotation | 010-2333-4321 |
+----+------------+---------------+
2 rows in set (0.00 sec)


2. pom.xml 파일에 dependency 추가 

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.0.0</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
</dependencies>

3. application.yml 파일 생성

spring:
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://172.21.111.144:3306/test
    username: root
    password: password
logging:
  level:
    #org.springframework.boot: DEBUG
    sample.springboot.mybatis: DEBUG


4. DataBaseConfig.java 파일 생성

package com.example.demo;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.transaction.annotation.EnableTransactionManagement;

 
@Configuration
@MapperScan(basePackages="com.example.demo.dao")
@EnableTransactionManagement
public class DataBaseConfig {
	
    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sessionFactory.setMapperLocations(resolver.getResources("classpath:com/example/dao/*.xml"));
        return sessionFactory.getObject();
    }
    
    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) throws Exception {
      final SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
      return sqlSessionTemplate;
    }
}


5. Member.java 파일 생성 

package com.example.demo.model;

public class Member {
	private Long id;
	private String name;
	private String phone;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	
	@Override
	public String toString() {
		return "Member [id=" + id + ", name=" + name + ", phone=" + phone + "]";
	}
}


6. MemberMapper.java 파일 생성

package com.example.demo.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.example.demo.model.Member;

@Mapper
public interface MemberMapper {
	List<Member> findAll();
	Member findById(Long id);
}


7. Member.xml 파일 생성

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.demo.dao.MemberMapper">

	<select id="findAll" resultType="com.example.demo.model.Member">
		SELECT ID, NAME, PHONE FROM MEMBER
	</select>
  
	<select id="findById" resultType="com.example.demo.model.Member">
		SELECT ID, NAME, PHONE FROM MEMBER WHERE ID = #{id}
	</select>
  
</mapper>


8. MemberController.java 파일 생성

package com.example.demo.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.dao.MemberMapper;
import com.example.demo.model.Member;

@RestController
public class MemberController {
	
	@Autowired
	MemberMapper memberMapper;
	
	@RequestMapping("members")
	public List<Member> members() {
		return memberMapper.findAll();
	}
	
	@RequestMapping("member/{id}")
	public Member member(@PathVariable("id") Long id) {
		return memberMapper.findById(id);
	}
}


9. 실행 및 결과 확인
http://localhost:8080/members
[{"id":1,"name":"xml","phone":"010-9912-1234"},{"id":2,"name":"annotation","phone":"010-2333-4321"}]

http://localhost:8080/member/1
{"id":1,"name":"xml","phone":"010-9912-1234"}

# 참고
https://github.com/sbcoba/spring-boot-mybatis/   --> spring-boot-mybatis-sample-xml

'Spring Boot' 카테고리의 다른 글

스프링부트 로그 설정  (0) 2019.03.29
[Spring Boot] MyBatis + Mysql 샘플  (0) 2019.03.29
DAO, DTO, VO란?  (0) 2019.03.28
스프링 MVC 패턴이란?  (0) 2019.03.28
WEB MVC HelloWorld  (0) 2019.03.28
posted by 귀염둥이채원 2019. 3. 29. 11:36

먼저 mysql이 설치되어 있어야한다.
리눅스에서 docker container로 mysql을 설치하는 방법이다.
https://palyoung.tistory.com/76

1. pom.xml 파일에 dependency 추가

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

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>1.2.3</version>
</dependency>

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
</dependency>


2. application.properties 파일에 아래 내용 추가
db id, pw는 설치하신 MySQL 정보 입력

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://172.21.111.144:3306/test
spring.datasource.username=root
spring.datasource.password=password


3. DatabaseConfig.java 파일 추가

package com.example.demo;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@MapperScan(basePackages="com.example.demo")
@EnableTransactionManagement
public class DataBaseConfig {
	
	public class DatabaseConfig {
	 
	    @Bean
	    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
	        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
	        sessionFactory.setDataSource(dataSource);
	        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
	        sessionFactory.setMapperLocations(resolver.getResources("classpath:com/example/dao/*.xml"));
	        return sessionFactory.getObject();
	    }
	    
	    @Bean
	    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) throws Exception {
	      final SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
	      return sqlSessionTemplate;
	    }
	}
}


4. DbController.java 파일 추가

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.service.DbService;

@RestController
public class DbController {
	
    @Autowired
    DbService dbService;
     
    @RequestMapping("/")
    public @ResponseBody String root_test() throws Exception{  
        return "Hello World";
    }
 
    @RequestMapping("/now")
    public @ResponseBody String now() throws Exception{
        return dbService.getDual();
    }
}


5. DbService.java 파일 추가

package com.example.demo.service;

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

import com.example.demo.dao.DbMapper;

@Service
public class DbService {
    @Autowired
    DbMapper dbMapper;
 
    /* select dual */
	public String getDual() throws Exception{
	    return dbMapper.getDual();
	}
}


6. DbMapper.java 파일 추가

package com.example.demo.dao;

public interface DbMapper {
    /* DB Select  */
    public String getDual() throws Exception;
}


7. Db.xml 파일 추가
src/main/resources/com/exmaple/dao/Db.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.example.demo.dao.DbMapper">
 
    <!-- /* select dual */ -->
    <select id="getDual" resultType="java.lang.String">
        SELECT NOW() FROM DUAL
    </select>
 
</mapper>


8. 웹브라우져 확인
http://localhost:8080/now

2019-03-29 02:27:57

'Spring Boot' 카테고리의 다른 글

스프링부트 로그 설정  (0) 2019.03.29
[Spring Boot] MyBatis + Mysql 샘플2  (0) 2019.03.29
DAO, DTO, VO란?  (0) 2019.03.28
스프링 MVC 패턴이란?  (0) 2019.03.28
WEB MVC HelloWorld  (0) 2019.03.28
posted by 귀염둥이채원 2019. 3. 28. 16:05

# DAO(Data Access Object)
- Database의 data에 접근을 위한 객체
- Database에 접근을 하기위한 로직과 비즈니스 로직을 분리하기 위해서 사용
- DB를 사용해 데이터를 조화하거나 조작하는 기능을 전담하도록 만든 오브젝트
- Service와 DB를 연결하는 고리의 역할을 한다
- DAO의 경우는 DB와 연결할 Connection 까지 설정되어 있는 경우가 많음

# DAO 클래스

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class TestDao {
    public void add(TestDto dto) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root");

        PreparedStatement preparedStatement = connection.prepareStatement("insert into users(id,name,password) value(?,?,?)");

        preparedStatement.setString(1, dto.getName());
        preparedStatement.setInt(2, dto.getValue());
        preparedStatement.setString(3, dto.getData());
        preparedStatement.executeUpdate();
        preparedStatement.close();
        
        connection.close();
    }
}


# DTO((Data Transfer Object)
- DB에서 데이터를 얻어 Service나 Controller 등으터 보낼 때 사용하는 객체
- 로직을 갖고 있지 않는 순수한 데이터 객체이며 속성과 그 속성에 접근하기 위한 getter, setter 메소드만 가진 클래스

# DTO 클래스

public class TestDto {

    private String name;
    private int value;
    private String data;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }
}


# VO(Value Object) vs DTO
- VO는 DTO와 동일한 개념이지만 read only 속성을 갖는다.
- VO는 특정한 비즈니스 값을 담는 객체이고, DTO는 Layer간의 통신 용도로 오고가는 객체를 말한다.

# 참고 사이트
https://jungwoon.github.io/common%20sense/2017/11/16/DAO-VO-DTO/
https://gmlwjd9405.github.io/2018/12/25/difference-dao-dto-entity.html
https://lemontia.tistory.com/591
https://lazymankook.tistory.com/30

'Spring Boot' 카테고리의 다른 글

스프링부트 로그 설정  (0) 2019.03.29
[Spring Boot] MyBatis + Mysql 샘플2  (0) 2019.03.29
[Spring Boot] MyBatis + Mysql 샘플  (0) 2019.03.29
스프링 MVC 패턴이란?  (0) 2019.03.28
WEB MVC HelloWorld  (0) 2019.03.28
posted by 귀염둥이채원 2019. 3. 28. 15:16

# MVC 패턴이란?
- 어플리케이션의 Model, View, Controller의 영역으로 구분해서 결합도를 최소화한 패턴
- 유지보수가 쉽도록 중복 코드의 작성을 최소화 하고 기존 코드의 재사용을 높임
  - 역할을 세분화, 의존성 최소화

Model: 비즈니스 로직 및 데이터 처리 담당
View: 모델이 처리한 결과 데이터를 가지고 화면 생성 (사용자에게 보여주는 인터페이스)
Controller: 요청 처리 및 흐름 제어 담당 (비지니스 로직과 모델의 상호동작을 제어)

Model
* 애플리케이션의 상태(data)를 나타낸다.
* 일반적으로 POJO로 구성된다.
* Java Beans

View
* 디스플레이 데이터 또는 프리젠테이션
* Model data의 렌더링을 담당하며, HTML ouput을 생성한다.
* JSP
* JSP 이외에도 Thymeleaf, Groovy, Freemarker 등 여러 Template Engine이 있다.

Controller
* View와 Model 사이의 인터페이스 역할
* Model/View에 대한 사용자 입력 및 요청을 수신하여 그에 따라 적절한 결과를 Model에 담아 View에 전달한다.
* 즉, Model Object와 이 Model을 화면에 출력할 View Name을 반환한다.
* Controller —> Service —> Dao —> DB
* Servlet

# Spring MVC 웹 튜토리얼
https://penthegom.tistory.com/12

# 스프링부트 뷰: JSP, Velocity, JSP 샘플 구현
http://millky.com/@origoni/post/1144

# Spring MVC and Spring Boot Structure 디렉토리 구조
https://gmlwjd9405.github.io/2019/01/05/spring-directory-structure.html

# MVC Architecture
https://gmlwjd9405.github.io/2018/11/05/mvc-architecture.html

# Spring MVC Framework란?
https://gmlwjd9405.github.io/2018/12/20/spring-mvc-framework.html

# 스프링 MVC 관련
https://gmlwjd9405.github.io/2018/11/05/mvc-architecture.html
https://gangzzang.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81Spring-MVC-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%ACModel-View-Controller-Framework-1
https://hunit.tistory.com/189
https://addio3305.tistory.com/41
https://jeong-pro.tistory.com/96
https://min-it.tistory.com/7

# 유투브
https://www.youtube.com/watch?v=qSQnwjb6TwU
https://www.youtube.com/watch?v=hJhIV6wky8g

'Spring Boot' 카테고리의 다른 글

스프링부트 로그 설정  (0) 2019.03.29
[Spring Boot] MyBatis + Mysql 샘플2  (0) 2019.03.29
[Spring Boot] MyBatis + Mysql 샘플  (0) 2019.03.29
DAO, DTO, VO란?  (0) 2019.03.28
WEB MVC HelloWorld  (0) 2019.03.28
posted by 귀염둥이채원 2019. 3. 28. 14:27

1. 스프링부트 프로젝트 생성

 

2. pom.xml 파일에 jstl, tomcat-embed-jasper dependency 추가

 

3. HelloController.java 파일 생성

@Controller
public class HelloController {

	@RequestMapping("/")
	public String hello(Model model) {
		model.addAttribute("name", "홍길동");
		return "hello";
	}
}

4. application.properties 파일에 view 설정 추가

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

 

5. hello.jsp 파일 생성

- webapp 폴더 밑에 WEB-INF/jsp 폴더 생성 후에 hello.jsp 파일 생성

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
	hello world ${name}
</body>
</html>

 

6. 스프링부터 어플리케이션 실행 및 확인

http://localhost:8080/

 

참고: https://www.youtube.com/watch?v=7ZDW5gOIJKs

'Spring Boot' 카테고리의 다른 글

스프링부트 로그 설정  (0) 2019.03.29
[Spring Boot] MyBatis + Mysql 샘플2  (0) 2019.03.29
[Spring Boot] MyBatis + Mysql 샘플  (0) 2019.03.29
DAO, DTO, VO란?  (0) 2019.03.28
스프링 MVC 패턴이란?  (0) 2019.03.28