티스토리 툴바

테이블 명세서 쿼리

--컬럼

SELECT TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION, COLUMN_NAME, DATA_TYPE, ISNULL(CHARACTER_MAXIMUM_LENGTH, '') AS CHARACTER_MAXIMUM_LENGTH

, ISNULL(IS_NULLABLE, '') AS IS_NULLABLE, ISNULL(COLUMN_DEFAULT, '') AS COLUMN_DEFAULT

FROM INFORMATION_SCHEMA.COLUMNS

ORDER BY TABLE_SCHEMA, TABLE_NAME, ORDINAL_POSITION


-- 테이블

SELECT TABLE_SCHEMA, TABLE_NAME

FROM INFORMATION_SCHEMA.COLUMNS 

GROUP BY TABLE_NAME, TABLE_SCHEMA

ORDER BY TABLE_SCHEMA, TABLE_NAME



-- 프로시져

SELECT * FROM sys.objects 

WHERE TYPE_DESC = 'SQL_STORED_PROCEDURE' 

AND NAME NOT LIKE 'sp_%' 

ORDER BY NAME


저작자 표시 비영리 변경 금지

Declare @EndDate Varchar(8)

SET @EndDate = '20120401'

SELECT CONVERT(Datetime, @EndDate), DATEADD(D, 1, @EndDate)


조회결과


묵시적 형변환을 할 경우 시간이 00:00:00 이다.

BETWEEN 문에서는 하루를 더해서 조회하자.

WHERE @TargetDate BETWEEN StartDate AND DATEADD(D, 1, EndDate)



저작자 표시 비영리 변경 금지

동영상 참고 자료

l  [ORM Framework 동영상 강좌] 01. Entity Framework 들어가기

l  [ORM Framework 동영상 강좌] 02. Entity Framework 4.0 기능 살펴보기

l  [ORM Framework 동영상 강좌] 03. LINQ 알고가자

l  [ORM Framework 동영상 강좌] 04. Database-First VS Model-First

l  [ORM Framework 동영상 강좌] 05. Entity Framework Context

l  [ORM Framework 동영상 강좌] 06. Entity Framework - Entity CRUD

l  [ORM Framework 동영상 강좌] 07. Entity Framework - Entity Stored Procedure 활용(1)

l  [ORM Framework 동영상 강좌] 08. Entity Framework - Entity Stored Procedure 활용(2)

l  [ORM Framework 동영상 강좌] 09. Entity Framework – ASP.NET MVC(1)

l  [ORM Framework 동영상 강좌] 10. Entity Framework – ASP.NET MVC(2)

l  [ORM Framework 동영상 강좌] 11. Entity Framework – ASP.NET MVC(3)

l  [ORM Framework 동영상 강좌] 12. MyBatis.Net 들어가기

l  [ORM Framework 동영상 강좌] 13. MyBatis.NET 기본  환경 설정

l  [ORM Framework 동영상 강좌] 14. MyBatis.NET CRUD(1)

l  [ORM Framework 동영상 강좌] 15. MyBatis.NET CRUD(2)

l  [ORM Framework 동영상 강좌] 16. NHibernate 들어가기

l  [ORM Framework 동영상 강좌] 17. NHibernate xml 파일

l  [ORM Framework 동영상 강좌] 18. NHibernate 실전 - Object Relational Mapping

l  [ORM Framework 동영상 강좌] 19. NHibernate 실전 - CRUD(1)

l  [ORM Framework 동영상 강좌] 20. NHibernate 실전 - CRUD(2)






sqler에 올렸던 동영상을 공유합니다.


저작자 표시 비영리 변경 금지

NHibernate 실전 - CRUD(2)

NHibernate CRUD 두번째 시간입니다이번에는 비지니스 로직을 부분을 어떻게 구현하는지 살펴보겠습니다. CRUD 기본만 잡고가면 그 외 확장기능은 충분히 개발 가능할 것을 확신하기에 기본에 중점을 두고 진행합니다.^^

 

조회 화면

조회하는 뷰페이지에 액션링크에 Shippers Id 키값을 설정해줍니다.

 

            @Html.ActionLink("Edit""Edit"new { id = item.ShipperID }) |

            @Html.ActionLink("Details""Details"new { id = item.ShipperID }) |

            @Html.ActionLink("Delete""Delete"new { id = item.ShipperID })

 

 

 

상세 화면

리스트에서 항목 클릭 시 이동되는 상세 화면을 구성해보겠습니다데이터의 키(id)값을 받아서 해당 데이터를 페이지에 출력하면 됩니다. Id를 인자로 받아서 ISession Get메서드를 사용하여 Shippers의 특정데이터를 조회합니다조회된 데이터는 뷰에 반환하여 페이지를 구성하게 됩니다.

 

        public ActionResult Details(int id)

        {

            ISession session = SessionProvider.Instance.GetSession();

            Shippers shipper = session.Get<Shippers>(id);

 

            return View(shipper);

        }

 

 

위의 Details 메서드가 구성되었다면 상세 뷰를 MVC 스캐폴링 옵션을 사용하여 페이지를 생성 해보겠습니다메서드에서 마우스 오른쪽을 클릭하여 뷰 추가를 선택하세요.

20_01.JPG

[그림 20-1] Controller 추가

 

화면에 매칭할 Model을 선택하고 스캐폴링 옵션에 Details로 선택합니다.

20_02.JPG

[그림 20-2] View 추가

 

추가를 하면 Detail이라는 뷰가 자동으로 생기며 뷰 코드를 보면 자동으로 데이터 상세 값이 출력되도록 구성된다실행 해보겠습니다.

20_03.JPG

[그림 20-3] 상세 화면

 

신규생성

뷰 구성은 위에 스캐폴링을 이용해서 생성해주시면 됩니다그 부분은 생략하고 실제 로직을 살펴보겠습니다데이터 추가하는 메서드입니다. Shippers 객체를 받아서 바로 처리합니다.

 

        [HttpPost]

        public ActionResult Create(Shippers shipper)

        {

            ISession session = SessionProvider.Instance.GetSession();

            ITransaction trans = null;

            try

            {

                trans = session.BeginTransaction();

                session.Save(shipper);

                session.Flush();

                trans.Commit();

                return RedirectToAction("Index");

            }

            catch

            {

                trans.Rollback();

                return View();

            }

        }

 

 

NHibernate는 자체 Transaction 처리가 가능합니다. ITransaction 객체를 사용하시면 됩니다데이터를 수정하거나 추가삭제처럼 데이터 변경이 발생하는 경우는 데이터베이스와 동기화를 위해 ISession.Flush()를 반드시 호출해줘야 합니다.

 

 

수정

다음은 수정입니다신규생성과 마찬가지로 Shippers 객체를 인자로 받아옵니다. ISession의 Merge메서드를 통해서 데이터 수정이 처리됩니다.

 

        [HttpPost]

        public ActionResult Edit(Shippers shipper)

        {

            ISession session = SessionProvider.Instance.GetSession();

            ITransaction trans = null;

            try

            {

                trans = session.BeginTransaction();

                session.Merge(shipper);

                session.Flush();

                trans.Commit();

            }

            catch

            {

                trans.Rollback();

            }

            return RedirectToAction("Index");

        }

 

 

 

삭제

마지막으로 데이터 삭제입니다. Shippers 테이블은 ShipperID Identity로 가지고 있기때문에 id를 인자로 받아와서 처리합니다.처리 후에 리스트화면으로 이동합니다데이터 삭제 시에는 ISession의 Delete 메서드를 이용합니다.

 

        public ActionResult Delete(int id)

        {

            ISession session = SessionProvider.Instance.GetSession();

            Shippers shipper = session.Get<Shippers>(id);

 

            ITransaction trans = null;

            try

            {

                trans = session.BeginTransaction();

                session.Delete(shipper);

                session.Flush();

                trans.Commit();

                return RedirectToAction("Index");

            }

            catch

            {

                trans.Rollback();

                return View();

            }

        }

 

 

실제로 화면 하나하나 캡처하면 내용이 길어져서 소스코드면 소개를 해드렸습니다소스를 첨부해드릴테니 받아서 한번씩 실행해보면 더 쉽게 이해되시리라 생각합니다. NHibernate는 견고하고 데이터 처리에 필요한 기본적인 기능들을 제공하고 있습니다. (트랜잭션 처리같은… ) Table과 Object의 매핑이라는 점이 핵심이라고 볼 수 있겠네요이렇게 잛게 기본적인 NHibernate 활용편을 살펴보았습니다읽어주셔서 감사합니다.^^

 

소스코드 : NHibernateDemo.zip



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

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



저작자 표시 비영리 변경 금지

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


저작자 표시 비영리 변경 금지