Tech/QueryDSL

실무에서 mybatis to querydsl 변환시 사용한 querydsl 문법

소프 2021. 7. 14.

1. concat 사용

concat('http://', a.example1, '/', a.example2, '/', a.example3, '/abc.com')

to

Expressions.asString("http://").concat(QEntity.example1).concat(".").concat("abc)
     .concat("/").concat(QEntity.example2).concat("/").concat(QEntity.example3).concat("/abc.com").as("url")
  • 보통 Qentity.example.concat("/").. 이런식으로 했는데 첫단어부터 상수를 써야되서 난감했다. 하지만 갓오버플로우로 해결!!

2. Expression.numberTemplate

select unix_timestamp() from dual;

to

   Expressions.numberTemplate(Long.class, "UNIX_TIMESTAMP()").as("now_time")
  • Expression.stringTemplate 예제는 많은데 다른건 거의 없더라

 

3. Expressions.timeTemplate

SELECT sec_to_time(second) FROM table1;

to

Expressions.timeTemplate(Time.class, "SEC_TO_TIME({0})", alistVO.second).as("second")
  • SEC_TO_TIME은 초를 Time(시:분:초) 형식으로 바꿔주는 MySQL 함수다.

 

4. 엔티티 생성 후 DB 저장

@Repository
public class ProfileDataRepository extends QuerydslRepositorySupport {

    private JPAQueryFactory queryFactory;

    QCms_profileVO profileVO = QCms_profileVO.cms_profileVO;

    public ProfileDataRepository() {
        super(ProfileDataRepository.class);
    }

    @Override
    // 마이바티스+Jpa 관련 config 생성(트랜잭션 공유)
    @PersistenceContext(unitName = "contentsEntityManagerFactory")
    public void setEntityManager(EntityManager entityManager) {
        super.setEntityManager(entityManager);
        this.queryFactory = new JPAQueryFactory(entityManager);
    }

    public boolean addDB( Entity entity ) {
        super.getEntityManager().persist( entity );
        return super.getEntityManager().contains(entity);
    }
  • EntityManager를 받아서 persiste()나 merge를 사용해서 저장
  • 듣기론 save()를 사용하는것보단 직접 컨트롤하는게 좋다카더라
  • persist()는 void를 반환하기 때문에 Service단에서 예외처리를 위해 contains()으로 포함여부를 boolean값으로 반환

 

5. group_concat 사용법

https://blog.leocat.kr/notes/2020/08/16/hibernate-use-databse-function

 

[Hibernate] DB 함수 사용하기

문제

blog.leocat.kr

+

spring:
  jpa:
    database-platform: com.emlabs.vodtolive.config.MysqlCustomDialect

application.yml에 추가

 

 

(Mysql to Querydsl) or Querydsl 사용하면서 느낀점

Querydsl로 안되는 복잡한 쿼리(인라인 절 등)를 사용할 수 밖에 없는건 MyBatis가 짱.

 

 

 

https://kwonnam.pe.kr/wiki/java/querydsl

 

java:querydsl [권남]

 

kwonnam.pe.kr

 

참고

1. concat 사용

https://stackoverflow.com/questions/36903669/like-and-concat-in-querydsl

댓글