티스토리 뷰

스프링은 DI 부터 시작합니다.

 

build.gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
plugins {
    id 'org.springframework.boot' version '2.3.0.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
    id 'war'
}
 
group = 'com.lambda'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
 
repositories {
    mavenCentral()
}
 
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    providedCompile group: 'org.projectlombok'name'lombok', version: '1.18.12'
    compile group: 'org.springframework.boot'name'spring-boot-starter-web-services', version: '2.3.0.RELEASE'
    compile group: 'org.mariadb.jdbc'name'mariadb-java-client', version: '2.6.0'
    compile group: 'org.mybatis'name'mybatis', version: '3.5.4'
    compile group: 'org.mybatis.spring.boot'name'mybatis-spring-boot-starter', version: '2.1.2'
    compile group: 'org.jsoup'name'jsoup', version: '1.13.1'
    compile group: 'org.springframework.boot'name'spring-boot-starter-data-jpa', version: '2.3.0.RELEASE'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}
 
test {
    useJUnitPlatform()
}
 
cs

 

application.yml

설정파일은 application.properties 에서 yml[야믈] 로 변화되는 추세이며, 이 트렌드를 따르지 않으면 설정시 에러가 발생할 가능성이 높습니다.  아래 mariadb 부분은 본인의 DB 설정값으로 대체될 수 있습니다. 다만, 비번 첫글자를 숫자로 작성시 number format exception 이 발생하니 첫 글자는 알파벳 문자로 시작해야 합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
spring:
  http:
    encoding:
      enable:
        true
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://127.0.0.1:3306/mariadb
    username: mariadb
    password: mariadb
 
  jpa:
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    open-in-view: false
    show-sql: true
    hibernate:
      format_sql: true
      ddl-auto: create
 
logging:
  level:
    org:
      hibernate:
        SQL: DEBUG
        type:
          descriptor:
            sql:
              BasicBinder: TRACE
server:
  port: 5000
  servlet:
    encoding:
      charset: UTF-8
    force: true
 
cs

 

먼저 mybatis 먼저 시작합니다. 다음은 MybatisConfig.java 입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.lambda.demo;
 
import javax.sql.DataSource;
 
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
 
@Configuration
@MapperScan(basePackages= {"com.lambda.demo.mapper"})
@EnableTransactionManagement
public class MybatisConfig {
 
 
    @Bean
    public SqlSessionFactory  sqlSessionFactory(DataSource dataSource) throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sessionFactory.setMapperLocations(resolver.getResources("classpath:com/lambda/demo/mappers/*.xml"));
        return sessionFactory.getObject();
    }
 
    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory )  throws Exception {
        final SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
        return sqlSessionTemplate;
    }
}
 
cs

PlayerMapper.java 일단 만들고 메소드는 비워둡니다. 설정때문에 만듭니다.

 

1
2
3
4
5
6
7
8
9
package com.lambda.demo.mappers;
 
import org.springframework.stereotype.Repository;
 
@Repository
public class PlayerMapper {
 
}
 
cs

 

위 PlayerMapper.java 와 대응하는 PlayerMapper.xml 을 만듭니다. 일단 비워둡니다.

1
2
3
4
5
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lambda.demo.mappers.PlayerMapper">
</mapper>
cs

 

JPA 작동을 체크하기 위한 Music.java 를 만듭니다. 이것은 엔티티 클래스입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package com.lambda.web.music;
 
import lombok.*;
import javax.persistence.*;
 
@Data
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity(name="music")
public class Music {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long musicNo;
    @Column(length = 4, nullable = false)
    private String seq;
    @Column(length = 30, nullable = false)
    private String title;
    @Column(length = 30, nullable = false)
    private String artists;
    @Column(length = 200, nullable = false)
    private String thumbnail;
    @Builder
    public Music(String seq, String title, String artists,
                 String thumbnail) {
        this.seq = seq;
        this.title = title;
        this.artists = artists;
        this.thumbnail = thumbnail;
    }
 
 
 
 
}
 
cs

 

Music.java 와 연동하는 MusicRepository.java 를 만듭니다. 그냥 비워둡니다.

1
2
3
4
5
6
7
8
9
package com.lambda.web.music;
 
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
 
@Repository
public interface MusicRepository extends JpaRepository<Music, Long> {
}
 
cs

 

이렇게 설정 후 인텔리제이를 구동합니다.

 

콘솔에 아래와 같은 부분이 보이고

 

 

하이라이트 된 music 테이블이 보이면 성공입니다.

 

그 다음 주의할 점 한가지 !!!

 

이미 만들어 지고, 데이터 마이그레이션이 종료된 상태에서 테이블을 지워버리고 다시 만들면

데이터가 모두 삭제됩니다. 잊지 말고 아래와 같이 바꿔야 합니다.

 

그리고 나서 다시 실행하면 아래처럼 drop table if exists ... 같은 구문이 보이지 않습니다. 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함