๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
JAVA/Java Programming

[JAVA] DAO, DTO, VO ์ •๋ฆฌ

by soy๋ฏธ๋‹ˆ 2023. 9. 16.

 

์ „์ฒด์ ์ธ ํ๋ฆ„

DB -> DAO -> SERVICE (-MAPPER) -> CONTROLLER -> WEB

 

DAO (Data Access Object)

- ์‹ค์ œ๋กœ DB ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ

 

DOMAIN (= Entity)

Lesson.java

@Data
@Getter @Setter
@NoArgsConstructor
public class Lesson {
    private int c_idx;
    private String c_name;
    private int ag_idx;

    @Builder
    public Lesson(int c_idx, String c_name, int ag_idx) {
        this.c_idx = c_idx;
        this.c_name = c_name;
        this.ag_idx = ag_idx;
    }
}

LessonTime.java

@Data @Slf4j

@Getter @Setter
@NoArgsConstructor
public class Lessontime {
    private int ct_idx;
    private String ct_day;
    private String ct_start_time;
    private String ct_end_time;
    private String ct_attend_starttime;
    private String ct_attend_endtime;
    private String ct_start_date;
    private String ct_end_date;
    private String ct_break_start;
    private String ct_break_end;
    private int c_idx;
    private int ct_start_hour;
    private int ct_start_minute;
    private int ct_end_hour;
    private int ct_end_minute;

    @Builder
    public Lessontime(int ct_idx, String ct_day, String ct_start_time, String ct_end_time, String ct_attend_starttime,String ct_attend_endtime, String ct_start_date, String ct_end_date, String ct_break_start, String ct_break_end, int c_idx, int ct_start_hour, int ct_start_minute, int ct_end_hour, int ct_end_minute) {
        this.ct_idx = ct_idx;
        this.ct_day = ct_day;
        this.ct_start_time = ct_start_time;
        this.ct_end_time = ct_end_time;
        this.ct_attend_starttime = ct_attend_starttime;
        this.ct_attend_endtime = ct_attend_endtime;
        this.ct_start_date = ct_start_date;
        this.ct_end_date = ct_end_date;
        this.ct_break_start = ct_break_start;
        this.ct_break_end = ct_break_end;
        this.c_idx = c_idx;
        this.ct_start_hour = ct_start_hour;
        this.ct_start_minute = ct_start_minute;
        this.ct_end_hour = ct_end_hour;
        this.ct_end_minute = ct_end_minute;
    }
}

 

DTO (Data Transfer Object)

- ๊ณ„์ธต ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•œ ๊ฐ์ฒด, getter/setter ์—ญํ• 

- ๋กœ์ง์„ ๊ฐ€์ง€์ง€ ์•Š๋Š” ์ˆœ์ˆœํ•œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด (Java Beans)

- DB์—์„œ ๋ฐ์ดํ„ฐ ์–ป์–ด์„œ Service / Controller ๋กœ ์ „๋‹ฌ

- Entity(DOMAIN) ๋ฅผ DTO ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ ํ›„ ์‚ฌ์šฉ

 

LessonDto.java

@Data
@Getter @Setter
@NoArgsConstructor
public class LessonDto {
    private int c_idx;
    private String c_name;
    private int ag_idx;

    @Builder
    public LessonDto(int c_idx, String c_name, int ag_idx) {
        this.c_idx = c_idx;
        this.c_name = c_name;
        this.ag_idx = ag_idx;
    }
    
    public Lesson toEntity() {
		return Lesson.builder()
				.c_idx(c_idx)
				.c_name(c_name)
				.ag_idx(ag_idx)
				.build();
	}
}

LessonetimeDto.java

@Data
@Getter @Setter
@NoArgsConstructor
public class LessontimeDto {
	private int ct_idx;
	private String ct_day;
	private String ct_start_time;
	private String ct_end_time;
	private String ct_attend_starttime;
	private String ct_attend_endtime;
	private String ct_start_date;
	private String ct_end_date;
	private String ct_break_start;
	private String ct_break_end;
	private String c_name;
	private int ag_idx;
	private int c_idx;

	@Builder
	public LessontimeDto(int ct_idx, String ct_day, String ct_start_time, String ct_end_time, String ct_attend_starttime,String ct_attend_endtime, String ct_start_date, String ct_end_date, String ct_break_start, String ct_break_end, String c_name, int ag_idx, int c_idx) {
		this.ct_idx = ct_idx;
		this.ct_day = ct_day;
		this.ct_start_time = ct_start_time;
		this.ct_end_time = ct_end_time;
		this.ct_attend_starttime = ct_attend_starttime;
		this.ct_attend_endtime = ct_attend_endtime;
		this.ct_start_date = ct_start_date;
		this.ct_end_date = ct_end_date;
		this.ct_break_start = ct_break_start;
		this.ct_break_end = ct_break_end;
		this.c_name = c_name; // ๊ฐ•์˜๋ช…
		this.ag_idx = ag_idx;
		this.c_idx = c_idx;
	}

	public Lessontime toEntity() {
		return Lessontime.builder()
				.ct_idx(ct_idx)
				.ct_day(ct_day)
				.ct_start_time(ct_start_time)
				.ct_end_time(ct_end_time)
				.ct_attend_starttime(ct_attend_starttime)
				.ct_attend_endtime(ct_attend_endtime)
				.ct_start_date(ct_start_date)
				.ct_end_date(ct_end_date)
				.ct_break_start(ct_break_start)
				.ct_break_end(ct_break_end)
				.c_idx(c_idx)
				.build();
	}
}

 

VO (Value Object)

- Read-Only ์†์„ฑ์„ ์ง€๋‹Œ ๊ฐ’

- DTO ๋Š” setter/getter ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ๋ฐ์ดํ„ฐ ๊ฐ’ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค. (= ์ธ์Šคํ„ด์Šค ๊ฐœ๋…) 

- VO ๋Š” getter ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ ๋ฐ์ดํ„ฐ ๊ฐ’ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค. (= ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’)

 

CONTROLLER

- ๋ผ์šฐํŒ… ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž ์‘๋‹ต, ์š”์ฒญ ์ฒ˜๋ฆฌ

@RestController
@CrossOrigin
@Slf4j
public class LessonUserController {
    private final LessonUserService lessonUserService;
    @Autowired
    public LessonUserController(LessonUserService lessonUserService){
        this.lessonUserService = lessonUserService;
    }
    Iterator iterator;

    @GetMapping("/api/user/class")
    public Lesson AllLesson(@RequestParam("u_phone") String u_phone) {
        int c_idx = lessonUserService.getCidx(u_phone);
        return lessonUserService.getLesson(c_idx);
    }

    @GetMapping("/api/user/class/time")
    public List<Lessontime> AllLessonTime(@RequestParam("u_phone") String u_phone) {
        int c_idx = lessonUserService.getCidx(u_phone);
        System.out.println(lessonUserService.getAllLessonTime(c_idx));
        return lessonUserService.getAllLessonTime(c_idx);
    }
}

 

SERVICE

@Service
public class LessonUserService {
    private final LessonUserMapper lessonUserMapper;

    @Autowired
    public LessonUserService(LessonUserMapper lessonUserMapper) {
        this.lessonUserMapper = lessonUserMapper;
    }

    public List<Lesson> getAllLesson() {
        return lessonUserMapper.getLessonList();
    }

    public Lesson getLesson(int c_idx) {
        System.out.println(lessonUserMapper.getLesson(c_idx));
        return lessonUserMapper.getLesson(c_idx);
    }

    public int getCidx(String u_phone){
        return lessonUserMapper.getCidx(u_phone);
    }

    public int getAgidx(int c_idx){
        return lessonUserMapper.getAgidx(c_idx);
    }

    public List<Lessontime> getAllLessonTime(int u_phone) {
        return lessonUserMapper.getLessonTimeList(u_phone);
    }
}

 

MAPPER

- SQL๋ฌธ ๊ด€๋ฆฌ

@Mapper
public interface LessonUserMapper {
    @Select("SELECT * FROM Class")
    List<Lesson> getLessonList();

    @Select("select c_name from Class where c_idx = #{c_idx}")
    Lesson getLesson(int c_idx);

    @Select("select c_idx from User where u_phone=#{u_phone}")
    int getCidx(String u_phone);

    @Select("select ag_idx from Class where c_idx = #{c_idx}")
    int getAgidx(int c_idx);

    @Select("SELECT * FROM Classtime WHERE c_idx = #{c_idx}")
    List<Lessontime> getLessonTimeList(int c_idx);
}

 

 

๋Œ“๊ธ€