SQLKATA 최고입니다.

이번 닷넷 컨퍼런스에서 안현모님께서 발표하신 SQLKATA
자료를 보고 저것다 필이 와서 바로 프로젝트에 적용해봤습니다.
사용법도 쉽고 그동안 ORM 과 Procedure 서로 맹점이 있었습니다.

  1. EF ORM 을 쓰면 스키마 변경이 어렵다 (DB 퍼스트 하고 체계적인 배포 관리가 되면
    되겠지만 현실은…)
  2. DB 스키마 수동 변경시 컴파일이 필요하다
  3. Procedure 사용시 비지니스 로직이 분산되고 파악이 안된다
  4. Procedure 사용시 쿼리 버전 관리가 안된다.
  5. 다양한 DB 메이커에 대응이 어렵다.
  6. EF LINQ 가 생성하는 쿼리는 예측이 안되서 ? 디버깅이 어렵다.

등등 막상 실무에서 사용하기에는 개인적으로 맹점이 많았습니다.

하지만 SQLKATA 는 Linq 로 쿼리를 만들면 ? 그다음 DB 메이커에 따라
Query 를 자동생성해줍니다.

var query = _queryFactory.Query("EXTERNAL_IF_TABLE")
        .Where("Delyn", false).Where("UseYn", true)
        .Select("TableID", "TableNm", "FILE_NM");

var compiledQuery = _queryFactory.Compiler.Compile(query);

 var result = await connection.QueryAsync<EXTERNALIFTABLE_Model>(compiledQuery.Sql, compiledQuery.NamedBindings);

대략 이런식으로

var query = _queryFactory.Query(“EXTERNAL_IF_TABLE”)
.Where(“Delyn”, false).Where(“UseYn”, true)
.Select(“TableID”, “TableNm”, “FILE_NM”);

이렇게 LINQ 방식으로 쿼리를생성하고

var compiledQuery = _queryFactory.Compiler.Compile(query);

사전에 정의된 DB 메이커에 맞는 쿼리 Compile

await connection.QueryAsync<EXTERNALIFTABLE_Model>(compiledQuery.Sql, compiledQuery.NamedBindings);

쿼리 사용 ? 이때 compiledQuery.Sql 컴파일된 생쿼리가 들어있어 LOG 를 남기거나
디버깅 하기 용이합니다.

SQLKATA+DAPPER 조합이라면 천하무적인것 같군요
다양한 DB와 잦은 스키마 변경에 시달리는 업무라면 도입해도 좋을것 같습니다.

15 Likes

발표를 하고 가장 보람찬 순간이 이런때인 것 같습니다 :grin:
도움이 되셨다니 저도 기분이 좋네요!

7 Likes

뭔가 하시는일이 저랑 비슷한 성격이 많은것 같은데 앞으로 많은 지식 부탁드립니다

2 Likes

많이 사용하는 쿼리부분을 확장메소드를 이용하시면 조금 더 편리합니다.

    await Db.Query<T_GOODS>()
        .Where<T_GOODS>(x => x.Uid, 2000)
        .UpdateAsync(new
        {
            ///생략.
        });
    public static Query Where<T>(this Query q, Expression<Func<T, object?>> column, object values)
    {
        var columnName = GetMemberName(column);
        return q.Where($"{typeof(T).Name}.{columnName}", values);
    }
2 Likes