본문 바로가기
Programming/Java_Spring

Spring Mapper -> Repository로 바꾸어보기

by 곰네Zip 2022. 8. 1.

Mapper로 구현했던것을 JpaRepository를 상속받도록 변경해보았다. (일일이 찾기, insert하는 코드 넣기 귀찮아서 알아본거라고는 말 못함..)

 

그냥 Mapper를 JpaRepository를 상속받도록 변경했다.

//before
@Mapper
public interface MyClassMapper {
	@Select("SELECT [columns] FROM Class_Info WHERE Name='#{paramname}')
    MyClass findMyClassByName(@Param("paramname") String name);
}

//after
@Repository
public interface MyClassRepository extends JpaRepository<MyClass, Long>{
	//여기서 기본적인건 다 상속받을 수 있다.
    //findAll(), findById(Long Id)등..
    //근데 여기서 내가 무언가 쿼리를 해야한다면?
    @Query("SELECT c FROM MyClass c WHERE c.name = ?1")
    MyClass findMyClassByName(@Param("paramname") String name);
}

 Before -> After로 바뀐건..

Mapper에서는 'Select'애노테이션을 사용하였는데, JpaRepository를 상속받으면서, Query로 변경하였다.

이거 없으면, 실행 시, 쿼리 못찾는다고 에러 발생한다.

 

그리고.. 이렇게 MyClass를 바로 지정하면, MySQL기준으로 테이블명이 my_class로 지정된다.

만약 테이블명을 지정하고 싶다면, Object (MyClass) 정의에서 테이블을 지정하면 된다.

@Data
@Getter
@Setter
@Table(name = "Class_Info")
public class MyClass{
...
}

이런식으로..

그리고 application.yml에도 설정을 지정해주어야한다.

spring:
	jpa:
    	hibernate:
        	ddl-auto: update
        database-platform: org.hibernate.dialect.MySQL8Dialect
    datasource:
    	drivate-class-name: com.mysql.cj.jdbc.Driver
        url: dburl
        username: username
        password: "PWD"

위 설정 들어가줘야.. 실행시 오류 발생하지 않는다.

 

그리고 pom.xml에서도

 <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

위와 같이 mysql-connector-java << 이거 추가되어야한다.

반응형

댓글