diff --git a/src/main/java/com/example/demo/DemoApplication.java b/src/main/java/com/example/demo/DemoApplication.java index 64000b5451ab3ca460cf1230a271ca800ce573bd..7b336773a2b3dffb918cba61dc72aca3351ad8fc 100644 --- a/src/main/java/com/example/demo/DemoApplication.java +++ b/src/main/java/com/example/demo/DemoApplication.java @@ -1,15 +1,38 @@ 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("mapper/UserMapper.xml"); + sessionFactory.setMapperLocations(res); + return sessionFactory.getObject(); + } -} +} \ No newline at end of file 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 0000000000000000000000000000000000000000..ae889880fd5c34aa464e06814e1ecb5d64605680 --- /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 0000000000000000000000000000000000000000..b02f9f6fa243be6a6ca13e75d37962215abb0e9f --- /dev/null +++ b/src/main/java/com/example/demo/controller/MemberController.java @@ -0,0 +1,67 @@ +package com.example.demo.controller; +import com.example.demo.service.MemberService; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.example.demo.entity.Member; +import com.example.demo.dto.MemberDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.repository.query.Param; +import org.springframework.web.bind.annotation.*; +import com.google.gson.JsonParser; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; + +@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.createMember(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); + } + @RequestMapping(value = "/makeMember", method = RequestMethod.POST) + public String makeMember(@RequestBody String param){ + System.out.println(param); + JsonElement element = JsonParser.parseString(param); + JsonObject object = element.getAsJsonObject(); + + String id = object.get("id").getAsString(); + System.out.println("id : " + id); + String email = object.get("email").getAsString(); + System.out.println("email : " + email); + String address = object.get("address").getAsString(); + System.out.println("address : " + address); + String name = object.get("name").getAsString(); + System.out.println("name : " + name); + String password = object.get("password").getAsString(); + System.out.println("password : " + password); + + return "OK"; + } + @RequestMapping(value = "/get_member", method= RequestMethod.GET) + public String getMember(@RequestParam String id){ + if(id.equals("user")){ + JsonObject obj = new JsonObject(); + obj.addProperty("name", "Jane"); + obj.addProperty("age", "18"); + obj.addProperty("success", "OK"); + return obj.toString(); + } + else{ + JsonObject obj = new JsonObject(); + obj.addProperty("success", "NOT OK"); + return obj.toString(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/controller/TestController.java b/src/main/java/com/example/demo/controller/TestController.java index 7359010c1aa0a55de8a911c2c17cbfdaa0c0e5eb..26f1ddfdafe43a74cb50c0a8f7d6b2ec784db9bd 100644 --- a/src/main/java/com/example/demo/controller/TestController.java +++ b/src/main/java/com/example/demo/controller/TestController.java @@ -5,6 +5,7 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import com.google.gson.JsonArray; import com.google.gson.JsonObject; @RestController public class TestController { @@ -15,15 +16,27 @@ public class TestController { dto.setName("Jane"); return dto; } - @RequestMapping(value = "/", method = RequestMethod.GET) - public String test(@RequestParam("id") String id){ - System.out.println(id); - JsonObject obj = new JsonObject(); - obj.addProperty("title", "산사와 아가싸"); - obj.addProperty("content", "로맨틱 코메디"); - JsonObject data = new JsonObject(); - data.addProperty("time", "토일 8시"); - obj.add("data", data); - return obj.toString(); + @RequestMapping(value = "/productlist", method = RequestMethod.GET) + public String productList(){ + JsonObject obj1 = new JsonObject(); + obj1.addProperty("item_nm", "수제 햄버거"); + obj1.addProperty("item_detail", "소고기 패티와 토마토가 들어 있는 햄버거"); + obj1.addProperty("item_reg_date", "2022/04/22"); + obj1.addProperty("item_price", "4000"); + JsonObject obj2 = new JsonObject(); + obj2.addProperty("item_nm", "카레라이스"); + obj2.addProperty("item_detail", "매운 3분 카레라이스"); + obj2.addProperty("item_reg_date", "2022/03/10"); + obj2.addProperty("item_price", "8000"); + JsonObject obj3 = new JsonObject(); + obj3.addProperty("item_nm", "라면"); + obj3.addProperty("item_detail", "소고기 라면"); + obj3.addProperty("item_reg_date", "2021/09/10"); + obj3.addProperty("item_price", "1500"); + JsonArray infoArray = new JsonArray(); + infoArray.add(obj1); + infoArray.add(obj2); + infoArray.add(obj3); + return infoArray.toString(); } } \ No newline at end of file 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 0000000000000000000000000000000000000000..68192eaa53eddbeab1c6ce50f9dca412f09584a8 --- /dev/null +++ b/src/main/java/com/example/demo/controller/UserController.java @@ -0,0 +1,21 @@ +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; + } +} \ No newline at end of file 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 0000000000000000000000000000000000000000..3482ac04d981141b707dc64fecae347ecfaf7f44 --- /dev/null +++ b/src/main/java/com/example/demo/dao/UserDAO.java @@ -0,0 +1,6 @@ +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; +} \ No newline at end of file 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 0000000000000000000000000000000000000000..52883ac9298312ffdca36a42c90f8aea98dfb0fe --- /dev/null +++ b/src/main/java/com/example/demo/dto/MemberDto.java @@ -0,0 +1,11 @@ +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; +} \ No newline at end of file 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 0000000000000000000000000000000000000000..414037e39c780f5e1b87f19ead18a3913de8e656 --- /dev/null +++ b/src/main/java/com/example/demo/dto/UserDTO.java @@ -0,0 +1,12 @@ +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; +} \ No newline at end of file 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 0000000000000000000000000000000000000000..d16f95d57972f3d5fb6a0311e43d449e6c5ad4c4 --- /dev/null +++ b/src/main/java/com/example/demo/entity/Member.java @@ -0,0 +1,35 @@ +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 createMember(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; + } +} \ No newline at end of file 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 0000000000000000000000000000000000000000..82905ce956436c111313682cc8932690af3ae153 --- /dev/null +++ b/src/main/java/com/example/demo/repository/MemberRepository.java @@ -0,0 +1,6 @@ +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); +} \ No newline at end of file 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 0000000000000000000000000000000000000000..abe4d1ad7905ef66667069d8c5649553bc0c1a3a --- /dev/null +++ b/src/main/java/com/example/demo/service/MemberService.java @@ -0,0 +1,25 @@ +package com.example.demo.service; +import com.example.demo.entity.Member; +import com.example.demo.repository.MemberRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; +import javax.transaction.Transactional; +@Service +@Transactional +@RequiredArgsConstructor +public class MemberService { + private final MemberRepository memberRepository; + public Member saveMember(Member member){ + validateDuplicatetMember(member); + return memberRepository.save(member); + } + private boolean validateDuplicatetMember(Member member){ + Member findMember = memberRepository.findByEmail(member.getEmail()); + if(findMember != null){ + System.out.println("이미 가입된 회원입니다."); + return false; + } + return true; + } +} \ No newline at end of file diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..9b3359ce62dee3f1ab5da659c9decf0a962d9b0a --- /dev/null +++ b/src/main/resources/mapper/UserMapper.xml @@ -0,0 +1,11 @@ +<?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> \ No newline at end of file diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html new file mode 100644 index 0000000000000000000000000000000000000000..8acab6fcf83443dff03b58267524fa98e992e61f --- /dev/null +++ b/src/main/resources/static/index.html @@ -0,0 +1,55 @@ +<!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(){ +37 +$("button").click(function(){ +$.ajax({ +type: 'GET', +url: '/productlist', +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> \ No newline at end of file