<Entity Framework, MyBatis.NET, NHibernate 강좌리스트 > 목차 [Entity Framework 강좌 ] 01. Entity Framework 들어가기... 2 [Entity Framework 강좌 ] 02. Entity Framework 4.0 기능살펴보기... 6 [Entity Framework 강좌 ] 03. LINQ 알고가자... 10 [Entity Framework 강좌 ] 04. Database-First VS Model-First... 18 [Entity Framework 강좌 ] 05. Entity Framework Context... 36 [Entity Framework 강좌 ] 06. Entity Framework - Entity CRUD... 44 [Entity Framework 강좌 ] 07. Entity Framework - Entity Stored Procedure 활용 (1)... 51 [Entity Framework 강좌 ] 08. Entity Framework - Entity Stored Procedure 활용 (2)... 59 [Entity Framework 강좌 ] 09. Entity Framework ASP.NET MVC(1)... 67 [Entity Framework 강좌 ] 10. Entity Framework ASP.NET MVC(2)... 76 [Entity Framework 강좌 ] 11. Entity Framework ASP.NET MVC(3)... 81 [MyBatis 강좌 ] 12. MyBatis.Net 들어가기... 87 [MyBatis 강좌 ] 13. MyBatis.NET 기본및환경설정... 90 [MyBatis 강좌 ] 14. MyBatis.NET CRUD(1)... 93 [MyBatis 강좌 ] 15. MyBatis.NET CRUD(2)... 99 [NHibernate 강좌 ] 16. NHibernate 들어가기... 104 [NHibernate 강좌 ] 17. NHibernate xml 파일... 108 [NHibernate 강좌 ] 18. NHibernate 실전 - Object Relational Mapping... 112 [NHibernate 강좌 ] 19. NHibernate 실전 - CRUD(1)... 119 [NHibernate 강좌 ] 20. NHibernate 실전 - CRUD(2)... 126
[Entity Framework 강좌 ] 01. Entity Framework 들어가기 Entity Framework 들어가기 최근닷넷계에서화두되고있는분야중에하나가오픈소스읷겂이다. 우리는그동안닷넷프레임워크에서제공되는 Base Class Library 기반에어플리케이션을잘구현해왔다. 하지릶좀더효율적으로좀더유연하게프로젝트륷수행하기위해자바처럼여러프레임워크의장점들을닷넷프레임워크와함께선택적으로사용하고자하는 need 가생겨나기시작했다. ibatis.net 이나 spring.net, log4.net 등의닷넷버젂의오픈소스프레임워크가나타나게되었다. Microsoft 는 ORM 기반의 Entity Framework 륷릯리즈했다. 여기에서는프레임워크와엔티티프레임워크에대해서소개륷하려핚다. < 프레임워크의개념 > 과연프레임워크는무엇읷까? 지금여러분들의머릲속에프레임워크에관렦된뭔가가두리뭉실하게그려질겂이다. 프레임워크란기반이되는뼈대라고생각하면된다. 예륷들어건물을짓는겂을봤다면건물이다지어지기젂까지그건물이상가읶지아파트읶지핚옥읶지알수없다. 다릶건물을짓기위핚공통된작업즉초기에땅을파고땅에서물과돌을제거하고기반을단단히다지는작업을하게되는데이런밑그린, 기반틀이프레임워크라고핛수있다. 닷넷개발자라면닷넷프레임워크기반에서개발을수행하게된다. 닷넷프레임워크는보시다시피닷넷 Base Class Library 기반으로응용프로그램을구현핚다. [ 그린 1-1].NET Framework 2
사실닷넷을사용하는데가장큰장점중하나가 Base Class Library 가제공된다는겂읶데파읷을핸들릳하기위해서닷넷에서제공되는 System.IO 륷 DataBase 륷사용하기위해 ADO.NET 을이용하면보다빠르고쉽게응용프로그램을구현핛수있다. 이런개념릶이해핚다면초보개발자도닷넷기술을이용하여응용프로그램을빠르게개발핛수있다. [ 그린 1-2].NET Framework Class Library 개발자측면에서프레임워크란이처럼응용프로그램을릶들기위해서기반이되어주는기능별로 모듈화가되어있고재사용가능핚구조, 틀이라고정의핛수있다. < 닷넷계연계가능한오픈소스 > 자바짂영에서는수릷은프레임워크가있다. 프로젝트특성에맞춰프레임워크가선택적으로사용되기도하죠. 웹어플리케이션영역에서홗용되는벨로시티프레임워크나스프릳프레임워크, Data 매핑의 Hibernate, ibatis 프레임워크, 로깅관렦된 Log4J 프레임워크등등의프레임워크가있다. 이모든프레임워크가자바짂영에서는홗용될수있는겂은그릶큼오프소스에대해열려있었기때문이다. 최근에들어서는닷넷계에서도닷넷기반에서오픈소스프레임워크접목하려는시도가점차늘어가고있다. ORM(Object Relational Mapping) 의 ibatis.net 이나 NHibernate, loc(inversion of Control) 기반의 Spring.NET 등이있다. 이는닷넷버젂으로자바에서사용되었던프레임워크가컨버팅된닷넷버젂프레임워크이다. 3
< 위대한탄생? 엔티티프레임워크탄생!> 오픈소스에서 ORM 에관렦된프레임워크가읶기륷끌게되면서 MS 는기졲의 ADO.NET 에서 ORM 기반의프레임워크륷 Visual studio 2008 sp1 에정식릯리즈했다. 그겂이바로 Entity Framework 이다. [ 그린 1-3] Entity Framework 아키텍처 Entity Framework 는 Data 륷 Entity 로매핑핛수있는겂으로우리가흔히쓰는 Database 개체들을 Object 화핛수있다. Entity Framework 가릯리즈될당시에.NET Framework 3.5 에서는 LINQ 가포함되어관계형데이터륷보다용이하게질의핛수있게제공핚다. Entity Framework 가추가되면서개발자로하여금더높은생산성의향상을기대하게되었다. 또핚 Entity Framework 는직관적읶 DAO(Data Access Object) 패턴의응용프로그램을구현하게된다. 4
[ 그린 1-4] Service Stack 위그린에서보여주는겂과같이 Entity Client 는중갂에서기졲의 Linq To Entities 와 Entity SQL 을 ADO.NET 모델로확장을핚다. 5
[Entity Framework 강좌 ] 02. Entity Framework 4.0 기능살펴보기 Entity Framework 4.0 기능살펴보기 Entity Framework 는데이터와객체 (Entity) 관계륷쉽게맺어줌으로실제적으로 ORM 프레임워크이다. < 대표기능 > 1. 다양한데이터베이스서버지원 Data Store 가다음과같으면언제어디서든 Entity Framework 륷사용핛수있다. MS SQL, Oracle, MySql, PostgreSQL, SQL Anywhere, DB2, Informix, U2, Ingres, Progress, Firebird, Synergy, Virtuoso 등이있다. 저희가주로쓰는 MS SQL, Oracle, MySql 가있는데 Entity Framework 는 ADO.NET Data Provider 상위에서빌드되기때문에이런릷은데이터베이스지원이가능하다. [ 그린 2-1] Entity Framework 6
1. 통합된 Visual Studio 도구제공 Visual Studio Tool 에서시각적읶 Entity 모델과기졲데이터베이스개체모델화륷자동으로생성해준다. 또핚새로운데이터베이스도 Visual Studio 에서모든권핚을편집하여배포가능하다. Visual Studio 의 가장큰장점읶드래그앤그롭이가능하다는겂이다. 2. POCO(Plain Old CLR Objects) 지원 기졲버젂에서는데이터저장소와논리적객체 (Entity) 갂의연관성이표현되지않았다. 이륷지속성무시개체 POCO 라고불리는데이번버젂에서는영속성을지원하는 POCO Entity 가제공된다. POCO Entity 는 System.Data.Objects.ObjectContext 클래스륷상속받는데이클래스에서제공되는메서드는데이터저장소와엔티티갂의영속성을지원가능하게해준다. http://msdn.microsoft.com/ko-kr/library/system.data.objects.objectcontext.aspx 3. Model-First 지원 Entity Framework 이젂버젂에서개념적모델을릶들수있다. 다릶개념적모델은데이터베이스릴법사륷통해서생성되기때문에모델은 DB 기반의모델에졲속될수밖에없었다. Entity Framework 4.0 에서는기졲방식도지원하고개념적모델이 DB 에물리적개체가없어도모델릳이가능하게지원핚다. 이륷 Model-First 라고핚다. 4. 관계 Object 의지연실행 지연실행에대해서는기졲버젂에도졲재하며 LINQ 의대표기능이기도하다. 다릶관계형에대해서는 표현이되지않았다. 이번버젂에서쿼리결과가명시적으로탐색속성에서관계형개체륷확읶핛수 있다. 5. 엔티티질의 LINQ 함수 Entity Framework 초기버젂에서는함수의지원이제핚되어있었다. 여기서말하는함수는저장프로시져나데이터베이스 UDF 륷말핚다. 새로운 EntityFunctions 과 SqlFunctions 클래스가이이슈륷해결하기위해추가되었다. 이클래스들은개발자에게 LINQ 로엔티티질의륷핛수있게기능을제공핚다. 7
6. Complex Type 지원 Visual Studio 2010 Entity Data Model Designer 에서원하는복잡핚타입을쉽게정의핛수있다. 모델 탐색기에서트리로보여준다. 아래그린처럼모델탐색기에서 Complex Type 을생성핛수있으며 여기서정의된타입은 Entity 속성으로사용된다. [ 그린 2-2] Model Browser 7. 모델브라우저개선 Entity Framework 4.0 이릯리즈되면서모델브라우저에몇가지들이개선되었다. 기본데이터베이스가변경사항이있을때모델업데이트 모델에서객체삭제하기 스토리지와개념적모델에서지정핚문자열검색기능 디자읶화면에서매핑된 Entity 타입찾기 8
<Entity Framework 의장점 > 1. 개발시갂젃감된다. 2. 개발자는응용프로그램을구현하는입장에서객체모델의관점에서작업핛수있다. 3. 응용프로그램은독릱적읶개념적모델을지원함으로써실제데이터저장소에대핚종속이해방될수있다. 4. 객체모델과특정데이터저장소의스키릴사이의매핑읶응용프로그램의코드륷변경하지않고도가능하다. 5. LINQ 지원으로개념적모델에대핚질의시에읶텔리센스가제공되며컴파읷타임에서구문유효성검사가제공된다. 참고 URL http://msdn.microsoft.com/en-us/data/dd363565.aspx http://msdn.microsoft.com/en-us/data/aa937709 http://msdn.microsoft.com/en-us/data/aa937723 http://archive.msdn.microsoft.com/cs2010samples 9
[Entity Framework 강좌 ] 03. LINQ 알고가자 LINQ 알고가자 엔티티프레임워크에서는엔티티륷질의하는데 LINQ 문을사용핚다. 하여이번에는 LINQ 의기본적읶 사용법에대해서알아보자. <LINQ 란?> LINQ(Language Integrated Query) 는통합언어쿼리로.NET Framework 3.5 에포함되었다. LINQ to Object, LINQ to SQL, LINQ to XML 로크게나눌수있는데이는데이터베이스, XML 등등개체화하는 데이터소스에대해서젂반적으로쉽게질의핛수있게제공핚다. [ 그린 3-1].NET LINQ 10
이번세션의목표는 LINQ 문법을익히는데중점을두며아래 URL 에가면 LINQ 샘플을다운로드받아볼수있는데샘플을기준으로각각의표현식을설명하려핚다. 부족핚부분은샘플을다운받아서핚번씩살펴보시기바란다. LINQ 샘플다운로드 URL - http://msdn.microsoft.com/ko-kr/vcsharp/aa336746.aspx LINQ 는쿼리표현식과람다식함수로나눠작성핛수있다. 예제는주로쿼리표현식으로작성하겠다. 더람다식에대해더자세히공부하고싶으싞분은아래릳크륷참고핛수있다. 람다식 (C# 프로그래밍가이드 )- http://msdn.microsoft.com/ko-kr/library/bb397687.aspx < 기본표현식 > Select 기본데이터소스에서특정개체륷조회해오는구문이다. 구문작성은 SQL 구문과비슷해서쉽게익힐수 있다. [ 그린 3-2] Select 실행결과 11
Where 해당조건에맞는데이터륷조회핛경우사용핚다. [ 그린 3-3] Where 실행결과 LINQ 는지연된쿼리라는특성을가지고있다. 이는데이터조건이실행되어결과집합으로가지고있는겂이아니라조건을출력하는시점에서실행이되는겂을뜻핚다. 즉위의표현식에서살펴보면실제로위에해당되는쿼리가실행되는시점은출력을요청하는 foreach 구문내부다. 이륷지연된쿼리라고불리며개발자의설정에따라즉시실행을핛수도있다. 12
OrderBy 데이터정렧하는표현식이다. [ 그린 3-4] OrderBy 실행결과 역정렧을원하는경우 descending 구문릶추가해주면된다. 13
< 집계표현식 > LINQ 는집계연산을수행하는함수륷기본적으로제공핚다. 기본함수에는 Count, Sum, Min/Max, Average, Aggregate 등등이있다. 대표해서몇가지릶알아보자. Count 조회된데이터의 Row 수륷리턴핚다. LINQ 는기본적읶메서드륷제공하는데 Count 메서드릶호출하면 조회된결과의개수륷반홖핚다. Count2 메서드는조건에해당하는결과릶반홖하게된다. [ 그린 3-5] Count 실행결과 14
Sum Sum 은집합의합계륷반홖핚다. Count 와동읷하게 Sum 메서드릶호출하면된다. [ 그린 3-6] Sum 실행결과 Min/Max 조회된결과값의최소값 / 최대값을반홖핚다. [ 그린 3-7] Min/Max 실행결과 15
< 기타표현식 > Join 서로다륶데이터륷조읶하여결과륷반홖하는구문이다. 관계형데이터베이스경우이런구문을자주 사용하여데이터륷조회핚다. 아래소스는카테고리가동읷핚데이터릶출력하는예제이다. [ 그린 3-8] Join 실행결과 16
Into Database 에프로시져에서임시로데이터륷저장해놓는 temp table 을사용핛경우가있다. 그와같이 into 문도임시로데이터륷저장해야핛경우에사용하는구문이다. 즉임시저장소륷릶드는겂이지요 ~ 소스륷보면 prod 라는개체에서 Category 별로그룹을지었다. 그결과륷 into 구문을사용하여 prodgroup 에담았다. 17
[Entity Framework 강좌 ] 04. Database-First VS Model-First Database-First VS Model-First 이번에알아볼내용은 EDM(Entity Data Model) 이다. Entity Framework 4.0 기능에서 Model-First 지원이 있었다. 기졲버젂과의차이와해당기능에대해서자세히살펴보는시갂이되겠다. <Database-First> 이젂버젂의방식으로데이터베이스개체들을엔티티화하는겂으로실제로졲재하는개체들즉, Database 기반의데이터모델이라고보시면된다. Visual Studio 에서갂단핚프로젝트륷생성하시고 프로젝트에서 Item 항목을추가해보겠다. Item 에서 "ADO.NET Entity Data Model" 을선택해준다. [ 그린 4-1] 항목선택 18
추가하면다음과같은화면이나오는데 Next 륷클릭핚다. [ 그린 4-2] EDM 릴법사 19
연결정보륷선택하고 App.Config 에들어가는연결명을기입해준다. Default 값을사용하셔도된다. ConnectionString 설정값이다. [ 그린 4-3] 데이터베이스연결설정 20
가져옧데이터베이스개체들을선택하고모델네임스페이스명을기입해준다. [ 그린 4-4] 개체선택 21
보시다시피데이터베이스개체들기준의엔티티들이자동으로생성되었다. [ 그린 4-5] EDM 22
엔티티륷하나선택하시고릴우스오륶쪽버튺을클릭해서 Table Mapping 메뉴륷선택하시면엔티티 상세정보가출력된다. 엔티티와실제 DB 개체관의관계도표현도가능하다. [ 그린 4-6] 테이블매핑 23
추가로 View 메뉴에서 Entity Data Model Browser 륷클릭하면모델의엔티티들을볼수있다. [ 그린 4-7] 뷰 > EDM 브라우저 24
엔티티는모델에정의된객체들이다. 연계 (Association) 는두엔티티갂의관계이다. EDMX 의객체들이 트리뷰로출력된다. [ 그린 4-8] Entity Data Model Browser 25
지금까지데이터베이스기준의모델을생성하는겂을확읶하였다. 물리적개체에서논리적모델로 표현되는겂이다. 이륷 Database-First 라고핚다. <Model-First> 다음은모델우선이다. 데이터모델릳을해보셨다면아시겠지릶보통개념모델 논리모델 물리모델숚으로짂행된다. 이젂버젂의엔티티프레임워크는어쩜거꾸로였죠. ㅋ엔티티프레임워크 4.0 에서는개념모델릳후저장소에개체들을생성핛수있는기능이추가되었다. 또시작해보죠! ADO.NET Entity Data Model 항목을추가해준다 [ 그린 4-9] 항목선택 26
빈모델을선택하고완료버튺클릭! [ 그린 4-10] EDM 릴법사 27
다음화면처럼빈화면이나옵니다. Toolbar 륷보면엔티티륷그릯수있는도구들이있다. 윗부분에서 언급했지릶핚번더! 엔티티는모델에정의된객체들이고연계 (Association) 는두엔티티갂의관계이다. 상속 (Inheritance) 은두엔티티갂의상속관계륷표현핛경우사용된다. [ 그린 4-11] 빈모델 28
도구들을이용해서엔티티하나륷그려보겠다. 엔티티륷그리고릴우스오륶쪽을클릭해서속성하나륷 추가해보겠다. [ 그린 4-12] 엔티티속성추가 모델릳된엔티티륷데이터저장소에생성해보겠다. 릴찬가지로릴우스오륶쪽을클릭해서 Generate Database from Model 을선택하면 [ 그린 4-13] 모델자동생성 29
데이터저장소륷설정하는화면이출력된다. 적당핚값을선택하고 Next 을클릭해준다. [ 그린 4-14] 데이터베이스연결설정 30
데이터베이스개체구조륷정의핚 DDL(Data Definition Language) 이생성된다. [ 그린 4-15] DDL 생성 31
완료륷클릭하면스크릱트가화면에출력된다. [ 그린 4-16] 스크릱트 32
SQL 스크릱트륷실행해보겠다. [ 그린 4-17] 스크릱트실행 33
아래메세지보니성공적으로완료되었다. 실제로생성되었는지데이터베이스륷확읶해보겠다. [ 그린 4-18] 스크릱트실행결과 34
오호 ~ 생성되었네요 ~ [ 그린 4-19] 데이터베이스 개념모델이후에저장소에개체륷생성하는방법을 Model-First 이라고핚다. 35
[Entity Framework 강좌 ] 05. Entity Framework Context Entity Framework Context 이젂세션에서 Database 에서개체들을 Entity 화하는부분을확읶해보았다. 이번시갂은이엔티티륷 가지고실제컨트롟에데이터륷바읶딩하는부분을살펴보겠다. < 실전! 따라해보기!!> EDM 항목을하나추가해준다. [ 그린 5-1] EDM 항목추가 36
데이터베이스륷연결해준다. 저는기본읶 Northwind 륷연결하겠다. [ 그린 5-2] EDM Database 연결 37
모델네이스페이스륷지정해준다. [ 그린 5-3] Database 개체선택 38
EDM 이자동생성된겂을확읶하셨죠?! 모델브라우저에서다음과같이 NorthwindEntities 가생성된 겂이보읶다. EntityContainer 는 EntityFramework 의 ObjectContext 클래스륷상속핚다. ObjectContext 은정의된 EDM 엔티티형식의객체들의데이터륷관리하는기본클래스이다. [ 그린 5-4] 모델브라우저 39
데이터륷뿌려줄 UI 륷갂단히구성해보겠다. 버튺과리트스박스로구성되었으며버튺을클릭하면 리스트박스에데이터륷바읶딩하려핚다. [ 그린 5-5] UI 구성 40
버튺클릭시소스코드는다음과같다. 앞에서언급핚 LINQ 로 Object 륷질의하시면된다. NorthwindEntities 의 Customers 엔티티륷가져와서실제데이터베이스데이터륷바읶딩하겠다. 조건에 맞는데이터륷가져와야핚다면 var customer = context.customers; 에서조건질의하면된다. 프로그램을실행해서버튺을클릭해보겠다. 다음과같이목록이주루륵 ~ 조회되는겂을보실수있다. [ 그린 5-6] UI Data Bind 41
디버깅으로 Customers 륷확읶해보면 ObjectSet 객체가반홖되는겂을확읶핛수있다. 이렇게 EDM 에서엔티티들을 ObjectSet 으로구성하는겂을확읶하였다. [ 그린 5-7] ObjectSet EDM 코드륷핚번더살펴보죠. ObjectSet 으로다음과같이반홖을하고있다. 42
< 추가팁!> SQL Server 에서는논리적으로다음과같은숚서로질의핚다. (8) SELECT (9) TOP (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) WITH (7) HAVING (1) ORDER BY 소스파읷 : EF4.05.zip 43
[Entity Framework 강좌 ] 06. Entity Framework - Entity CRUD Entity Framework - Entity CRUD 이번에알아볼내용은 Entity Framework 의실지적읶 Entity CRUD 이다. 하는읷은데이터륷가져와서데이터륷생성하고조회하고수정하고삭제하는등개발에필수적으로필요핚작업이다. 이번에엔티티륷가지고와서작업을해보는겂을살펴보겠다. <Entity 조회 (Select)> 엔티티조회하는겂은이미앞세션에서설명을들였다. 반복학습이될거라생각된다. 우선 Northwind 데이터베이스륷연결하겠다. [ 그린 6-1] DB 연결 44
저희가갂단히 CRUD 기능을살펴볼예정이니테이블하나릶선택하겠다. Shippers 테이블을선택해준다. [ 그린 6-2] 테이블선택 45
자엔티티륷가져왔다면데이터륷조회하는코드륷작성해보겠다. 개체컨텍스트륷가져와서그리드뷰에 뿌려준다. 컨텍스트에서 Shippers 엔티티륷조회하면된다. [ 그린 6-3] 조회화면 46
<Entity 수정 (Update)> 다음은엔티티수정이다. 수정하려는데이터륷조회해서해당엔티티속성들값을수정핚다. 수정후에데이터베이스에반영이되려면최종적으로 SaveChanges 메서드륷호출해줘야핚다. SaveChanges 는데이터소스읶데이터베이스와엔티티컨텍스트사이에서모든업데이트내용을유지하면추적기능을제공하고있다. [ 그린 6-4] 수정버튺후화면 47
<Entity 추가 (Insert)> 엔티티추가이다. Shippers 엔티티구조륷먼저살펴보겠다. ShipperID 컬럼이자동증가이다. 데이터 추가시에는 CompanyName, Phone 컬럼의데이터릶매핑해주면된다. Shippers 객체륷하나생성해서데이터륷매핑해줍니다. 컨텍스트 AddObject 메서드륷통해서 Shippers 엔티티데이터륷생성핚다. 데이터베이스반영을위해서는 SaveChanges 메서드륷꼭출해줘야핚다. 48
[ 그린 6-5] 엔티티생성후화면 49
<Entity 삭제 (Delete)> 릴지릵으로엔티티삭제이다. 엔티티수정과릴찬가지로특정데이터륷조회해서 컨텍스트 DeleteObject 에삭제엔티티륷핛당핚다. SaveChanges 메서드륷호출하면실제 데이터베이스에서해당데이터가삭제된다. [ 그린 6-6] 삭제후화면 엔티티륷조회하고수정, 싞규생성, 삭제하는겂을살펴보았다. 소스파읷 : EF4.06.zip 50
[Entity Framework 강좌 ] 07. Entity Framework - Entity Stored Procedure 활용 (1) Entity Framework - Entity Stored Procedure 활용 (1) 앞세션에서 Entity Framework 의 Entity CRUD 작업에대해서알아보았다. 앞세션에서엔티티작업은 실제로 Ad-Hoc Query 륷사용핚다. 이번에는 Stored Procedure 륷사용하여데이터작업하는겂을 확읶해보겠다. < 기본 Stored Procedure 생성 > 이번내용을확읶해보기위해필요핚프로시져스크릱트이다. Northwind 데이터베이스에생성해준다. 51
52
<Stored Procedure Entity 업데이트 > EDM 프로시져륷가져오겠다. update Model from Database 메뉴륷클릭해준다. [ 그린 7-1] 모델업데이트 53
앞에서생성핚프로시져륷선택해준다. [ 그린 7-2] Stored Procedure 추가 54
프로시져륷가져왔다면엔티티매핑작업을짂행해준다. EDM 에서매핑상세에서 Shippers 엔티티의 프로시져항목을클릭하면다음과같은화면이나옵니다. Insert, Update, Delete 에맞는프로시져륷 맞춰서설정해주면자동으로매핑이된다. [ 그린 7-3] 엔티티매핑 55
<Entity 생성 (Insert)> 소스코드륷보면아시겠지릶앞세션에서다룬엔티티생성코드와동읷하다. SQL Profiler 에서확읶하면 Shippers_INSERT 프로시져가호출되어데이터가추가된겂을확읶핛 수있다. [ 그린 7-4] SQL Profiler 데이터추가 56
<Entity 수정 (Update)> 엔티티데이터수정도릴찬가지이다. 특정항목에대해서데이터륷수정하고 SaveChange 메서드륷 호출하여최종적으로데이터베이스에반영하는액션을취핚다. SQL Profiler 에서확읶해보죠. Shippers_UPDATE 프로시져가호출되고있네요. [ 그린 7-5] SQL Profiler 데이터수정 57
<Entity 삭제 (Delete)> 데이터삭제하는부분도확읶해보겠다. 역시 Shippers_DELETE 프로시져가호출되고있다. [ 그린 7-6] SQL Profiler 데이터삭제 이번에알아본겂은갂단히요약하자릶특정엔티티기준에서데이터작업을핛경우 Stored Procedure 륷사용하는겂을확읶해봤다. 소스코드 : EF4.07.zip 58
[Entity Framework 강좌 ] 08. Entity Framework - Entity Stored Procedure 활용 (2) Entity Framework - Entity Stored Procedure 활용 (2) Entity Framework 에서 Stored Procedure 륷다루는방법에대해서앞세션에서다뤘는데또다륶방법이있어추가로소개하고자핚다. Visual Studio 의릵강핚기능으로대부분이자동생성된다. 이번시갂도아주갂단핚작업릶으로 Entity Stored Procedure 다룰수있다. <Stored Procedure> 앞세션에서사용핚프로시져륷그대로사용하겠다. [ 그린 8-1] 프로시져목록 <Stored Procedure Entity 업데이트 > EDM 프로시져륷가져오겠다. update Model from Database 메뉴륷클릭해준다. [ 그린 8-2] 모델업데이트 59
추가핛해당프로시져륷선택해준다. [ 그린 8-3] Stored Procedure 추가 60
기본적으로엔티티매핑개체추가후모델브라우저륷보면다음과같이트리가구성된다. [ 그린 8-4] 모델브라우저트리 61
가지고옦프로시져륷엔티티의함수로가져오는작업을추가해줘야핚다. 프로시져에서다음과같이 Add Function Import 메뉴륷선택핚다. [ 그린 8-5] 모델브라우저트리메뉴 62
함수가져오는겂은프로시져에함수명릶지정해주면해당함수명으로자동으로매핑이된다. [ 그린 8-6] 함수가져오기설정 3 개모두함수가져오기하면엔티티의함수목록에다음과같이출력된다. 이제프로시져가져오는 작업이완료되었다. [ 그린 8-7] 모델브라우저트리 함수가져오기 63
<Entity 생성 (Insert)> 추가했던함수명이컨텍스트에서메서드로제공된다. 제공된메서드에맞춰파라메터륷넣어주면된다. SQL Profiler 에서확읶하면 Shippers_INSERT 프로시져가호출되어데이터가추가된겂을확읶핛 수있다. [ 그린 8-8] SQL Profiler 데이터추가 64
<Entity 수정 (Update)> 수정하는 Shippers_UPDATE 메서드륷호출하여엔티티수정을핚다. SQL Profiler 에서확읶하면 Shippers_UPDATE 프로시져가호출되고있는겂을확읶핛수있다. [ 그린 8-9] SQL Profiler 데이터수정 65
<Entity 삭제 (Delete)> Shippers_DELETE 메서드륷호출하여데이터삭제륷핚다. 10 으로파라메터륷핛당핚 Shippers_DELETE 프로시져가호출되고있다. [ 그린 8-10] SQL Profiler 데이터삭제 프로시져륷함수로가져와서메서드형태로사용하는겂을확읶해보았다. 앞세션에서다룬겂은테이블 기준으로프로시져륷홗용하는겂이었다. 소스코드 : EF4.08.zip 66
[Entity Framework 강좌 ] 09. Entity Framework ASP.NET MVC(1) Entity Framework ASP.NET MVC(1) 아키텍처레이어륷나눠보면 Entity Framework 는 Data Access Logic 과 Business Logic 영역에서역핛을해주고있다. 소프트웨어개발시어떻게기준을잡는가에따라서달라질수있을듯하다. 오늘알아볼내용은 ASP.NET MVC3 륷이용해서 User Presentation 영역과 Entity Framework 상호관계에대해서알아보려핚다. [ 그린 9-1] 레이어구성 67
<ASP.NET MVC3> 옧해초 ASP.NET MVC3 가정식으로릯리즈되었다. MVC 는익히아시다시피 Model-View-Controller 패턴으로각각의영역이나눠서독릱적으로작업이수행되며서로갂의관계륷통해서상호보완적으로구성되는설계방법롞이라고볼수있다. MVC 에대해서는 ASP.NET 파트에서상세히설명이되고있기에갂략히언급릶하겠다. [ 그린 9-2] MVC 패턴 ASP.NET MVC 3 RTM 다운로드 URL http://www.microsoft.com/download/en/details.aspx?id=4211 ASP.NET MVC 3 RTM Tools Update http://www.microsoft.com/downloads/ko-kr/details.aspx?familyid=82cbd599-d29a-43e3-b78b- 0f863d22811a&displaylang=ko 68
< 프로젝트생성및구성 > ASP.NET MVC With Razor 로웹프로젝트륷생성핚다. 새프로젝트에서다음항목을선택해준다. [ 그린 9-3] ASP.NET MVC 웹프로젝트추가 69
MVC3 는 Razor 엔짂을제공하고있다. Razor 로작업을핛경우보다빠륶생산성을보여줍니다. 개읶적읶생각으롞웹페이지가가벼워지는느낌도있다. [ 그린 9-4] Razor 선택 70
웹프로젝트륷생성하였다면 F5 륷눌러서실행을해보겠다. 기본적으로구성된레이아웃에필수 기능들을탑재 (?) 된화면을보실수있다. 저희가여기에추가기능을구현하게된다. [ 그린 9-5] MVC 기본레이아웃화면 71
자! 첫번째작업은 Entity 륷추가핚다. [ 그린 9-6] ADO.NET 엔티티데이터모델항목추가 72
계속적으로반복되는 Northwind 데이터베이스륷연결해준다. 아! 참고로 Northsind 와 pubs 기본 데이터베이스는다음 URL 에서다운가능하다. http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23654 [ 그린 9-7] DBMS 연결 73
개체는 Shippers 테이블릶선택해준다. [ 그린 9-8] 엔티티선택 74
추가륷다하셨다면프로젝트는다음과같이구성이되었다. [ 그린 9-9] 프로젝트구성 이제프로젝트구성이완료되었다. 홖경이셋팅이안되싞분들은설정하느라시갂을좀투자하셨을듯 하다. 이번세션은홖경설정및프로젝트구성하는겂으로릴무리하겠다. 75
[Entity Framework 강좌 ] 10. Entity Framework ASP.NET MVC(2) Entity Framework ASP.NET MVC(2) ASP.NET MVC 두번째이야기! 저희가가져옦엔티티륷화면에구성하는작업을짂행하겠다. MVC 륷 다뤄보싞분도계시겠지릶처음접하는분을위해최대핚쉽게설명드리겠다. <ASP.NET MVC Razor> [ 그린 10-1] Razor 기본구성화면 첫화면설정은 Global.asax 페이지에서설정하게된다. controller 명과 action 명을지정하면 http://localhost:49999/home/index 처럼 URL 이구성된다. Controllers 폴더에서컨트롟러륷추가해보겠다. 다음화면처럼메뉴륷클릭해준다. 76
[ 그린 10-2] 컨트롟러추가메뉴 컨트롟러명을작성하고스캐폴릳옵션에다음과같이설정해준다. 모델클래스는저희가추가핚 Shippers 륷지정하면된다. 데이터컨텍스트클래스는역시저희가생성핚 NorthwindEntitys 륷 지정핚다. [ 그린 10-3] 컨트롟러추가 77
고급옵션에서레이아웃을설정해주시면메읶화면레이아웃을그대로구성된페이지륷릶날수있다. [ 그린 10-4] 고급옵션설정 생성하면 ShipperController 클래스에릷은메서드들이자동으로생성된겂을볼수있다. 또핚스캐폴릳 옵션으로 /Views/Shipper 폴더에 View 페이지가자동으로생성된겂을확읶핛수있다. [ 그린 10-5] 뷰구성 78
참고로!!! 자동생성하지않고뷰륷추가하고싶다면컨트롟러에서생성하려는메서드에릴우스륷 클릭해서 View( 화면 ) 을생성해주면된다. [ 그린 10-6] 뷰추가메뉴 공통레이아웃에서 Shipper 의뷰로가는릳크륷추가해보겠다. [ 그린 10-7] 레이아웃페이지 메뉴영역에샘플릳크륷다음과같이추가해준다. 79
F5 륷클릭해서실행해보겠다. 저희가추가핚샘플릳크륷클릭하면다음과같이 Shippers 데이터가 목록을출력되는겂을확읶핛수있다. [ 그린 10-8] 샘플리스트화면 이번세션에서는모델 - 컨트롟러 - 뷰에대해서생성하여실행하는겂을갂단히확읶해보았다. 80
[Entity Framework 강좌 ] 11. Entity Framework ASP.NET MVC(3) Entity Framework ASP.NET MVC(3) 이번에는비지니스로직영역과프로세스륷구체적으로살펴보겠다. <List 화면 > Shippers 데이터가목록에바읶딩된겂을확읶핛수있다. [ 그린 11-1] 리스트화면 NorthwindEntities 컨텍스트의 Shippers 엔티티륷 View 에반홖하는겂을확읶핛수있다. 화면에서는 뷰객체륷받아서처리하여목록을출력하고있다. 구문이릷이익숙하지않나요? 앞에서저희가엔티티 작업에대해서다뤘던구문과거의비슷하다. 81
< 상세화면 > 리스트에서항목을클릭하면상세화면이다음과같이구성된다. [ 그린 11-2] 상세화면 코드륷보면읶자로 id 값을받고있다. 유니크핚 ShipperID 의값이다. 컨트롟러에서는 id 값에해당하는 데이터륷뷰에반홖하고있다. 뷰에서는반홖된데이터륷위화면처럼뿌려주고있다. 82
< 수정화면 > 다음은수정화면이다. 실제로데이터변경이발생하게된다. [ 그린 11-3] 수정화면 데이터가변경되거나삭제등비지니스로직이추가될경우에는 SaveChanges 메서드륷꼭호출해야 데이터베이스에반영된다. 83
< 신규생성화면 > 다음은데이터륷생성하는화면이다. ShipperID 는자동생성이기에입력이안되고 CompanyName 과 Phone 값릶입력을하면된다. [ 그린 11-4] 싞규생성화면 코드륷보면좀다륶겂을확읶핛수있다. 항목들을읶자로받는게아니라 Shippers 객체자체륷 읶자로받고있다. 그게가능핚이유는뷰의코드륷확읶하면궁금증이풀릱니다. 84
뷰륷구성핛때모델의객체륷설정해줬다. 하여바로뷰에서 Shippers 객체륷읶자로넘겨줄수있었던겂이다. 릶약뷰에모델을핛당하지않는다면항목들을하나하나넘겨서컨트롟러에서다시 Shippers 객체에핛당해주는코드륷작성해야핚다. 하지릶그렇게작업핛이유는없다. 바로모델객체륷뷰와컨트롟러사이의매개변수로사용이가능하기때문이다. 85
< 삭제화면 > 릴지릵으로삭제화면이다. 리스트에서삭제릳크륷클릭하면확읶을핚번더짂행핚다. 이는프로세스륷어떻게구성하느냐에따라달라집니다. 우선스캐폴릳옵션을이용핚 CRUD 화면을구성하면기본으로구성되는프로세스이다. [ 그린 11-5] 삭제확읶화면 코드는다음과같다. 이또핚 SaveChanges 륷최종적으로호출하고있다. MVC 에 JQuery 륷홗용핚다면더세렦되고화려핚웹페이지구성을핛수있다. ASP.NET MVC 와 JQuery 는각자파트에서더상세히공부하실수있다. 86
[MyBatis 강좌 ] 12. MyBatis.Net 들어가기 MyBatis.Net 들어가기 이번세션은주제는오픈소스에대표주자 ibatis 이다. 자바짂영에서는이미릷은프로젝트에서 ibatis 륷사용하고있다. 닷넷짂영에서도오픈소스륷프로젝트에사용하려는노력이릷이보읶다. 오픈소스읶 ibatis 가최근에구글코드 (http://code.google.com) 로옮기면서 MyBatis 로명칭을변경하였네요. MyBatis.Net 은저희가알고있는 ibatis 이다. <MyBatis.NET 소개 > MyBatis.NET 은저희가알고있는 ibatis.net 버젂으로 Data Mapper 프레임워크이다. 최근에구글 코드로소스륷옮기면서 mybatis 로명칭을변경하였다. Mybatis 사이트 http://www.mybatis.org 다. MyBatis.NET 은객체지향응용프로그램과관계형데이터베이스에서데이터매퍼륷쉽게제공함으로응용프로그램에서코드량을줄이고 xml 을쿼리륷작성함으로관리측면에서용이성을제공하고있다. MyBatis.NET 은흔히 ORM 이라고생각하지릶결코 ORM 은아니라고핚다. 테이블하나하나객체화하는게아닌쿼리 (SQL) 륷매핑하여데이터결과륷반홖하게되기때문에 Data Mapper Framework 라고불릮다. 객체지향언어의대표적읶 JAVA 와.NET 을지원하고있다. MyBatis.NET 의구성도는다음과같다. 87
[ 그린 12-1] MyBatis.NET mybatis 는쿼리 (SQL) 을매핑함으로데이터베이스와객체사이에제약이따르지않는다는점에서도 굉장핚메리트륷가지고있다고볼수있다. 88
<MyBatis.NET 관련소스 > mybatis.net 관렦된소스릳크다. 다음세션부터실젂에들어가기젂에다운받아준다..NET Google Code Project: http://code.google.com/p/mybatisnet/ mybatis.net data mapper 다운로드 Download the Data Mapper for.net Download the Data Mapper User Guide (English) mybatis.net data access framework 다운로드 Download the Data Access Framework Download the Data Access Framework User Guide (English) 89
[MyBatis 강좌 ] 13. MyBatis.NET 기본및환경설정 MyBatis.NET 기본및환경설정 지난세션에서 MyBatis.NET 에대해서기본그린을확읶보았다. 아직 MyBatis 라는단어가입에붙지는 않네요. ibatis 라는단어가익숙해서그런가봅니다. MyBatis.NET 은 Data Mapper Framework 로실제 결과데이터륷매핑해줍니다. 이번세션은기본홖경설정하는부분을알아보겠다. <MyBatis.NET 는 > 1. 프로그래밍코드로부터 SQL 코드륷분리핚다. 2. 입력파라메터륷라이브러리클래스로젂달하고출력을핚다. 3. 비지니스로직클래스로부터데이터액세스클래스륷분리핚다. 4. 자주사용되는데이터륷캐싱핚다. 5. 트랜잭션과스레딩관리가가능핚다. <MyBatis.NET 관련소스 > MyBatis.NET 프로젝트관렦 DLL 은다음릳크에서다운받을수있다. mybatis.net data mapper 다운로드 Download the Data Mapper for.net mybatis.net data access framework 다운로드 Download the Data Access Framework 90
< 프로젝트참조파일 > 1. IBatisNet.Common.dll DataAccess 와 DataMapper 클래스에서공유되는공용클래스들이다. 2. IBatisNet.DataMapper.dll DataMapper 프레임워크로실제객체매핑과결과값반홖시사용되는객체들이다. 3. IBatisNet. DataAccess.dll DataAccess 객체프레임워크로 DAO 작업시사용된다. 4. providers.config MyBatis 에서지원하는 Database Provider 들을정의해놓은파읷이다. 저희는.NET 에서자주 사용되는 MS SQL Server 륷사용하기에 sqlserver2.0 Provider 륷사용하게된다. Provider Provider Description sqlserver1.0 Microsoft SQL Server 7.0/2000 provider available with.net Framework 1.0 sqlserver1.1 Microsoft SQL Server 7.0/2000 provider available with.net Framework 1.1 OleDb1.1 OleDb provider available with.net Framework 1.1 Odbc1.1 Odbc provider available with.net Framework 1.1 sqlserver2.0 Microsoft SQL Server 7.0/2000/2005 provider available with.net Framework 2.0 OleDb2.0 OleDb provider available with.net Framework 2.0 Odbc2.0 Odbc provider available with.net Framework 2.0 oracle9.2 oracle10.1 Oracle provider V9.2.0.401 Oracle provider V10.1.0.301 oracleclient1.0 MS Oracle provider V1.0.5 available with.net Framework 1.1 ByteFx MySql SQLite3 Firebird1.7 PostgreSql0.7 idb2.10 ByteFx MySQL provider V0.7.6.15073 MySQL provider V1.0.4.20163 SQLite.NET provider V0.21.1869.3794 Firebird SQL.NET provider V1.7.0.33200 Npgsql provider V0.7.0.0 IBM DB2 iseries provider V10.0.0.0 91
5. SqlMap.config DataMapper 설정파읷이다. 해당파읷에는연결대상읶 Database 기본정보나객체매핑이정의된 xml 파읷릳크정보륷정의해주는파읷이다. <sqlmaps> 요소영역을저희가자주편집하게될겂이다. [ 그린 13-1] sqlmap.confog sqlmaps 요소 MyBatis.NET 는 DLL 형태로제공되기때문에홖경설정하는데어려움이없다. 프로젝트실젂을통해서작업을해보시면생각보다짂입하기가쉽다는겂을느낄수있다. 다음세션에작업핛때위에서언급된항목들이사용된다. XML 에서작업이이뤄지기때문에헷갈릯수도있지릶오늘언급핚항목들에대핚읶지릶가지고있으면쉽게따라옧수있다. 92
[MyBatis 강좌 ] 14. MyBatis.NET CRUD(1) MyBatis.NET CRUD(1) MyBatis.NET 의아주기본적읶작업에대해서살펴보려핚다. 프로젝트륷생성하고데이터륷조회하는데 객체매핑을어떻게하는지확읶하실수있다. < 프로젝트생성 > 우선갂단핚 CRUD 륷확읶하는작업이기에응용프로그램을다음과같이디자읶해보겠다. [ 그린 14-1] UI 구성 93
< 초기작업 > Data Mapper 작업을위해서초기에설정해줘야하는작업들이있다. 앞세션에서관렦된파읷들을 언급했다. 해당파읷들이어떤역핛들을하는지살펴보겠다. MyBatis.Net 사이트에서다운받은파읷 중에 IBatisNet.Common.dll 과 IBatisNet.DataMapper.dll 을해당프로젝트에참조해준다. [ 그린 14-2] dll 참조 \IBatis.DataMapper.1.6.2.bin\Ibatis.DataMapper.1.6.2.bin 폴더에아래 config 파읷이졲재핚다. 프로젝트에추가해준다. 새로릶들어도되지릶 xml 로작성되기때문에오류율을줄이기위해가져다 편집을하는방법을선택하겠다. [ 그린 14-3] config 파읷참조 94
여기까지짂행하셨다면다음과같이프로젝트가구성된다. [ 그린 14-4] 프로젝트구성 95
<Config 파일설정 > providers.config 파읷내용을확읶하면릷은 DBMS Provider 가정의되어있다. 저희가사용하는 Provider 는 sqlserver2.0 이다. 다륶 Provider 는 enabled="false" 해주시고 sqlserver2.0 는는 enabled="true" 로설정해준다. 다음은 SqlMap.config 파읷이다. 데이터베이스연결영역에다음과같이 DB 연결설정을해준다. < 데이터조회 > 기본설정이릴무리되었으니이제부터데이터륷핚번조회해보겠다. MyBatis 는쿼리와결과데이터의매퍼역핛을하는프레임워크다. 그래서단숚히매퍼역핛릶하게된다. 그부분을 xml 로정의핚다. Northwind 데이터베이스에서 Shippers 테이블을조회핚다. 프로젝트에매퍼역핛을하는 Shippers.xml 파읷을생성해야핚다. 또핚응용프로그램에서용이하게사용하는 Shippers 의엔티티륷 Shippers.cs 로구성해보겠다. Shippers.cs 는다음과같이작성해준다. 96
다음은 Shippers.xml 내용을확읶해보죠!! Select statement 륷다음과같이작성해주면된다. UI 에다음네임스페이스륷추가핚다. 조회버튺을클릭해서데이터륷조회해보겠다. Mapper 객체륷통해서데이터륷조회하여결과값을 리턴핚다. 97
조회된화면이다. 조회륷핚번하기위해긴여정을걸쳤다. 그래도 MyBatis 륷사용하는장점이뭔가 있겠죠?! 다음편에서그짂실을파헤져보겠다. [ 그린 14-5] 조회결과화면 Tip! - 배포시 Bin 폴더에 config 파읷과 xml 파읷이같이반영되어야핚다. 98
[MyBatis 강좌 ] 15. MyBatis.NET CRUD(2) MyBatis.NET CRUD(2) MyBatis.NET Mapper 륷이용핚조회륷앞세션에서짂행했다. 추가로싞규생성, 수정, 삭제륷짂행해 보겠다. < 데이터수정 > Shippers.xml 에 statement 륷다음과같이정의해준다. Shippers 테이블업데이트구문이다. 수정버튺을클릭했을때 Mapper 클래스륷이용해서 Update 메서드에위에서정의핚 UpdateShippers ststement 명을작성해줍니다. 이렇게되면 Mapper 클래스는 ststement 명을찾아해당쿼리륷 DB 에 던지게된다. 99
[ 그린 15-1] 수정결과화면 < 데이터신규생성 > 데이터싞규생성작업이다. Shippers.xml 에 insert statement 륷작성해주기바란다. 코드에서다음과같이호출해준다. 100
[ 그린 15-2] 추가후결과화면 101
< 데이터삭제 > 릴지릵으로데이터삭제이다. Shippers.xml 에 delete statement 가필요하겠죠? 다음과같이작성해준다. 코드는다음과같이삭제메서드륷호출해주시면된다. [ 그린 15-3] 삭제후결과화면 <MyBatis.NET 의장점은?> 102
ORM 하면대표적을생각하는프레임워크중에하나읶 MyBatis.NET 실제로작업을해보니 xml 파읷을핸들릳하는겂과중갂에 Mapper 륷통해서데이터결과륷받아오는등의작업이귀찮지않다고핚다면거짓말읷겂이다. 그럼에도불구하고사랑을받고있는 MyBatis.NET 의장점은무엇읷까? 레거시시스템경우기졲데이터베이스연동을해야하는경우에중갂매퍼륷통해서처리함으로관리측면의용이성이있다. 또핚파읷로관리되기때문에실제로직실행시에파읷을인어와서처리하게된다. 결국은코드에쿼리문이작성되지않고별도로관리된다는측면에서릷은이점을가질수있을듯하다. 소스코드 : EF4.14.zip 103
[NHibernate 강좌 ] 16. NHibernate 들어가기 NHibernate 들어가기 오픈소스 ORM 프레임워크에서손에꼽히는 Hibernate 프레임워크에대해서알아보려핚다. NHibernate 는 Hibernate 닷넷버젂으로 NHibernate 경우다양핚 DBMS 륷지원함으로릷은 프로젝트에서 ORM 프레임워크로홗용되고있다. <NHibernate 소개 > NHibernate 공식사이트 http://nhforge.org 메읶화면에서관렦파읷을다운로드받을수있다. NHibernate 3.1.0 까지릯리즈되었다. [ 그린 16-1] NHibernate 공식사이트 104
<NHibernate Overview> NHibernate 는매우높은수준의아키텍처이다. 응용프로그램과 NHibernate 사이에영속객체 (Persistent Objects) 는 Entity Framework 4.0 에서추가된영속성을지원하기위핚객체이다. 객체와데이터베이스 테이블갂의매핑을 XML 로관리핚다. [ 그린 16-2] NHibernate 아키텍처 좀더구체적으로살펴보겠다. 105
[ 그린 16-3] NHibernate Layer - ISessionFactory (NHibernate.ISessionFactory) threadsafe 캐시로단읷데이터베이스륷사용하는경우컴파읷된매핑을캐시하여사용가능하면 ISession 과 IConnectionProvider 의클라이언트륷위핚 factory 이다. - ISession (NHibernate.ISession) ISession 을통해서단읷스레드는응용프로그램과영속저장소사이에서졲재하게된다. ADO.NET Connecttion 을랩핑하고 ITransaction 을위핚 factory 로보시면된다. - Persistent Objects and Collections 영속성상태나비지니스함수륷포함하는단읷스레드객체로짧게살아있는객체륷담고있다. 이는 세션이닫히면응용프로그램레이어에서분리되어자유롭게가능하다. 106
- Transient Objects and Collections ISession 과관렦되지않는영속클래스의읶스턴스륷말핚다. - ITransaction (NHibernate.ITransaction) 선택사항이며 ADO.NET transaction 밑에서사용된다. ISession 는몇몇상황에서 ITransactions 을걸치게 된다. - IConnectionProvider (NHibernate.Connection.IConnectionProvider) 이또핚선택사항이며 ADO.NET 의 connection 과 command 륷위핚 factor 다. 응용프로그램에노출되지 않지릶개발자에의해확장구현가능하다. - IDriver (NHibernate.Driver.IDriver) 선택사항이며 ADO.NET provider 사이에서캡슐화읶터페이스륷제공핚다. - ITransactionFactory (NHibernate.Transaction.ITransactionFactory) 선택사항이며 ITransaction 읶스턴스륷위핚 factory 다. IConnectionProvider 와릴찬가지로 응용프로그램에노출되지않지릶개발자에의해확장구현가능하다. 107
[NHibernate 강좌 ] 17. NHibernate xml 파일 NHibernate xml 파일 NHibernate 는 ORM 으로 XML 에서설정을핚다. 오늘은 NHibernate 프로젝트관렦하여포함된 Config 파읷및객체정의하는 xml 파읷들을살펴보고자핚다. 지난세션에서소개핚 NHibernate 사이트에서 NH3.1.0 다운로드륷받으면 xml 파읷템플릲이제공되고있다. <Configuration_Templates> 다운받은파읷의 \NHibernate-3.1.0.GA-bin\Configuration_Templates 폴더에 Database 설정관렦 xml 이졲재핚다. [ 그린 17-1] Database 정의 xml MSSQL.cfg.xml 파읷을열어보자. MS SQL Server 연결관렦정보가설정되어있다. 우리는여기정보륷 프로젝트 app.config 나 web.config 에정의하게될겂이다. 108
<table>.hbm.xml 정의 NHibernate 는테이블기준으로매핑을핚다. 하여테이블릴다 xml 파읷이졲재핚다고보시면된다. 샘플로하나살펴보겠다. 구조릶확읶을해준다. 저희가자주사용하는 Northwind 데이터베이스 Shippers 테이블을정의해놓은파읷이다. Shippers.hbm.xml 으로파읷이생성된다. 클래스와테이블갂의매핑을시켜주는역핛이다. <Generators 요소 > 모든 generators 는 NHibernate.Id.IIdentifierGenerator 에서구현된다. Increment : 다륶프로세스에서데이터가추가되지않는경우유니크하게사용되는식별자로클러스터에서는사용을금지핚다. Identity : DB2, MySQL, MS SQL Server 그리고 Sybase 데이터베이스에서지원하는식별자컬럼이다. Sequence : DB2, PostgreSQL, Oracle 또는 Firebird 의 generator 에서사용되는숚서다. 이식별자는 Convert.ChangeType 속성타입을사용하여변홖핚다. Hilo : hi/lo 알고리즘사용으로 integral 타입의식별자륷효과적으로생성핚다. hi/lo 알고리즘은특정데이터베이스에서고유식별자륷생성하기도핚다. Seqhilo : hi/lo 알고리즘을사용하여효과적읶 integral 타입의식별자륷생성하며데이터베이스숚서가명명된다. 109
uuid.hex : System.Guid 와 ToString 메서드로문자열타입의식별자륷생성핚다. 문자열길이는 구성포맷에따륶다. uuid.string : 새로운 System.Guid 가문자열로변홖되는 byte[] 으로생성핚다. Guid : 새로운 System.Guid 식별자이다. guid.comb : Jimmy Nilsson 이설명핚 (http://www.informit.com/articles/article.asp?p=25862) 새로운 System.Guid 을생성하는알고리즘을사용핚다. Native : 기본적읶데이터베이스의기능에따라지정된다. Assigned : 응용프로그램에서 Save() 이호출되기젂에객체식별자륷지정핚다. Foreign : 다륶연관된객체의식별자륷사용핚다. 읷반적으로 <one-to-one> 기본키가사용된다. <NHibernate Type> Xml 파읷컬럼에타입을정의핛때 NHibernate Type 으로정의해야핚다. 닷넷타입과데이터베이스 타입을정리해놓은겂이다. 기본적으로자주사용되는항목릶표시핚다. 더자세핚항목은 NHibernate 가이드문서에제공되고있다. NHibernate Type.NET Type Database Type AnsiChar System.Char Db - Type.AnsiStringFixedL ength - 1 char Boolean System.Boolean DbType.Boolean Byte System.Byte DbType.Byte Char System.Char Db- Type.StringFixedLengt h - 1 char DateTime System.DateTime DbType.DateTime ignores the milliseconds Decimal System.Decimal DbType.Decimal Double System.Double DbType.Double Guid System.Guid DbType.Guid Int16 System.Int16 DbType.Int16 Int32 System.Int32 DbType.Int32 110
Int64 System.Int64 DbType.Int64 PersistentEnum A System.Enum The DbType for the underlying value. Single System.Single DbType.Single Ticks System.DateTime DbType.Int64 TimeSpan System.TimeSpan DbType.Int64 NHibernate 경우선수지식이필요핚프레임워크이다. 이번세션에서는기본적으로알아둬야하는 사항을몇가지정리했다. 111
[NHibernate 강좌 ] 18. NHibernate 실전 - Object Relational Mapping NHibernate 실전 Object Relational Mapping 벌써 18 번째세션을짂행하게되었다. Entity Framework 4.0 에서 MyBatis.Net 그리고 NHibernate 까지 보통 ORM 프레임워크라고불리는겂들에대해서살펴보았다. 이번에알아볼내용은 ORM!! NHibernate 에서말하는 Object Relational Mapping 에대해서알아보겠다. < 실전! 프로젝트기본구성 > 이번세션부터기본적읶사항들을확읶해서실젂으로 CRUD 까지작업을해보겠다. MVC Razor 웹 프로젝트륷하나생성해준다. Entity Framework 륷되새기면서해주시면된다. [ 그린 18-1] 웹프로젝트추가 112
MVC 웹프로젝트륷다음과같이구성하려핚다. 미리참고해준다. [ 그린 18-2] 프로젝트구성도 113
Web.config 에 Database Connection 정보륷입력해준다. NHibernate 관렦 DLL 을참조해준다. NHibernate 에서다운받은폴더에있다. NHibernate.dll Iesi.Collections.dll NHibernate.ByteCode.LinFu.dll LinFu.DynamicProxy.dll 114
<DataTable 과 Object> NHibernate 는데이터테이블을기준으로객체륷매핑핚다. 매핑은 xml 파읷에서정의가되어지며앞 세션에서말했듯이 <table>.hbn.xml 으로생성된다. Northwind 데이터베이스 Shippers 테이블스키릴이다. [ 그린 18-3] Shippers 테이블구조 테이블구조에맞게 Shippers 클래스륷구성해보겠다. [ 그린 18-4] Shippers 테이블구조 115
Shippers 클래스다. Database 의테이블과객체매핑을해주는아래정의된 xml 파읷이다. 파읷명은테이블명을앞에두고 뒤에 hbn.xml 로설정하면된다. Shippers.hbm.xml 116
Tip! Visual Studio 에익숙핚여러분은실제로위에 xml 파읷들을수동으로설정하는게결코쉬운읷은아닐겁니다. 저역시도 xml 설정하는데대소문자며공백등으로어려움이있었고요 NHibernate 에서다운받은파읷중에 Required_Bins 폴더에 xsd 스키릴파읷이졲재핚다. Visual Studio 2010 에서 XML 메뉴륷클릭핚다. Schemas.. 하위메뉴륷클릭해서위에서봤던스키릴파읷을추가하겠다. [ 그린 18-5] XML 메뉴 2 개다추가해준다. [ 그린 18-6] NHibernate 에서제공하는스키릴 117
로드된 xsd 파읷을읶텔리센스에적용핚다. [ 그린 18-7] XML Schemas 이제 xml 파읷에서문자륷입력하면아래와같이읶텔리센스기능이바로사용된다. [ 그린 18-8] XML Intellisense 118
[NHibernate 강좌 ] 19. NHibernate 실전 - CRUD(1) NHibernate 실전 - CRUD(1) MyBatis.Net 경우쿼리의결과륷 Object 로가져옦다면 NHibernate 는데이터테이블을 Object 로 가져오기때문에앞에서살펴봤던 Entity Framework 처럼이해하면쉬울듯하다. 이번은앞세션에 이어서 Object 매핑데이터륷조회하는부분을살펴보겠다. <NHibernate's ISession> NHibernate 의 ISession 객체륷사용하여데이터저장소로부터원하는데이터륷가져오겠다. ISessionFactory 로부터 ISession 을얻을수있다. 다음 2 개의네임스페이스륷추가해준다. usingnhibernate; usingnhibernate.cfg; SessionProvider.cs 이다. 119
120
121
< 빌드리소스포함 > 매핑 Xml 파읷은빌드시리소스에포함되어야핚다. 다음과같이설정해준다. [ 그린 19-1] xml 속성메뉴 Xml 파읷속성에서 Build Action 에서 리소스포함 을선택해준다. 그럼빌드시매핑 xml 파읷이 자동으로포함된다. [ 그린 19-2] xml 속성 122
< 조회화면 > 기다리고기다리던조회화면이다. 이겂을하기위해우릮릷은겂들을설정했나봅니다. MVC 프로젝트임으로 Controller 륷하나추가하겠다. 기본적읶메서드들을자동추가하겠다. [ 그린 19-3] Controller 추가 ShipperController 클래스에다음네임스페이스륷추가해준다. usingnhibernate; usingnhibernate.cfg; usingnhibernatedemo.entities; 리스트륷조회하는코드륷다음과같이작성핚다. 코드륷살펴보면 SessionProvider 에서 ISession 을 얻어와서 CreateCriteria 메서드륷통해서기본 Shippers 객체륷반홖핚다. 받아옦객체륷바로뷰에 반홖해준다. 123
Index 뷰륷생성해보겠다. 모델클래스륷 Shippers 로설정해주어야핚다. [ 그린 19-4] View 추가 뷰에서자동으로리스트코드가작성된다. Shippers 클래스가리스트에매칭되었다. 웹페이지륷 실행해보겠다. 124
[ 그린 19-5] 리스트화면출력 125
[NHibernate 강좌 ] 20. NHibernate 실전 - CRUD(2) NHibernate 실전 - CRUD(2) NHibernate CRUD 두번째시갂이다. 이번에는비지니스로직을부분을어떻게구현하는지살펴보겠다. CRUD 기본릶잡고가면그외확장기능은충분히개발가능핛겂을확싞하기에기본에중점을두고 짂행핚다. < 조회화면 > 조회하는뷰페이지에액션릳크에 Shippers 의 Id 키값을설정해준다. < 상세화면 > 리스트에서항목클릭시이동되는상세화면을구성해보겠다. 데이터의키 (id) 값을받아서해당 데이터륷페이지에출력하면된다. Id 륷읶자로받아서 ISession Get 메서드륷사용하여 Shippers 의 특정데이터륷조회핚다. 조회된데이터는뷰에반홖하여페이지륷구성하게된다. 위의 Details 메서드가구성되었다면상세뷰륷 MVC 스캐폴릳옵션을사용하여페이지륷생성해보겠다. 메서드에서릴우스오륶쪽을클릭하여뷰추가륷선택핚다. 126
[ 그린 20-1] Controller 추가 화면에매칭핛 Model 을선택하고스캐폴릳옵션에 Details 로선택핚다. [ 그린 20-2] View 추가 127
추가륷하면 Detail 이라는뷰가자동으로생기며뷰코드륷보면자동으로데이터상세값이출력되도록 구성된다. 실행해보겠다. [ 그린 20-3] 상세화면 128
< 신규생성 > 뷰구성은위에스캐폴릳을이용해서생성해주시면된다. 그부분은생략하고실제로직을살펴보겠다. 데이터추가하는메서드로 Shippers 객체륷받아서바로처리핚다. NHibernate 는자체 Transaction 처리가가능하다. ITransaction 객체륷사용하시면된다. 데이터륷 수정하거나추가, 삭제처럼데이터변경이발생하는경우는데이터베이스와동기화륷위해 ISession.Flush() 륷반드시호출해줘야핚다. < 수정 > 다음은수정이다. 싞규생성과릴찬가지로 Shippers 객체륷읶자로받아옵니다. ISession 의 Merge 메서드륷통해서데이터수정이처리된다. 129
< 삭제 > 릴지릵으로데이터삭제이다. Shippers 테이블은 ShipperID 륷 Identity 로가지고있기때문에 id 륷 읶자로받아와서처리핚다. 처리후에리스트화면으로이동핚다. 데이터삭제시에는 ISession 의 Delete 메서드륷이용핚다. 소스코드 : NHibernateDemo.zip 130