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

NHibernate 실전 - CRUD(1)

MyBatis.Net 경우 쿼리의 결과를 Object로 가져온다면 NHibernate는 데이터 테이블을 Object로 가져오기때문에 앞에서 살펴봤던Entity Framework처럼 이해하면 쉬울 듯합니다이번은 앞세션에 이어서 Object 매핑 데이터를 조회하는 부분을 살펴보겠습니다.

 

NHibernate's ISession

NHibernate ISession 객체를 사용하여 데이터 저장소로 부터 원하는 데이터를 가져오겠습니다. ISessionFactory로부터ISession을 얻을 수 있다.

다음 2개의 네임스페이스를 추가해주세요.

using NHibernate;

using NHibernate.Cfg;

 

SessionProvider.cs 입니다.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using NHibernate;

using NHibernate.Cfg;

 

namespace NHibernateDemo

{

    public class SessionProvider

    {

        private ISession _session;

        private ISessionFactory _sessionFac;

        private bool _reuseSession;

 

        #region Thread-safe Singleton

 

        public static SessionProvider Instance

        {

            get

            {

                return Nested.TheSingleton;

            }

        }

 

        private SessionProvider()

        {

            // Read the configuration

            Configuration cfg = new Configuration();

            cfg.AddAssembly("NHibernateDemo");

 

            _sessionFac = cfg.BuildSessionFactory();

            _reuseSession = false;

        }

 

        private class Nested

        {

            static Nested() { }

            internal static readonly SessionProvider

                TheSingleton = new SessionProvider();

        }

 

        #endregion

 

 

        /// <summary>

        /// Should the session be reused? If

        /// this property is false (default), a Session-Per-Request

        /// is applied.

        /// </summary>

        public bool ReuseSession

        {

            get

            {

                return _reuseSession;

            }

            set

            {

                _reuseSession = value;

            }

        }

 

        /// <summary>

        /// Get the current session. If the session is null,

        /// Open a new Session

        /// </summary>

        /// <returns>ISession-Object</returns>

        public ISession GetSession()

        {

            if (_session == null)

                _session = _sessionFac.OpenSession();

 

            return _session;

 

        }

 

        /// <summary>

        /// Close a Session, if the flag ReuseSession is false

        /// </summary>

        public void CloseSession()

        {

            if (_session != null)

            {

                if (!_reuseSession)

                {

                    _session.Close();

                    _session = null;

                }

            }

        }

    }

}

 

 

 

빌드 리소스 포함

매핑 Xml 파일은 빌드 시 리소스에 포함되어야 합니다다음과 같이 설정해주세요.

19_01.JPG

[그림 19-1] xml 속성 메뉴

 

Xml 파일 속성에서 Build Action에서 리소스 포함을 선택해주세요그럼 빌드시 매핑 xml파일이 자동으로 포함됩니다.

19_02.JPG

[그림 19-2] xml 속성

 

조회 화면

~~ 기다리고 기다리던 조회화면입니다이것을 하기 위해 우린 위!~~~~ 많은것들을 설정했나봅니다ㅋㅋㅋㅋ MVC 프로젝트임으로 Controller를 하나 추가하겠습니다기본적인 메서드들을 자동 추가하겠습니다.

19_03.JPG

[그림 19-3] Controller 추가

 

ShipperController 클래스에 다음 네임스페이스를 추가해주세요.

using NHibernate;

using NHibernate.Cfg;

using NHibernateDemo.Entities;

 

리스트를 조회하는 코드를 다음과 같이 작성합니다코드를 살펴보면 SessionProvider에서 ISession을 얻어와서 CreateCriteria 메서드를 통해서 기본 Shippers 객체를 반환합니다받아온 객체를 바로 뷰에 반환해줍니다.

 

        public ActionResult Index()

        {

            IList<Shippers> list = null;

            try

            {

                ISession session = SessionProvider.Instance.GetSession();

                NHibernate.ICriteria ctiq = session.CreateCriteria(typeof(Shippers));

                list = ctiq.List<Shippers>();

            }

            catch (Exception ex)

            {

                throw;

            }

 

            return View(list);

        }

 

 

Index 뷰를 생성해보겠습니다모델 클래스를 Shippers로 설정 해주셔야 합니다.

19_04.JPG

[그림 19-4] View 추가

 

뷰에서 자동으로 리스트 코드가 작성됩니다. Shippers 클래스가 리스트에 매칭되었습니다웹 페이지를 실행해보겠습니다.

19_05.JPG

[그림 19-5] 리스트 화면 출력

 

리스트가 주~~욱 출력이 되고 있습니다그 어느때보다 기쁘네요^^ 사실 xml때문에 삽질을 한터라 ㅋㅋㅋ 따라하시느라 정신이 없을 수도 있지만 핵심은 데이터베이스의 테이블과 클래스 매핑을 xml파일에 정의되고 NHibernate Session을 통해서 실제 데이터를 조회하거나 액션을 취하게 됩니다다음 세션에서는 이번에 이어서 수정삭제신규생성 하는 비지니스 로직을 확인해보겠습니다감사합니다.^^


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

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


Posted by 사나에