본문 바로가기
스프링부트

[스프링부트] DB 연결, member 불러오기

by CodeMango 2023. 3. 26.

DB설정하기

 

1. pom에 의존성 추가하기

		<!-- 추가 시작 --> 
		<dependency>
		    <groupId>com.fasterxml.jackson.core</groupId>
		    <artifactId>jackson-core</artifactId>
		    <version>2.14.1</version>
		</dependency>
		
		<dependency>
		    <groupId>com.fasterxml.jackson.core</groupId>
		    <artifactId>jackson-databind</artifactId>
		    <version>2.14.1</version>
		</dependency>
		
		<dependency>
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-starter-jdbc</artifactId>		    
		</dependency>
		
		<dependency>
		    <groupId>org.mybatis.spring.boot</groupId>
		    <artifactId>mybatis-spring-boot-starter</artifactId>
		    <version>3.0.1</version>
		</dependency>
		
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis-spring</artifactId>
		    <version>3.0.1</version>
		</dependency>
		
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis</artifactId>
		    <version>3.5.11</version>
		</dependency>
		
		<dependency>
		    <groupId>mysql</groupId>
		    <artifactId>mysql-connector-java</artifactId>
		    <version>8.0.29</version>
		</dependency>
		
		<!-- 추가 완료-->

2. application.properties 설정하기

server.port=3000

spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/mydb?serverTimeZone=Asia/Seoul
spring.datasource.hikari.username=root
spring.datasource.hikari.password=1234

3. DatabaseConfig.java 설정하기

package mul.cam.a;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

//설정
@Configuration
	//@PropertySource : 설정 파일의 위치와 이름을 지정하여 해당 설정 파일을 로드
@PropertySource("classpath:/application.properties") //application.properties 안의 소스 불러와라
public class DatabaseConfig {

		//hikari : JDBC(Java Database Connectivity) 연결 풀링 라이브러리
	@Bean
		//@ConfigurationProperties: 설정 파일에 정의된 값을 객체에 바인딩
	@ConfigurationProperties(prefix = "spring.datasource.hikari")
	public HikariConfig hikariConfig() {
		return new HikariConfig();
	}
	
	@Bean
	public DataSource dataSource() {
		DataSource dataSource = new HikariDataSource(hikariConfig());
		System.out.println("dataSource:" + dataSource);
		return dataSource;
	}
	
	@Bean					//파라미터타입 : DataSource
	public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
		System.out.println("DatabaseConfig sqlSessionFactory");
		
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		sqlSessionFactoryBean.setDataSource(dataSource);
		//core.io.
		Resource[] arrResource = new PathMatchingResourcePatternResolver().getResources("classpath:sqls/*.xml");
/*
 위 코드는 Spring에서 클래스패스(classpath) 상에 위치한 sqls 디렉토리에 있는 모든 .xml 파일을 가져와서, 
 Resource 배열 객체에 할당하는 코드입니다.

PathMatchingResourcePatternResolver 클래스는 ResourcePatternResolver 인터페이스를 구현한 클래스로, 
클래스패스 상의 리소스를 가져올 수 있는 기능을 제공합니다. getResources() 메서드를 호출하면, 
인자로 전달된 패턴에 일치하는 모든 리소스를 Resource 배열 객체로 반환합니다.

따라서, 위 코드는 classpath:sqls/*.xml 패턴에 일치하는 모든 리소스(즉, sqls 디렉토리에 있는 모든 .xml 파일)를 가져와서, 
Resource 배열 객체인 arrResource에 할당하는 코드입니다. 이후에는 arrResource 배열에 할당된 Resource 객체를 이용하여, 
SQL 파일의 내용을 읽어와서 데이터베이스에 적용하는 등의 작업을 수행할 수 있습니다
 
*/
		sqlSessionFactoryBean.setMapperLocations(arrResource);
		sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
		
		return (SqlSessionFactory)sqlSessionFactoryBean.getObject();		
	}
	
	@Bean
	public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
		return new SqlSessionTemplate(sqlSessionFactory);
	}	
}

 

모든 멤버 불러오기 (백앤드)

 

Member.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">
	
	<!--  스프링과 다른점 -> namespace -> dao가 mapper를 흡수하게함. -->
<mapper namespace="mul.cam.a.dao.MemberDao">

<select id="allMember" resultType="mul.cam.a.dto.MemberDto">
	select id, pwd, name, email, auth
	from member
</select>
</mapper>

MemberDto

package mul.cam.a.dto;

public class MemberDto {
	
	private String id;
	private String pwd;
	private String name;
	private String email;
	private int auth;
	
	public MemberDto() {
	}

	public MemberDto(String id, String pwd, String name, String email, int auth) {
		super();
		this.id = id;
		this.pwd = pwd;
		this.name = name;
		this.email = email;
		this.auth = auth;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public int getAuth() {
		return auth;
	}

	public void setAuth(int auth) {
		this.auth = auth;
	}

	@Override
	public String toString() {
		return "MemberDto [id=" + id + ", pwd=" + pwd + ", name=" + name + ", email=" + email + ", auth=" + auth + "]";
	}
}

MemberDao

package mul.cam.a.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import mul.cam.a.dto.MemberDto;

@Mapper  // Mapper 애노테이션을 씀으로서 이 인터페이스는 mapper가 된다. mapper의 id를 함수명으로 사용할 수 있게된다.
@Repository
public interface MemberDao {

	List<MemberDto> allMember();	//mapper의 id와 동일
}

MemberService

package mul.cam.a.service;

import java.util.List;

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

import mul.cam.a.dao.MemberDao;
import mul.cam.a.dto.MemberDto;

@Service
@Transactional //전환작업
public class MemberService {

	@Autowired
	MemberDao dao;
	
	public List<MemberDto> allMember() {	//서비스에서는 id와 함수이름 똑같이 쓰지 않아도 되긴함.memberAll 해도됨
		return dao.allMember();
	}
}

MemberController

package mul.cam.a.controller;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import mul.cam.a.dto.MemberDto;
import mul.cam.a.service.MemberService;

@RestController
public class MemberController {

	@Autowired
	MemberService service;
	
	@GetMapping(value = "/allList")	//value 안 적어도됨 @GetMapping("/allList") 라고 적어도됨
	public List<MemberDto> allList(){
		System.out.println("MemberController allList " + new Date());
		
		return service.allMember();		
	}
}

댓글