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 << 이거 추가되어야한다.
반응형
댓글