[Spring] 08. MySQL

Hyeongmin Jung·2023년 7월 4일
0

MySQL

목록 보기
1/2

📂 다운로드 | MySQL download

💻 워크밴치 사용법

스키마 및 테이블 생성

계정에 테이블 스키마 권한 부여

커넥션 생성

🐤 SQL 기초

Auto Commit: 명령을 수행할 때마다 commit
✔️ 자동 커밋이 된다면 명령내릴 때마다 DB에 반영되므로 Auto커밋 off
Query/Auto-Commit transations unchecked☑️
commit: 작업 내용을 DB에 반영, 커밋 후에는 커밋 전으로 rollback 불가능
rollback: 작업 내용을 이전 커밋 상태로 되돌리는 것(undo)

DML

✅ 조회(검색): SELECT * FROM DB명.테이블명;
✅ 삽입:
INSERT INTO 테이블명 ('열이름1', '열이름2'...) VALUES('value1', 'value2'...);
INSERT INTO 테이블명 VALUES('value1', 'value2'...);
✅ 수정: UPDATE 테이블명 SET 멤버명='수정할내용' WHERE 조건
✅ 삭제: DELETE FROM 테이블명 WHERE 조건
✔️ 실수를 방지하기 위해 조건이 없으면 삭제되지 않음
가능하게 설정을 바꾸려면 edit/preference/SQL editor/safe Updates unchecked☑️

테이블 복사

✅ 테이블만 생성:
create table b1 select from a1 where false;
create table b1 select
from a1 where 1<>1;
✅ 테이블 후 데이터도 복사:
create table b1 select * from a1;

테이블 리셋

✅ TRUNCATE tablename

단축키 | 🔗

✅ Ctrl+/ : 주석처리 --
✅ / ~ / : 여러줄 주석처리
✅ Ctrl+Enter : 선언한 변수 자동 출력


🔗 DB 연결

JDBC API

✔️ pom.xml에 dependency 추가: MySQL Connector/J

[실행결과]
2022-01-11 13:53:00.0

import java.sql.*;

public class DBConnectionTest {
    public static void main(String[] args) throws Exception {
        // 스키마의 이름(springbasic)이 다른 경우 알맞게 변경
        String DB_URL = "jdbc:mysql://localhost:3306/springbasic?useUnicode=true&characterEncoding=utf8";

        // DB의 userid와 pwd를 알맞게 변경
        String DB_USER = "iubar";
        String DB_PASSWORD = "1234";

        Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); // 데이터베이스 연결
        Statement stmt  = conn.createStatement(); // Statement를 생성

        String query = "SELECT now()"; // 시스템의 현재 날짜시간을 출력하는 쿼리(query)
        ResultSet rs = stmt.executeQuery(query); // query를 실행한 결과->rs

        // 실행결과가 담긴 rs에서 한 줄씩 읽어서 출력
        while (rs.next()) {
            String curDate = rs.getString(1);  // 읽어온 행의 첫번째 컬럼의 값을 String으로 읽어서 curDate에 저장
            System.out.println(curDate);       // 2022-01-11 13:53:00.0
        }
    } 
}

Spring jdbc

✔️ pom.xml에 dependency 추가: Spring JDBC

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>${org.springframework-version}</version>
</dependency>

root-context.xml

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
	<property name="url" value="jdbc:mysql://localhost:3306/springbasic?useUnicode=true&amp;characterEncoding=utf8"></property>
	<property name="username" value="iubar"></property>
	<property name="password" value="1234"></property>
</bean>
public class DBConnectionTest2 {
    public static void main(String[] args) throws Exception {
/*        String DB_URL = "jdbc:mysql://localhost:3306/springbasic?useUnicode=true&characterEncoding=utf8";

        String DB_USER = "iubar";
        String DB_PASSWORD = "1234";
        String DB_DRIVER = "com.mysql.jdbc.Driver";

        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName(DB_DRIVER);
        ds.setUrl(DB_URL);
        ds.setUsername(DB_USER);
        ds.setPassword(DB_PASSWORD); */

        // 데이터베이스 정보가 변경될때마다 수정하고 컴파일을 다시 해야하므로
        // 객체에 대한 setter 처리를 프로퍼티 태그 처리
        // bean태그로 바꾸고 root-context에 넣어줌
        ApplicationContext ac = new GenericXmlApplicationContext("file:src/main/webapp/WEB-INF/spring/**/root-context.xml");
        DataSource ds = ac.getBean(DataSource.class);

        Connection conn = ds.getConnection(); 
        System.out.println("conn = " + conn);
    }
}

🦾 Junit Test Framwork

: Test 자동화_TDD(Test Driven Development)

pom.xml

<!-- Test -->
<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
	<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-test</artifactId>
	<version>${org.springframework-version}</version>
	<scope>test</scope>		
</dependency>
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.sql.DataSource;
import java.sql.Connection;

import static org.junit.Assert.assertTrue;

// JUnit이 작동하면서 SpringJUnit4ClassRunner를 가지고 test
// 수동과 다르게 하나의 ac를 재사용하기 때문에 성능 ↑
@RunWith(SpringJUnit4ClassRunner.class) // ApplicationContext ac 자동생성
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"}) //xml 표준 파일 위치 지정
public class DBConnectionTest2Test {
    @Autowired //자동
    DataSource ds;

    @Test
    public void springJdbcConnectionTest() throws Exception{
        // 수동
//        ApplicationContext ac = new GenericXmlApplicationContext(
//                "file:src/main/webapp/WEB-INF/spring/**/root-context.xml");
//        DataSource ds = ac.getBean(DataSource.class);

        Connection conn = ds.getConnection(); // 데이터베이스의 연결

        System.out.println("conn = " + conn);
        assertTrue(conn!=null); // 괄호안의 조건이 true면 테스트 성공, 아니면 실패
    }
}

cf) SpringJUnit4ClassRunner requires JUnit 4.12 or higher.(ver 4.7 < 4.12)

📌 IntelliJ 내에서 Database 추가


참고) 자바의 정석 | 남궁성과 끝까지 간다

0개의 댓글