타닥타닥 개발자의 일상

Spring Boot와 My Sql 연결하기 본문

코딩 기록/SpringBoot

Spring Boot와 My Sql 연결하기

NomadHaven 2022. 2. 21. 19:03

우선 연결을 하려면 My SQl을 다운로드 해야한다.

 

아래의 페이지에서 No thanks just start my download 클릭하면 회원가입없이 다운로드 가능.

첫번째 링크는 installer  두번째 링크는 java connector다. 참고로 본인은 window 64bit라서 이와 동일하게 받음.

https://dev.mysql.com/downloads/file/?id=509737 

 

MySQL :: Begin Your Download

The world's most popular open source database Contact MySQL  |  Login  |  Register

dev.mysql.com

https://dev.mysql.com/downloads/file/?id=509728 

 

MySQL :: Begin Your Download

The world's most popular open source database Contact MySQL  |  Login  |  Register

dev.mysql.com

 

 

 

MySQL :: Begin Your Download

The world's most popular open source database Contact MySQL  |  Login  |  Register

dev.mysql.com

 

mysql-connector를 다운 받으면 보이는 jar 파일은 복사해서 본인이 찾기 쉬운곳에 저장해둔다.

 

 

My SQL을 설치하고 유저 이름과 비밀번호까지 설정했다면 eclipse와 연결할수 있다.

 

 

오라클의 SQL Developer와 유사한 역할을 하는것은 MySQL Workbench다

 

아래의 Local instacne MySQL을 클릭하면 비밀번호 입력을 요구하는 창이 뜨는데,

비밀 번호를 입력하면 쿼리문 입력 페이지로 이동한다.

 

 

쿼리문을 입력하고 번개버튼을 누르면 커밋이 된다.

커밋을 해서 테이블이 생성되고 조회도 가능하다.

아무것도 없는 테이블이므로 조회해도 딱히 조회되는 데이터는 없다.

 

 

 

이제 My SQL을 이클립스와 연결하고 Connection URL값을 얻어야 한다.

 

 

 

이클립스를 실행하자.

 

eclipse에서 Open perspective를 Database Development로 바꿔준다.

Database Connections 폴더를 우클릭하여 My SQL을 선택한다. 

 

 

URL은 기존의 Oracle 연결과 구별하기 위해서 마지막 슬래시 뒷부분을 mysql로 변경했다.

My SQL에 등록했던 UserName과 Password로 Test Connection을 하여 연결을 확인한다. 

 

 

그 다음 과정은 Orcale을 연결하는 과정과 거의 흡사하다.

아래의 링크를 참고하여 연결하면 된다.

https://developerson.tistory.com/112

 

SpringBoot와 Oracle SQl 연결하기, 데이터 웹페이지에 출력하기

1. Oracle SQL과 이클립스 연결하기 Open Perspective에서 Databasee Development 선택하고 Open DataBase Connections 우클릭 > New > 새창으로 New Connection Profile 뜨면 Oracle 선택 체크한 부분 본인이..

developerson.tistory.com

차이점이 있다면 mysql-connector에서 얻은 jar파일을 ojdbc.jar 파일 대신에 사용한다.

따라서 ojdbc.jar파일은 본인이 찾기 쉬운 곳에 잘 저장해둬야한다.

 

 

시범 삼아 이클립스를 통해서 MYSQL에 데이터를 입력해보았다.

 


SpringBoot와 MySQL 연결하기 시작

 

 

폴더 및 파일구성

Orcale을 연결하는 과정과 크게 다르지는 않지만 MYSQL을 연결하는 것이므로 dependencies에 약간의 차이가 이다.

Oracle 연결할때의 dependencies에서 추가된 부분을 주석으로 언급했다.

 

 

pom.xml

 

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.6.3</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>sample02</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>sample02</name>
	<description>Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
			
		</dependency>
		
			
		<!--추가된 부분 https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
		<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web/2.6.3 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId> 
</dependency>
		
		<!--추가된 부분 https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat/2.6.3 -->
		<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
		
		<!--추가된 부분 Json library -->
<dependency>
	          <groupId>com.fasterxml.jackson.core</groupId>
	          <artifactId>jackson-core</artifactId>
	          <version>2.10.1</version>
	      </dependency>
	      
	      <dependency>
	          <groupId>com.fasterxml.jackson.core</groupId>
	          <artifactId>jackson-databind</artifactId>
	          <version>2.10.1</version>
	      </dependency>
	      
	      <!-- 추가한 부분 https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc/2.6.3 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
	      
	      <!-- 추가한 부분 https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter/2.2.2 -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>


<!-- 추가한 부분 https://mvnrepository.com/artifact/org.mybatis/mybatis-spring/2.0.7 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.6</version>
</dependency>

<!-- 추가한 부분 https://mvnrepository.com/artifact/org.mybatis/mybatis/3.5.9 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.9</version>
</dependency>

<!-- 위의 부분은 Oracle을 연결했을때의 pom.xml을 그대로 가져온것 -->
<!-- 아래는 My SQL을 위해 새로 추가된 부분 mysql  https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.27 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.27</version>
</dependency>

		
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

 

dependencies 추가로 MYSQL을 maven에 다운받았다.

이제 database 주소를 SpringBoot와 연결해주자.

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/mysql
spring.datasource.hikari.username=root
spring.datasource.hikari.password=******

 

모든 경로에서 접속이 가능하도록 WebConfig.java도 변경해준다.

 WebConfig.java
package mul.camp.a;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

	@Override
	public void addCorsMappings(CorsRegistry registry) {
		// TODO Auto-generated method stub
		//WebMvcConfigurer.super.addCorsMappings(registry);
		
		//registry.addMapping("/**").allowedOrigins("http://localhost:8090");
		registry.addMapping("/**").allowedOrigins("*"); //모든 경로 모든 곳에서 접속 가능하게 설정
	}

}

 

 


DatabaseConfig.java
package mul.camp.a;

import javax.sql.DataSource;

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("classpath:/application.properties")
public class DatabaseConfig {
	
	
	@Bean
	@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
	public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
		System.out.println("DatabaseConfig sqlSessionFactory");
		
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		sqlSessionFactoryBean.setDataSource(dataSource);
		
		Resource arrResource[] = new PathMatchingResourcePatternResolver().getResources("classpath:sqls/*.xml");
		sqlSessionFactoryBean.setMapperLocations(arrResource);
		sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
		
		return (SqlSessionFactory)sqlSessionFactoryBean.getObject();		
	}
	
	@Bean
	public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
		return new SqlSessionTemplate(sqlSessionFactory);
	}
	
}

 

Sample02Application.java
package mul.camp.a;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Sample02Application {

	public static void main(String[] args) {
		SpringApplication.run(Sample02Application.class, args);
	}

}

Contoller

 

HelloController.java
package mul.camp.a.controller;

import java.util.List;

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

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

@RestController
public class HelloController {
	
	@Autowired
	MemberService service;

	@RequestMapping(value = "/base")
	public String base() {
		System.out.println("HelloController base");
		return "base";
	}
	
	
	@RequestMapping(value="/dbTest")
	public List<MemberDto> dbTest(){
		System.out.println("HelloContoller dbTest()");
		
		List<MemberDto> list = service.allMember();
		
		return list;
	}
}

 


Dao(Interface)

MemberDao.java(Interface)
package mul.camp.a.dao;

import java.util.List;

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

import mul.camp.a.dto.MemberDto;

@Mapper
@Repository
public interface MemberDao {
	
	//반드시 xml에 있는 변수명과 일치해야한다.
	public List<MemberDto> allMember(); 

}

 


Dto

MemberDto.java
package mul.camp.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;
	}
	
	
}

Service

MemberService.java
package mul.camp.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.camp.a.dao.MemberDao;
import mul.camp.a.dto.MemberDto;

@Service
@Transactional
public class MemberService {
	
	@Autowired
	MemberDao dao;
	
	public List<MemberDto>allMember(){
		
		return dao.allMember();
		
	}

}

SQL

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">

  <mapper namespace="mul.camp.a.dao.MemberDao">
  
  
  <select id="allMember" resultType="mul.camp.a.dto.MemberDto">
   SELECT * FROM MEMBER
  </select>		
  
  <insert id="addMember">
  </insert>
  
  
  </mapper>

 

 


이제 컨트롤러에서 설정한 페이지가 잘 구동되는지 확인해보자

 

	@RequestMapping(value = "/base")
	public String base() {
		System.out.println("HelloController base");
		return "base";
	}

주소창에 base를 입력하여 base라는 문자를 잘 리턴하는지 확인.


@RequestMapping(value="/dbTest")
	public List<MemberDto> dbTest(){
		System.out.println("HelloContoller dbTest()");
		
		List<MemberDto> list = service.allMember();
		
		return list;
	}

 

주소창에 db/base을 입력하여 입력된 data가 list 형식으로 잘 출력되는지 확인

 

eclipse로 시범삼아 입력해둔 데이터가 잘 출력되었다.

 

 

 

 

Comments