From f6549fe9442698692f6f6359568b820051689ce7 Mon Sep 17 00:00:00 2001 From: jhm991231 <jhm991231@ajou.ac.kr> Date: Wed, 2 Apr 2025 19:14:48 +0900 Subject: [PATCH] final commit --- .../com/example/demo/DemoApplication.java | 31 +++++++++- .../java/com/example/demo/constant/Role.java | 5 ++ .../demo/controller/MemberController.java | 34 +++++++++++ .../demo/controller/TestController.java | 32 +++++++--- .../demo/controller/UserController.java | 31 ++++++++++ .../java/com/example/demo/dao/UserDAO.java | 8 +++ .../java/com/example/demo/dto/MemberDto.java | 13 ++++ .../java/com/example/demo/dto/UserDTO.java | 14 +++++ .../java/com/example/demo/entity/Member.java | 41 +++++++++++++ .../demo/repository/MemberRepository.java | 8 +++ .../example/demo/service/MemberService.java | 32 ++++++++++ src/main/resources/mappers/UserMapper.xml | 17 ++++++ src/main/resources/static/index.html | 42 ++++++++++--- src/main/resources/static/product.html | 42 +++++++++++++ src/main/resources/static/product_list.html | 59 +++++++++++++++++++ 15 files changed, 393 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/example/demo/constant/Role.java create mode 100644 src/main/java/com/example/demo/controller/MemberController.java create mode 100644 src/main/java/com/example/demo/controller/UserController.java create mode 100644 src/main/java/com/example/demo/dao/UserDAO.java create mode 100644 src/main/java/com/example/demo/dto/MemberDto.java create mode 100644 src/main/java/com/example/demo/dto/UserDTO.java create mode 100644 src/main/java/com/example/demo/entity/Member.java create mode 100644 src/main/java/com/example/demo/repository/MemberRepository.java create mode 100644 src/main/java/com/example/demo/service/MemberService.java create mode 100644 src/main/resources/mappers/UserMapper.xml create mode 100644 src/main/resources/static/product.html create mode 100644 src/main/resources/static/product_list.html diff --git a/src/main/java/com/example/demo/DemoApplication.java b/src/main/java/com/example/demo/DemoApplication.java index 372f9ff..99c38f5 100644 --- a/src/main/java/com/example/demo/DemoApplication.java +++ b/src/main/java/com/example/demo/DemoApplication.java @@ -1,14 +1,43 @@ package com.example.demo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.context.ApplicationContext; +import java.util.Arrays; +import com.example.demo.entity.Item; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.springframework.context.annotation.Bean; +import javax.sql.DataSource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.Resource; @RestController @SpringBootApplication -public class DemoApplication { +// @EntityScan(basePackageClasses = {Item.class}) +public class DemoApplication {// implements CommandLineRunner{ + + // @Autowired + // private ApplicationContext appContext; public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } + + @Bean + public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { + SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); + sessionFactory.setDataSource(dataSource); + + Resource[] res = new PathMatchingResourcePatternResolver().getResources("mappers/UserMapper.xml"); + sessionFactory.setMapperLocations(res); + + return sessionFactory.getObject(); + } + } diff --git a/src/main/java/com/example/demo/constant/Role.java b/src/main/java/com/example/demo/constant/Role.java new file mode 100644 index 0000000..ae88988 --- /dev/null +++ b/src/main/java/com/example/demo/constant/Role.java @@ -0,0 +1,5 @@ +package com.example.demo.constant; + +public enum Role { + USER, ADMIN +} diff --git a/src/main/java/com/example/demo/controller/MemberController.java b/src/main/java/com/example/demo/controller/MemberController.java new file mode 100644 index 0000000..4045077 --- /dev/null +++ b/src/main/java/com/example/demo/controller/MemberController.java @@ -0,0 +1,34 @@ +package com.example.demo.controller; + +import org.springframework.beans.factory.annotation.Autowired; + +import com.example.demo.dto.MemberDto; +import com.example.demo.entity.Member; +import com.example.demo.service.MemberService; +import org.springframework.web.bind.annotation.*; + +@RestController +public class MemberController { + @Autowired + MemberService memberService; + + public Member createMember() { + MemberDto memberDto = new MemberDto(); + memberDto.setEmail("test@email.com"); + memberDto.setName("홍길동"); + memberDto.setAddress("서울시 마포구 합정동"); + memberDto.setPassword("1234"); + + return Member.creatMember(memberDto); + } + + @RequestMapping(value = "/membertest", method = RequestMethod.GET) + public void membertest() { + Member member = createMember(); + Member savedMember = memberService.saveMember(member); + + System.out.println(member); + System.out.println(savedMember); + } + +} diff --git a/src/main/java/com/example/demo/controller/TestController.java b/src/main/java/com/example/demo/controller/TestController.java index d8186a6..082ef46 100644 --- a/src/main/java/com/example/demo/controller/TestController.java +++ b/src/main/java/com/example/demo/controller/TestController.java @@ -3,6 +3,7 @@ package com.example.demo.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; +import com.google.gson.JsonArray; import com.google.gson.JsonObject; import org.springframework.web.bind.annotation.RequestMapping; @@ -11,17 +12,32 @@ import org.springframework.web.bind.annotation.RequestParam; @RestController public class TestController { - @RequestMapping(value = "/test", method = RequestMethod.GET) + @RequestMapping(value = "/productlist", method = RequestMethod.GET) public String test(@RequestParam("id") String id) { - JsonObject obj = new JsonObject(); - obj.addProperty("title", "신사와 아가씨"); - obj.addProperty("content", "로맨틱 코미디"); + JsonObject obj1 = new JsonObject(); + obj1.addProperty("item_nm", "수제 햄버거"); + obj1.addProperty("item_detail", "소고기 패티와 토마토가 들어 있는 햄버거"); + obj1.addProperty("item_reg_date", "2025/04/02"); + obj1.addProperty("item_price", "4000"); - JsonObject data = new JsonObject(); - data.addProperty("time", "토일 8시"); - obj.add("data", data); + JsonObject obj2 = new JsonObject(); + obj2.addProperty("item_nm", "카레라이스"); + obj2.addProperty("item_detail", "매운 3분 카레라이스"); + obj2.addProperty("item_reg_date", "2025/04/03"); + obj2.addProperty("item_price", "8000"); - return obj.toString(); + JsonObject obj3 = new JsonObject(); + obj3.addProperty("item_nm", "라면"); + obj3.addProperty("item_detail", "소고기 라면"); + obj3.addProperty("item_reg_date", "2025/04/04"); + obj3.addProperty("item_price", "1500"); + + JsonArray infoArray = new JsonArray(); + infoArray.add(obj1); + infoArray.add(obj2); + infoArray.add(obj3); + + return infoArray.toString(); } } diff --git a/src/main/java/com/example/demo/controller/UserController.java b/src/main/java/com/example/demo/controller/UserController.java new file mode 100644 index 0000000..64f3e28 --- /dev/null +++ b/src/main/java/com/example/demo/controller/UserController.java @@ -0,0 +1,31 @@ +package com.example.demo.controller; + +import java.util.List; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.example.demo.dao.UserDAO; +import com.example.demo.dto.UserDTO; + +@RestController +@MapperScan(basePackages = "com.example.demo.dao") // 탐색할 패키시 설정 +public class UserController { + @Autowired + private UserDAO userDAO;// UserDAO bean을 자동으로 주입 + + @RequestMapping("/users") + public List<UserDTO> users(@RequestParam(value = "country", defaultValue = "") String country) throws Exception { // query + // String으로 + // country를 + // 받도록 + // 설정 + final UserDTO param = new UserDTO(0, null, country); + final List<UserDTO> userList = userDAO.selectUsers(param); + return userList; + } + +} diff --git a/src/main/java/com/example/demo/dao/UserDAO.java b/src/main/java/com/example/demo/dao/UserDAO.java new file mode 100644 index 0000000..d298f5b --- /dev/null +++ b/src/main/java/com/example/demo/dao/UserDAO.java @@ -0,0 +1,8 @@ +package com.example.demo.dao; + +import java.util.List; +import com.example.demo.dto.UserDTO; + +public interface UserDAO { + List<UserDTO> selectUsers(UserDTO param) throws Exception; +} diff --git a/src/main/java/com/example/demo/dto/MemberDto.java b/src/main/java/com/example/demo/dto/MemberDto.java new file mode 100644 index 0000000..4366ea2 --- /dev/null +++ b/src/main/java/com/example/demo/dto/MemberDto.java @@ -0,0 +1,13 @@ +package com.example.demo.dto; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class MemberDto { + private String name; + private String email; + private String password; + private String address; +} diff --git a/src/main/java/com/example/demo/dto/UserDTO.java b/src/main/java/com/example/demo/dto/UserDTO.java new file mode 100644 index 0000000..4fc23cf --- /dev/null +++ b/src/main/java/com/example/demo/dto/UserDTO.java @@ -0,0 +1,14 @@ +package com.example.demo.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@AllArgsConstructor // 자동으로 모든 매개변수를 받는 생성자를 생성 +@Getter // Getter 생성 +@Setter // Setter 생성 +public class UserDTO { + private int seq; + private String name; + private String country; +} diff --git a/src/main/java/com/example/demo/entity/Member.java b/src/main/java/com/example/demo/entity/Member.java new file mode 100644 index 0000000..9e3900f --- /dev/null +++ b/src/main/java/com/example/demo/entity/Member.java @@ -0,0 +1,41 @@ +package com.example.demo.entity; + +import javax.persistence.*; + +import com.example.demo.dto.MemberDto; +import com.example.demo.constant.Role; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Entity +@Table(name = "member") +@Getter +@Setter +@ToString +public class Member { + @Id + @Column(name = "member_id") + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + private String name; + + @Column(unique = true) + private String email; + private String password; + private String address; + + @Enumerated(EnumType.STRING) + private Role role; + + public static Member creatMember(MemberDto memberDto) { + Member member = new Member(); + member.setName(memberDto.getName()); + member.setEmail(memberDto.getEmail()); + member.setAddress(memberDto.getAddress()); + member.setPassword(memberDto.getPassword()); + member.setRole(Role.USER); + return member; + } +} diff --git a/src/main/java/com/example/demo/repository/MemberRepository.java b/src/main/java/com/example/demo/repository/MemberRepository.java new file mode 100644 index 0000000..18dfe8b --- /dev/null +++ b/src/main/java/com/example/demo/repository/MemberRepository.java @@ -0,0 +1,8 @@ +package com.example.demo.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import com.example.demo.entity.*; + +public interface MemberRepository extends JpaRepository<Member, Long> { + Member findByEmail(String email); +} diff --git a/src/main/java/com/example/demo/service/MemberService.java b/src/main/java/com/example/demo/service/MemberService.java new file mode 100644 index 0000000..797a6e7 --- /dev/null +++ b/src/main/java/com/example/demo/service/MemberService.java @@ -0,0 +1,32 @@ +package com.example.demo.service; + +import javax.transaction.Transactional; + +import org.springframework.stereotype.Service; + +import com.example.demo.entity.Member; +import com.example.demo.repository.MemberRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@Transactional +@RequiredArgsConstructor +public class MemberService { + private final MemberRepository memberRepository; + + public Member saveMember(Member member) { + validateDuplicateMember(member); + + return memberRepository.save(member); + } + + private boolean validateDuplicateMember(Member member) { + Member findMember = memberRepository.findByEmail(member.getEmail()); + if (findMember != null) { + System.out.println("이미 가입된 회원입니다."); + return false; + } + return true; + } +} diff --git a/src/main/resources/mappers/UserMapper.xml b/src/main/resources/mappers/UserMapper.xml new file mode 100644 index 0000000..15fdf72 --- /dev/null +++ b/src/main/resources/mappers/UserMapper.xml @@ -0,0 +1,17 @@ +<?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.UserDAO"><!--namespace를 통해 UserDAO와 연결합니다. --> + + <select id="selectUsers" parameterType="com.example.demo.dto.UserDTO" +resultType="com.example.demo.dto.UserDTO"> + SELECT `seq`, `name`, `country` FROM lab03 + <if test='country != null and country != ""'> + WHERE country = #{country} + </if> + </select> + +</mapper> + + diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index 782da65..4fb69ef 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -2,12 +2,40 @@ <html> <head> <meta charset="utf-8"> - <title>example 1-2</title> + <title>Insert title here</title> + + <link rel="stylesheet" href="/webjars/bootstrap/5.1.3/css/bootstrap.min.css"> + <script src="/webjars/jquery/3.6.0/jquery.min.js"></script> + <script src="/webjars/popper.js/2.9.3/umd/popper.min.js"></script> + <script src="/webjars/bootstrap/5.1.3/js/bootstrap.min.js"></script> </head> - - <body> - <H2>example 1-2</H2> - <HR> - example 1-2 - </body> +<body> + <div class="container"> + <table class="table table-hover"> + <thead class="thead-dark"> + <tr> + <th>codeId</th> + <th>code</th> + <th>codeNm</th> + <th>codeDc</th> + </tr> + </thead> + <tbody> + <tr> + <td>COM001</td> + <td>REG01</td> + <td>단일 게시판 이용 등록</td> + <td>단일 게시판 이용 등록</td> + </tr> + <tr> + <td>COM001</td> + <td>REG02</td> + <td>커뮤니티 등록</td> + <td>커뮤니티 등록</td> + </tr> + </tbody> + </table> + </div> +</body> </html> + diff --git a/src/main/resources/static/product.html b/src/main/resources/static/product.html new file mode 100644 index 0000000..8a01d79 --- /dev/null +++ b/src/main/resources/static/product.html @@ -0,0 +1,42 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>Product</title> + <link rel="stylesheet" href="/webjars/bootstrap/5.1.3/css/bootstrap.min.css"> + <script src="/webjars/jquery/3.6.0/jquery.min.js"></script> + <script src="/webjars/popper.js/2.9.3/umd/popper.min.js"></script> + <script src="/webjars/bootstrap/5.1.3/js/bootstrap.min.js"></script> + <script> + $(document).ready(function(){ + $("button").click(function(){ + + $.ajax({ + + type: 'GET', + url: '/test?id=1', + success: function(data){ + var obj=JSON.parse(data); + $('#item_nm span').text(obj.item_nm) + $('#item_detail span').text(obj.item_detail) + $('#item_reg_date span').text(obj.item_reg_date) + $('#item_price span').text(obj.item_price) + } + + }); + + + }); + }); + </script> + +</head> +<body> + <h1>상품 데이터 출력 예제</h1> + <div id = "item_nm">상품명: <span></span></div> + <div id = "item_detail">상품 상세설명: <span></span></div> + <div id = "item_reg_date">상품 등록일: <span></span></div> + <div id = "item_price">상품가격: <span></span></div> + <button>조회</button> +</body> +</html> diff --git a/src/main/resources/static/product_list.html b/src/main/resources/static/product_list.html new file mode 100644 index 0000000..34ae97b --- /dev/null +++ b/src/main/resources/static/product_list.html @@ -0,0 +1,59 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>Product</title> + <link rel="stylesheet" href="/webjars/bootstrap/5.1.3/css/bootstrap.min.css"> + <script src="/webjars/jquery/3.6.0/jquery.min.js"></script> + <script src="/webjars/popper.js/2.9.3/umd/popper.min.js"></script> + <script src="/webjars/bootstrap/5.1.3/js/bootstrap.min.js"></script> + <script> + $(document).ready(function(){ + $("button").click(function(){ + + $.ajax({ + + type: 'GET', + url: '/productlist/?id=111', + success: function(data){ + var array = JSON.parse(data); + for(i=0; i < array.length; i++){ + var obj = array[i]; + html = ''; + html += '<tr>'; + html += '<td>' + obj.item_nm + '</td>' + html += '<td>' + obj.item_detail + '</td>' + html += '<td>' + obj.item_reg_date + '</td>' + html += '<td>' + obj.item_price + '</td>' + html += '</tr>'; + $("#tableBody").append(html); + } + + } + + }); + + + }); + }); + </script> + +</head> +<body> +<h1>상품 데이터 목록 출력</h1> +<button>조회</button> +<table class="table table-hover"> + <thead class="thead-dark"> + <tr> + <th>상품이름</th> + <th>상품상세설명</th> + <th>상품등록일</th> + <th>상품가격</th> + </tr> + </thead> + <tbody id="tableBody"> + </tbody> +</table> +</body> +</html> + -- GitLab