tacoyaggi 2024. 2. 6. 15:49

Dapper란?

  • Dapper는 데이터베이스에서 스칼라 값을 빠르고 쉽게 검색할 수 있는 간단하고 효과적인 도구다.
  • .NET 개발에서 데이터베이스와의 상호 작용을 단순화하는 ORM 도구다.
  • Dapper는 매우 가볍고 성능이 우수하며 SQL 쿼리와 데이터베이스 결과를 매핑하는데 사용함

ExecuteScaler

  • 하나의 스칼라 값을 반환하는 쿼리에 사용함 (COUNT, MAX, MIN)
var result = connection.ExecuteScaler("SELECT COUNT(*) FROM TACOYAGGI")

  • COUNT 쿼리가 아닌 일반 쿼리 사용하면 어떤 반환 값을 줄까 테스트 해봄, 결과적으로 첫번째 컬럼 첫번째 로우 데이터를 반환해줌

    var result = connection.ExecuteScaler("SELECT * FROM TACOYAGGI")

  • ExecuteScaler<T> 형태도 있는데 <T>가 의미하는건 반환 형태임. <int>면 정수 <string>은 문자열 <Model> 모델형태로 받겠다는 거임

  • ExecuteScaler는 기본적으로 첫번째 컬럼 첫번째 로우를 반환하는데 그게 int 든 string 이든 상관없이 반환해줌 그러므로 <T>는 사용 빈도가 낮아보임

  • 오히려 <int>형태로 지정했는데 데이터가 string 형태이면 에러임

var result = connection.ExecuteScalar<int>(query);


ExecuteScalerAsync

  • ExecuteScaler와 반환 규칙은 동일함
  • 차이점이라고 하면 비동기임. Task, aync, await 키워드를 사용해줘야함
  • ExecuteScalerAsync<T> 마찬가지로 <T> 형태가 있음 개념은 같음
    var result = await connection.ExecuteScalarAsync(query);


QuerySingle

  • 첫번째 로우 전체데이터를 한줄만 반환함
  • 2줄 이상의 로우면 에러
  • 마찬가지로 <T> 형태가 있음
  • QuerySingleOrDefault도 있는데 기본적으로 QuerySingle 이랑 똑같고 값이 없을 경우 null을 반환함
  • 정지되면 안되는 프로세스에서는 OrDefault를 꼭 사용하길 ㅋ

QueryFirst

  • 위에 다뤘던 QuerySingle 이녀석과 반환값은 똑같지만 한가지가 다름
  • 차이점은 이놈은 로우가 여러개여도 예외처리에 걸리지 않고 여러 로우 중 첫번째 로우만 반환해줌
  • QuerySingle 이놈은 로우가 여러개 검색되면 예외처리로 돌려버리는데 QueryFirst 이녀석은 거기서 골라서 가져옴
  • 여기서 부터는 <T>OrDefault에 대해서는 생략함 ㅋ

Query

  • 이녀석은 검색된 로우 전체를 반환해줌
  • 로우가 0이여도 예외처리로 보내지 않음
  • 대신 여러개의 로우를 반환해주기 때문에 반환형식도 배열임

Execute

  • 여태까지 Select에 대해서 알아봤다면 Execute 이녀석은 Update, Insert,, Delete를 담당함
  • 반환값은 int 타입이고 리턴해주는 값도 2가지임 0 과 1
  • 영향을 받은 로우가 있다면 1을 영향을 받은 로우가 없다면 0을 리턴함
  • 즉 1은 성공 , 0은 실패로 보면 되겠다 ㅋ

QueryMultiple

  • 갑자기 Select로 다시 돌아와 버렸다.
  • QueryMultiple 이녀석은 2개 이상의 Select 로우를 반환 시켜줌
  • 즉 A 테이블과 B 테이블이 각각 필요 할 때 한번에 데이터를 가져올 수 있음
  • Read 라는 메서드를 통해 데이터를 가져올 수 있음
      var result =  connection.QueryMultiple(query);
      var result1 = result.Read().ToList();
      var result2 = result.Read<QueryEntity>().ToList();


DynamicParameters

  • 말 그대로 다이나믹 형태의 파라미터임
  • 우리가 쿼리를 작성할 때 필요한 파라미터가 있을텐데 그 부분을 담당함
  • Class 형태이고 Add 메서드를 통해서 "문자열","값" 을 인자로 받음
  • 쿼리에서 @Param 이라는 문자열을 잘라내고 그안에 인자로 받은 값을 넣음
      DynamicParameters param = new DynamicParameters();
      param.Add("@param", "36");
      var result = connection.Query(query,param);