SW 기능/.NET Core
Dapper
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);