From 5eee28d13c30970fec22e860b514c74be50a1950 Mon Sep 17 00:00:00 2001
From: wonbin <wonbin3977@ajou.ac.kr>
Date: Wed, 2 Apr 2025 18:59:34 +0900
Subject: [PATCH] spring-basic

---
 .../com/example/demo/DemoApplication.java     | 35 ++++++++++++++++---
 .../demo/controller/MemberController.java     |  2 +-
 .../demo/controller/UserController.java       | 28 +++++++++++++++
 .../java/com/example/demo/dao/UserDAO.java    |  8 +++++
 .../java/com/example/demo/dto/UserDTO.java    | 14 ++++++++
 src/main/resources/mappers/UserMapper.xml     | 18 ++++++++++
 6 files changed, 99 insertions(+), 6 deletions(-)
 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/UserDTO.java
 create mode 100644 src/main/resources/mappers/UserMapper.xml

diff --git a/src/main/java/com/example/demo/DemoApplication.java b/src/main/java/com/example/demo/DemoApplication.java
index 2139ef8..09110f4 100644
--- a/src/main/java/com/example/demo/DemoApplication.java
+++ b/src/main/java/com/example/demo/DemoApplication.java
@@ -1,16 +1,41 @@
 package com.example.demo;
 
-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;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.SpringApplication;
+
 
 @RestController
 @SpringBootApplication
+// @EntityScan(basePackageClasses = {Item.class})
+
 public class DemoApplication {
 
 	public static void main(String[] args) {
 		SpringApplication.run(DemoApplication.class, args);
-	}
-	 
-}
\ No newline at end of file
+    }
+
+ 
+    @Bean
+    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
+        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
+        sessionFactory.setDataSource(dataSource);
+        
+        Resource[] res = new PathMatchingResourcePatternResolver().getResources("mapper/Mapper.xml");
+        sessionFactory.setMapperLocations(res);
+        
+        return sessionFactory.getObject();
+    }
+
+}
diff --git a/src/main/java/com/example/demo/controller/MemberController.java b/src/main/java/com/example/demo/controller/MemberController.java
index 265e24c..065ae80 100644
--- a/src/main/java/com/example/demo/controller/MemberController.java
+++ b/src/main/java/com/example/demo/controller/MemberController.java
@@ -21,7 +21,7 @@ public class MemberController {
 
     public Member createMember(){
         MemberDto memberDto = new MemberDto();
-        memberDto.setEmail("test1@email.com");
+        memberDto.setEmail("test@email.com");
         memberDto.setName("홍길동");
         memberDto.setAddress("서울시 마포구 합정동");
         memberDto.setPassword("1234");
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..646e25e
--- /dev/null
+++ b/src/main/java/com/example/demo/controller/UserController.java
@@ -0,0 +1,28 @@
+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/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/resources/mappers/UserMapper.xml b/src/main/resources/mappers/UserMapper.xml
new file mode 100644
index 0000000..a4ca9bd
--- /dev/null
+++ b/src/main/resources/mappers/UserMapper.xml
@@ -0,0 +1,18 @@
+
+<?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>
+
+
-- 
GitLab