개발 이야기/ORM2012. 4. 15. 12:36

NHibernate 들어가기

오픈소스 ORM 프레임워크에서 손에 꼽히는 Hibernate 프레임워크에 대해서 알아보려 합니다. NHibernate는 Hibernate 닷넷 버전으로 NHibernate 경우 다양한 DBMS를 지원함으로 많은 프로젝트에서 ORM 프레임워크로 활용 되고 있습니다.

 

NHibernate 소개

NHibernate 공식 사이트 http://nhforge.org

메인 화면에서 관련 파일을 다운로드 받을 수 있습니다. NHibernate 3.1.0까지 릴리즈 되었네요!

16_01.JPG

[그림 16-1] NHibernate 공식 사이트

 

NHibernate Overview

NHibernate는 매우 높은 수준의 아키텍처입니다응용프로그램과 NHibernate사이에 영속 객체(Persistent Objects) Entity Framework 4.0에서 추가된 영속성을 지원하기 위한 객체입니다객체와 데이터베이스 테이블 간의 매핑을 XML로 관리합니다.

16_02.jpg

[그림 16-2] NHibernate 아키텍처

 

좀 더 구체적으로 살펴보겠습니다.

16_03.jpg

[그림 16-3] NHibernate Layer

 

ISessionFactory (NHibernate.ISessionFactory)

threadsafe 캐시로 단일 데이터베이스를 사용하는 경우 컴파일된 매핑을 캐시하여 사용가능하면 ISessionIConnectionProvider의 클라이언트를 위한 factory입니다.

 

ISession (NHibernate.ISession)

ISession을 통해서 단일 스레드는 응용프로그램과 영속 저장소 사이에서 존재하게 됩니다. ADO.NET Connecttion을 랩핑하고ITransaction을 위한 factory로 보시면 됩니다.

 

Persistent Objects and Collections

영속성 상태나 비지니스 함수를 포함하는 단일 스레드 객체로 짧게 살아있는 객체를 담고 있다이는 세션이 닫히면 응용프로그램 레이어에서 분리되어 자유롭게 가능합니다.

 

Transient Objects and Collections

ISession과 관련되지않는 영속 클래스의 인스턴스를 말한다.

 

ITransaction (NHibernate.ITransaction)

선택사항이며 ADO.NET transaction 밑에서 사용됩니다. ISession는 몇몇 상황에서 ITransactions을 걸치게 됩니다.

 

IConnectionProvider (NHibernate.Connection.IConnectionProvider)

이 또한 선택사항이며 ADO.NET의 connection과 command를 위한 factory입니다응용프로그램에 노출되지않지만 개발자에 의해 확장 구현 가능합니다.

 

IDriver (NHibernate.Driver.IDriver)

선택사항이며 ADO.NET provider 사이에서 캡슐화 인터페이스를 제공합니다.

 

ITransactionFactory (NHibernate.Transaction.ITransactionFactory)

선택사항이며 ITransaction 인스턴스를 위한 factory입니다. IConnectionProvider와 마찬가지로 응용프로그램에 노출되지않지만 개발자에 의해 확장 구현 가능합니다.

 


sqler에 아티클 작성 했던것을 공유합니다.

출처 : http://www.sqler.com/401779

Posted by 사나에
개발 이야기/ORM2012. 4. 15. 12:35

MyBatis.NET CRUD(2)

MyBatis.NET Mapper를 이용한 조회를 앞세션에서 진행했습니다추가로 신규생성수정삭제를 진행해보겠습니다.

 

데이터 수정

Shippers.xml statement를 다음과 같이 정의해주세요. Shippers 테이블 업데이트 구문입니다.

 

<update id="UpdateShippers" parameterClass="Shippers">

        UPDATE [Shippers]

        SET CompanyName = #CompanyName#, Phone = #Phone#

        WHERE ShipperID = #ShipperID#

</update>

              

 

수정 버튼을 클릭했을때 Mapper클래스를 이용해서 Update메서드에 위에서 정의한 UpdateShippers ststement명을 작성해줍니다이렇게 되면 Mapper클래스는 ststement명을 찾아 해당 쿼리를 DB에 던지게 되죠~

 

        private void btnUpdate_Click(object sender, EventArgs e)

        {

            try

            {

                Shippers shipper = new Shippers();

                shipper.ShipperID = 4;

                shipper.CompanyName = "SM Company";

                shipper.Phone = "(02)0000-4444";

                Mapper.Instance().Update("UpdateShippers", shipper);

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.ToString());

            }

        }

              

 

15_01.JPG

[그림 15-1] 수정 결과 화면

 

데이터 신규생성

데이터 신규생성 작업입니다. Shippers.xml insert statement를 작성해주시고요.

 

<insert id="InsertShippers" parameterClass="Shippers">

        INSERT INTO [Shippers](CompanyName, Phone)

        VALUES (#CompanyName#, #Phone#)

        <selectKey type="post" resultClass="int" property="ShipperID">

               select @@IDENTITY as value

        </selectKey>

</insert>

 

 

코드에서 다음과 같이 호출해주세요.

 

        private void btnInsert_Click(object sender, EventArgs e)

        {

            try

            {

                Shippers shipper = new Shippers();

                shipper.CompanyName = "JS Company";

                shipper.Phone = "(02)1212-4444";

                object obj = Mapper.Instance().Insert("InsertShippers", shipper);

                MessageBox.Show(obj.ToString());

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.ToString());

            }

        }

              

 

  15_02.JPG

[그림 15-2] 추가 후 결과 화면

 

데이터 삭제

마지막으로 데이터 삭제입니다. Shippers.xml에 delete statement가 필요하겠죠다음과 같이 작성해주세요.

 

<delete id="DeleteShippers" parameterClass="Shippers">

        DELETE FROM [Shippers]

        WHERE ShipperID = #ShipperID#

</delete>

 

 

코드는 다음과 같이 삭제메서드를 호출해주시면 됩니다유후~훗 그럼 실행해서 확인해볼까요?

 

        private void btnDelete_Click(object sender, EventArgs e)

        {

            try

            {

                Shippers shipper = new Shippers();

                shipper.ShipperID = 4;

                Mapper.Instance().Delete("DeleteShippers", shipper);

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.ToString());

            }

        }

              

 

요청한 4번 항목이 사라졌네요^^ 끝까지 따라해주시느라 수고많으셨습니다.!!!!

15_03.JPG

[그림 15-3] 삭제 후 결과 화면

 

MyBatis.NET의 장점은?

ORM하면 대표적을 생각하는 프레임워크 중에 하나인 MyBatis.NET 실제로 작업을 해보니 xml파일을 핸들링하는 것과 중간에Mapper를 통해서 데이터 결과를 받아오는 등의 작업이 귀찮지않다고 한다면 거짓말 일 것이다그럼에도 불구하고 사랑을 받고 있는 MyBatis.NET의 장점은 무엇이 있을까요레거시 시스템 경우 기존 데이터베이스 연동을 해야하는 경우에 중간 매퍼를 통해서 처리함으로 관리 측면의 용이성이 있습니다또한 파일로 관리되기때문에 실제 로직 실행시에 파일을 읽어와서 처리하게 됩니다 그러기에 파일을 얼마든지 수정가능하겠죠?! 결국은 코드에 쿼리문이 작성되지않고 별도로 관리된다는 측면에서 많은 이점을 가질 수 있을듯합니다더 많은 장점은 여러분이 사용해보면서 느끼는 점을 같이 이야기 해볼 수 있으면 좋겠습니다.^^ 감사합니다.

소스코드 : EF4.14.zip 



sqler에 아티클 작성 했던것을 공유합니다.

출처 : http://www.sqler.com/401750

Posted by 사나에
개발 이야기/ORM2012. 4. 15. 12:35

MyBatis.NET CRUD(1)

MyBatis.NET의 아주 기본적인 작업에 대해서 살펴보려합니다.^^ 프로젝트를 생성하고 데이터를 조회하는데 객체 매핑을 어떻게 하는지 확인 하실 수 있습니다실전으로 고고!!!

 

프로젝트 생성

우선 간단한 CRUD를 확인하는 작업이기에 응용프로그램을 다음과 같이 디자인 해보겠습니다.

14_01.jpg

[그림 14-1] UI 구성

 

초기 작업

Data Mapper작업을 위해서 초기에 설정해줘야하는 작업들이 있습니다앞세션에서 관련된 파일들을 언급했었는데요해당 파일들이 어떤 역할들을 하는지 살펴보겠습니다. MyBatis.Net 사이트에서 다운 받은 파일 중에 IBatisNet.Common.dllIBatisNet.DataMapper.dll을 해당 프로젝트에 참조해주세요.

14_02.jpg

[그림 14-2] dll 참조

 

\IBatis.DataMapper.1.6.2.bin\Ibatis.DataMapper.1.6.2.bin 폴더에 아래  config 파일이 존재합니다프로젝트에 추가해주세요새로 만들어도 되지만 xml로 작성되기때문에 오류률을 줄이기위해 가져다 편집을 하는 방법을 선택하겠습니다.

14_03.JPG

[그림 14-3] config 파일 참조

 

여기까지 진행하셨다면 다음과 같이 프로젝트가 구성됩니다.

14_04.jpg

[그림 14-4] 프로젝트 구성

 

Config 파일 설정

providers.config 파일 내용을 확인하면 많은 DBMS Provider가 정의되어 있습니다저희가 사용하는 Provider는 “sqlServer2.0”입니다다른 Provider는 enabled="false해주시고  “sqlServer2.0”는 는 enabled="true" 설정해주세요.

<provider name="OleDb1.1"

          description="OleDb, provider V1.0.5000.0 in framework .NET V1.1"

          enabled="true"

          assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

    connectionClass="System.Data.OleDb.OleDbConnection"

          commandClass="System.Data.OleDb.OleDbCommand"

          parameterClass="System.Data.OleDb.OleDbParameter"

          parameterDbTypeClass="System.Data.OleDb.OleDbType"

          parameterDbTypeProperty="OleDbType"

          dataAdapterClass="System.Data.OleDb.OleDbDataAdapter"

          commandBuilderClass="System.Data.OleDb.OleDbCommandBuilder"

          usePositionalParameters="true"

          useParameterPrefixInSql="false"

          useParameterPrefixInParameter="false"

          parameterPrefix=""

    allowMARS="false"   

    />

 

 

다음은 SqlMap.config 파일입니다데이터베이스 연결 영역에 다음과 같이 DB 연결설정을 해주세요수동으로 작업하고있자니 기존에 자동생성했던 기억에 서글퍼지네요 ㅠㅠ.

        <!-- Database connection information -->

        <database>

               <provider name="sqlServer2.0"/>

               <dataSource name="Northwind" connectionString="Data Source=JISEON;Initial Catalog=Northwind;Integrated Security=True;"/>

        </database>

 

 

데이터 조회

기본 설정이 마무리 되었으니 이제부터 데이터를 한번 조회해보겠습니다. MyBatis는 쿼리와 결과 데이터의 매퍼 역할을 하는 프레임워크입니다그래서 단순히 매퍼 역할만하게되는데요그 부분을 xml로 정의합니다. Northwind 데이터베이스에서 Shippers테이블을 조회할건데요프로젝트에 매퍼 역할을 하는 Shippers.xml 파일을 생성해주세요또한 응용프로그램에서 용이하게 사용하는 Shippers의 엔티티를 Shippers.cs로 구성해보겠습니다.

Shippers.cs는 다음과 같이 작성해주세요.

 

    public class Shippers

    {

        public int ShipperID { getset; }

        public string CompanyName { getset; }

        public string Phone { getset; }

    }

 

 

다음은 Shippers.xml 내용을 확인해보죠!! Select statement를 다음과 같이 작성해주면 됩니다.

<?xml version="1.0" encoding="utf-8" ?>

 

<sqlMap namespace="EF4._14" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://ibatis.apache.org/mapping">

 

        <alias>

               <typeAlias alias="Shippers"  type="EF4._14.Shippers" />

        </alias>

 

       <statements>

             <select id="SelectShippers"  resultClass="Shippers">

                    select * from Shippers

             </select>

       </statements>

 

</sqlMap>

 

 

UI에 다음 네임스페이스를 추가해주시고요.

 

using IBatisNet.Common;

using IBatisNet.DataMapper;

 

 

조회 버튼을 클릭해서 데이터를 조회해보겠습니다. Mapper 객체를 통해서 데이터를 조회하여 결과값을 리턴합니다.

 

        private void btnSelect_Click(object sender, EventArgs e)

        {

            try

            {

                IList<Shippers> list = Mapper.Instance().QueryForList<Shippers>("SelectShippers"null);

                dataGridView1.DataSource = list;

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.ToString());

            }

        }

 

 

조회된 화면입니다조회를 한번하기위해 긴여정을 걸쳤습니다그래도 MyBatis를 사용하는 장점이 뭔가 있겠죠?! 다음편에서 그 진실을 파헤져보겠습니다.

14_05.jpg

[그림 14-5] 조회 결과 화면

 

Tip!

-       배포시 Bin 폴더에 config 파일과 xml파일이 같이 반영되어야 합니다.



sqler에 아티클 작성 했던것을 공유합니다.

출처 : http://www.sqler.com/401728



Posted by 사나에
개발 이야기/ORM2012. 4. 15. 12:34

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 다운로드

l Download the Data Mapper for .NET

mybatis.net data access framework 다운로드

l Download the Data Access Framework

 

 

프로젝트 참조 파일

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

Oracle provider V9.2.0.401

oracle10.1

Oracle provider V10.1.0.301

oracleClient1.0

MS Oracle provider V1.0.5 available with .NET Framework 1.1

ByteFx

ByteFx MySQL provider V0.7.6.15073

MySql

MySQL provider V1.0.4.20163

SQLite3

SQLite.NET provider V0.21.1869.3794

Firebird1.7

Firebird SQL .NET provider V1.7.0.33200

PostgreSql0.7

Npgsql provider V0.7.0.0

iDb2.10

IBM DB2 iSeries provider V10.0.0.0

 

5.      SqlMap.config

DataMapper 설정 파일입니다해당 파일에는 연결 대상인 Database 기본 정보나 객체 매핑이 정의된 xml파일 링크 정보를 정의해주는 파일입니다. <sqlMaps> 요소 영역을 저희가 자주 편집하게 될겁니다.! 이것만 기억해주세요.
13_01.jpg

[그림13-1] sqlMap.confog sqlMaps 요소

 

MyBatis.NET DLL형태로 제공되기 때문에 환경 설정하는데 어려움이 없습니다프로젝트 실전을 통해서 작업을 해보시면 생각보다 진입하기가 쉽다는 것을 느낄 수 있습니다다음 세션에 작업할 때 위에서 언급된 항목들이 사용 될 겁니다. XML에서 작업이 이뤄지기때문에 헷갈릴수도 있지만 오늘 언급한 항목들에 대한 인지만 가지고 있으면 쉽게 따라 올 수 있다는거~~~ 잊지마세요!


sqler에 아티클 작성 했던것을 공유합니다.

출처 : http://www.sqler.com/401700

Posted by 사나에
개발 이야기/ORM2012. 4. 15. 12:34

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
의 구성도는 다음과 같습니다.

flow.png

[그림 12-1] MyBatis.NET

 

myBatis는 쿼리(SQL)을 매핑함으로 데이터베이스와 객체 사이에 제약이 따르지않는다는 점에서도 굉장한 메리트를 가지고 있다고 볼 수 있습니다.

 

MyBatis.NET 관련 소스

myBatis.net 관련된 소스링크입니다다음 세션부터 실전에 들어가기 전에 다운받아 주세염^^

.NET Google Code Project: http://code.google.com/p/mybatisnet/

mybatis.net data mapper 다운로드

l  Download the Data Mapper for .NET

l  Download the Data Mapper User Guide (English)

 

mybatis.net data access framework 다운로드

l  Download the Data Access Framework

l  Download the Data Access Framework User Guide (English)


sqler에 아티클 작성 했던것을 공유합니다.

출처 : http://www.sqler.com/401230


Posted by 사나에