Search code examples
mysqlsqlquerydsl

How to use mysql function in querydsl with sql statement?


The phone number in the database is encrypted, so I have to use the decryption function. So I wrote the code like this, but it didn't work. How can I make it?

Here is my code

    BooleanBuilder builder = new BooleanBuilder();
            if(StringUtils.hasText(memberVO.getSearchTypeCd()) && StringUtils.hasText(memberVO.getSearchText())) {
                if(memberVO.getSearchTypeCd().equals("memNm")) {
                    builder.and(info.memNm.contains(memberVO.getSearchText()));
                }
                if(memberVO.getSearchTypeCd().equals("nickNm")) {
                    builder.and(info.nickNm.contains(memberVO.getSearchText()));            
                }
                if(memberVO.getSearchTypeCd().equals("hpNo")) {             
                    //FN_DECRYPT is not working
                    builder.and(info.nickNm.prepend("FN_DECRYPT(").append(")").contains(memberVO.getSearchText()));
                }
            }

And I want type like this in sql.


WHERE FN_DECRYPT(hpNo) LIKE '%010-0000-0000%'

Thank you.


Solution

  • Finally i solved it

    
        BooleanBuilder builder = new BooleanBuilder();
        if(StringUtils.hasText(memberVO.getSearchTypeCd()) && StringUtils.hasText(memberVO.getSearchText())) {
            if(memberVO.getSearchTypeCd().equals("memNm")) {
                builder.and(info.memNm.contains(memberVO.getSearchText()));
            }
            if(memberVO.getSearchTypeCd().equals("nickNm")) {
                builder.and(info.nickNm.contains(memberVO.getSearchText()));            
            }
            if(memberVO.getSearchTypeCd().equals("hpNo")) {                             
                builder.and(Expressions.booleanTemplate("FN_DECRYPT({0}) LIKE '%" + memberVO.getSearchText().replaceAll("-", "") + "%'", info.hpNo));
            }
        }