본문 바로가기

카테고리 없음

Spring bootmybatis @Select 어노테이션으로 동적 쿼리 사용하기

매퍼는 아래와 같이 작성함.

sql문에 ${sql변수명}으로 입력

메소드 인자에 (@Param("sql변수명") String(또는 int 등등) java변수명) 과 같이 입력

@Mapper
public interface FreeBoardMapper {

    @Select("SELECT EXISTS " +
            "(SELECT 1 FROM Information_schema.tables " +
            "WHERE table_schema = '${DBName}' AND table_name = '${tableName}') " +
            "AS flag")
    int tblExist(@Param("DBName") String DBName, @Param("tableName") String tableName);
   
   //sql 수행시 
   //String DBName이 ${DBName}을, String tableName이 ${tableName}을 대체함
@Slf4j
@Component
public class FreeBoardServiceImpl implements FreeBoardService {
    private final FreeBoardMapper freeBoardMapper;

    public FreeBoardServiceImpl(FreeBoardMapper freeBoardMapper) {
        this.freeBoardMapper = freeBoardMapper;
    }

    @Override
    public List<FreeBoard> freeBoardList() {
        List<FreeBoard> freeBoardList = freeBoardMapper.freeBoardList();
        isTblExist("theDB","theTable"); // <<<<<<theDB에 theTable이 있냐?
        return freeBoardList;
    }


    //isTblExist("db명","tbl명")과 같이 사용. 
    public int isTblExist(String dBName, String tableName) {
        int exist = freeBoardMapper.tblExist(dBName,tableName);
        log.info("{} is {}",tableName, exist);
        return exist;
    }
}