본문 바로가기
CLASS/SPRINGBOOT

#1-2 / springboot 기본형태+ coupon list

by hingu 2024. 8. 12.

- dbinfos.java

package kr.co.sen;

import javax.sql.DataSource;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

//@configuration : config.xml을 안쓰겠다!
@Configuration //환경설정
//properties를 로드
@PropertySource("classpath:/application.properties")
public class dbinfos {
	@ConfigurationProperties(prefix="spring.datasource") //properties에서 사용하는 클래스명
	@Bean //bean을 이용하여 환경설정 연결
	public DataSource datasource() {
		return DataSourceBuilder.create().build();
	}
}

 

 


  👀 coupon list 예제;  

- mapper.xml 

얘는 src/main/resources 패키지 안에 mapper폴더 안에 있는 mapper.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="kr.co.sen.coupon_repository">
	<select id="getAllcoupon" resultType="kr.co.sen.coupon_dao">
		select * from coupon order by cidx desc
	</select>
</mapper>

mapper namespace= "Java Interface @Mapper명"

 

 

- coupon_repository.java

(interface) 

얘는 mapper.xml이랑 연결

package kr.co.sen;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

@Mapper //mapper와 연동
public interface coupon_repository { //Mapper에서 연동되는 id를 로드함 
	List<coupon_dao> getAllcoupon(); //연결된거임
        //전체 리스트 출력 - mapper의 id작성
}

 

 

- coupon_service.java

얘두 (interface)

=> repository + mapper.xml을 로드할 수 있는 interface를 생성

package kr.co.sen;

import java.util.List;

//repository + mapper.xml을 로드할 수 있는 interface를 생성
public interface coupon_service {
	public List<coupon_dao> getAllCoupon();
}

 

 

- coupon_service_impl.java

얜 그냥 클래스

package kr.co.sen;

import java.util.List;

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

@Service
public class coupon_service_impl implements coupon_service, 머시기_service..이렇게 추가..{
	//Repository를 로드함 (mapper.xml에 있는 DDL명령어 실행)
	@Autowired
	private coupon_repository coupon_repository;
	
	@Override
	public List<coupon_dao> getAllCoupon(){
    		//여기서 뭐 배열을 만들거나..뭐시기 해서 return으로 보내버리면 됨
    
		return coupon_repository.getAllcoupon();
	}
    
        //... 여기에 @override가 계속 추가되는 형태
	
}

 

 

- Controller 

package kr.co.sen;

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;


@Controller
public class main_controller {

	@Autowired
	private coupon_service coupon_service; 
    	//interface를 최종 호출- 호출되자마자 @service부분이 발동됨
	
	@GetMapping("/list.do")
	public String coupon_list(Model m) {
		List<coupon_dao> all = coupon_service.getAllCoupon();
		int ea = all.size();
		
		m.addAttribute("ea",ea);
		m.addAttribute("all",all);
		
		return null;
	}
    
}

 

- list.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>쿠폰 리스트 spring-boot 페이지</title>
</head>

<body>
쿠폰 총 갯수 : ${ea}
<ul>
	<cr:forEach var="data" items="${all}">
		<li>
			<div>${data.cpname}</div>
			<div>${data.cprate}</div>
			<div>${data.cpuse}</div>
			<div>${data.cpdate}</div>
			<div>${data.indate}</div>
		</li>
	</cr:forEach>
</ul>
</body>

</html>

 

 

🤷‍♂️❓

 

Service (interface)

(실제 파일명을 service를 포함해서 지어야함!)

 

🔼

 | |

🔽

 

SerciceImpl (구현 class)

( 얜 맘대로 지어도 됨 )

⭐ @service 라는 annotation => 해당 interface를 로드하면 해당 class를 실행시켜주는 annotaion

(new 하고 뭐하고 해서 호출하는 과정을 boot에서 간소화시킨거임)

 

Impl  :

implements의 약자

AOP에서 구현 형태의 인터페이스 객체 (추상화)=> 여기서 좀더 발전되면 OCP(다형성)

 

 

interface- interface로 만들어야함

 

 

▶ 다음 게시글에서 insert 해볼거임!