simpledata100x100.png

자 이제! CRUD 중에 R을 끝냈으니 나머지 CUD를 해야겠죠.

이 강좌 기다리느라 직접 찾아보신 분들 아시겠지만.. 진짜 별거 아닙니다.

테이블은 전편과 같이 PRODUCTS 로 하겠습니다.

새로운 데이터를 Insert 하는 구문은 어떻게 하나요?

간단합니다. db.[테이블명].Insert() 입니다.

그럼 파라미터는? 당연히 칼럼명입니다. 이렇게 꾸미시면 되겠습니다.

db.PRODUCTS.Insert(

    EMAIL: "test@test.com",

    GDSCD: "T0005",

    GDSFG: "Y",

    GDSNM: "새로운 상품",

    GDSPRI: 49800

)


어때요. 참 쉽죠?

또는 모델 객체를 만들어서 올리는 것도 가능합니다.

Products myins=new Products(){

    EMAIL= "test@test.com",

    GDSCD= "T0005",

    GDSFG= "Y",

    GDSNM= "새로운 상품",

    GDSPRI= 49800

};

db.PRODUCTS.Insert(myins);


심지어는 dynamic 도 가능합니다.

dynamic myins=new ExpandoObject();

myins.EMAIL= "test@test.com";

myins.GDSCD= "T0005";

myins.GDSFG= "Y";

myins.GDSNM= "새로운 상품";

myins.GDSPRI= 49800;

db.PRODUCTS.Insert(myins);


이렇게 하면 이런 식의 질의문이 완성되겠습니다.


INSERT INTO PRODUCTS

(EMAIL, CDSCD, CDSFG, CDSNM, GDSPRI) VALUES

('test@test.com', 'T0005', 'Y', '새로운 상품', 49800)



그럼 업데이트는? Update 메서드를 이용합니다.

파라미터 및 적용방법은 Insert와 오나전 똑같습니다.

단! 주의할 사항. PK는 무조건 조회 대상입니다. 변경 안됩니다.

예를 들어 PK가 GDSCD 일 경우는 GDSCD는 WHERE 절에 들어갑니다.

위와 똑같이 할 경우 질의문은 이런 꼴이 된다는 거죠.


UPDATE PRODUCTS SET

EMAIL='test@test.com',

GDSFG='Y',

GDSNM='새로운 상품',

GDSPRI=49800

WHERE GDSCD='T0005'


그렇다면 특정 조건을 통해 업데이트 하고 싶다면?

이럴 때를 위한 두 개의 메서드가 있습니다.

바로 UpdateBy 와 UpdateAll 입니다.

UpdateBy 는 특정 한 칼럼에 조건을 줘서 업데이트 하고

UpdateAll 은 전체 및 SELECT 조건절을 이용해 필터링한 모든 결과물을 업데이트합니다.

UpdateBy 사용법은 간단합니다.


db.PRODUCTS.UpdateByGDSFG(GDSFG:"Y",EMAIL:"moya@imma.com");



이렇게 하면 GDSFG 를 통한 조건을 통하여 값을 바꾸는 기능이 되겠습니다.

질의문으로 하면 이렇게 됩니다.

UPDATE PRODUCTS SET EMAIL='moya@imma.com' WHERE GDSFG='Y'



참 쉽죠?

만약 모든 행을 업데이트하려면?

db.PRODUCTS.UpdateAll(EMAIL:"moya@imma.com");


그러면 모든 행들의 이메일 주소가 바뀌게 됩니다.

하지만 저렇게 쓸 일은 별로 없죠. 하지만 조건절을 줄 수 있다는 강력함이 있습니다.

첫번째 매개변수에 조건절을 주시면 됩니다. 참 쉽죠?

db.PRODUCTS.UpdateAll(db.PRODUCTS.GDSPRI > 29800, EMAIL:"moya@imma.com");


이렇게 하시면 29800원 초과하는 상품에 대하여 이메일을 업데이트 한다고 보심 되겠습니다.

이렇게요.

UPDATE PRODUCTS SET EMAIL='moya@imma.com' WHERE GDSPRI > 29800



마지막으로 지우는 기능이 남았습니다.

DELETE 는 WHERE 절이 들어가니 뭐.. 라고는 하지만 그대로 다양한 조건이 지원되야 하죠.

간단하게 먼저 가봅시다.

db.PRODUCTS.Delete(GDSCD:"T0003");


이렇게 하면 PK인 GDSCD 가 T0003 인 행 하나를 삭제하는 것이 되겠습니다.

이런 식으로.

DELETE FROM PRODUCTS WHERE GDSCD='T0003'


그렇다고 해서 PK가 아니어도 됩니다.

db.PRODUCTS.Delete(EMAIL:"moya@imma.com");


이렇게 하면 이메일이 moya@imma.com 으로 되있는 모든 행이 삭제되시겠습니다.

DELETE FROM PRODUCTS WHERE EMAIL='moya@imma.com'


좀 더 다양한 조건을 주고 싶은 분들을 위하여 DeleteAll 메서드도 있습니다.

사용법은 UpdateAll과 동일하지만 대신 바꾸거나 추가할 값이 없죠.

db.PRODUCTS.DeleteAll(db.PRODUCTS.GDSPRI < 9900);


이렇게 하시면 가격이 9900원 미만의 상품을 제거하는 질의문

DELETE FROM PRODUCTS WHERE GDSPRI < 9900


이 완성되겠습니다.

만약 다 지워버리고 싶다면. 위험하겠지만! 인자 하나도 없으면 다지우는겁니다.

db.PRODUCTS.DeleteAll();


이것으로 Simple.Data 로 CRUD에 날개를 달아봤습니다.

어떤가요? 객체 지향이라 보기도 좋지 않습니까?

거기다가 dynamic 이라 구문 문제 없이 작성할 수 있는 이 향연이 맘에 들지 않습니까?

그렇다면 1탄에서 얼렁 받아서 자신의 프로젝트에 적용해 보세요.


아차차차.. 아직 한계가 있다고 했죠. 예를 들어 MSSQL 의 CTE 라던가 Oracle 의 Connect By 등등 특정화되거나 고급 쿼리는 아직 지원되지 않아서 이런 질의문이 필요한 분들에게는 이 프로젝트는 그닥일 거라 생각하시는 분들 많으실겁니다.

하지만 그럴 걱정 마세요. Simple.Data 가 이럴 줄 알고 2가지 기능을 겸비하고 있거든요.


바로 프로시저 호출과 트랜잭션입니다.

어떻게 쓰냐구요? 프로시저 호출! 어렵지! 않↘아↗요~


자 프로시저를 예로 들어보겠습니다.

CREATE PROC MYPROCNOPARAM AS

SELECT * FROM PRODUCTS


이렇게 매개변수 없는 간단한 프로시저를 호출하려면?

db.MYPROCNOPARAM()


끝. 드럽게 쉽죠?

그렇다면 매개변수 있는 경우는?

CREATE PROC MYPROCPARAMS

@MYSTR VARCHAR(100),

@MYINT INT AS

SELECT * PRODUCTS WHERE EMAIL=@MYSTR AND GDSPRI > @MYINT


이렇게 매개변수 있는 프로시저를 호출한다면?

db.MYPROCPARAMS("test@test.com",29800)


이렇게 매개변수 정의한 순서대로 부르시거나,

db.MYPROCPARAMS(MYINT:29800,MYSTR:"test@test.com");


이렇게 매개변수를 정의해서 순서를 원하는대로 정한 다음 호출하면 되겠습니다.


어때요. 참 쉽죠?


다음은 트랜잭션!

트랜잭션도 어렵지! 않↘아↗요~


using 문으로 감싸서 처리만 하면 트랜잭션 완성!

using(var mytran=db.BeginTransaction()){

    mytran.PRODUCTS.Insert(EMAIL:"test@test.com",GDSCD:"T0009",GDSNM:"넣고싶은상품",GDSPRI:9900);

    mytran.Commit();//성공시 커밋!

}



여기까지 따라오느라 정말 수고 많으셨습니다.

이제 Simple.Data 로 CRUD 하기. 확실하게 배웠죠?

지금도 이 프로젝트는 현재진행형이며, 제가 강좌하고 있는 사이 모르는 부분이 개선될 수도 있습니다.

고급 구문과 특정 DB Provider 에 대한 지원, 그리고 확장성 등등을 고려한다면 부족한 면이 있지만,

그 부족한 면은 함께 참여해서 개선할 수 있습니다. 참여하고 싶으시면 https://github.com/markrendle/Simple.Data


Simple.Data 강좌를 마치겠습니다. 함께해주신 여러분들 고맙습니다.


-끝-





profile
20대 언제나 쿨한 개발(犬足)자.