SlideShare a Scribd company logo
1 of 23
An Introduce to NHibernate
           PART 1




           LOGO
            J九日
内容


SQL Helper vs. NHibernate
Object-Relational Mapping
   关系模型
   为什么使用 ORM?
Hibernate 含义
NHibernate Mapping
核心类型
Exercise: ExBlogger
SQL Helper vs. NHibernate

Working with SQL Helper

                           上层应用/Business Logic
          太暧昧
                                    创建数据对象


                           编写SQL


                  设计数据模型

                                 以数据表为核心
       设计数据表                     模型仅为装载数据
                                 底层可能包含业务逻辑
                                 底层与上层关系紧密
    前期的设计很
                                 受PetShop4的影响
    可能面目全非
                                     “Data-Driven
                                          Design”
SQL Helper vs. NHibernate

Working with NHibernate

                                     各种应用程序

    解决O-R不对                            设计应用
    称,转移主                              服务契约
    要关注点!
                          设计业务                   Cache
                          领域对象
                                                 Search
                 设计资源
                  库契约
                                                 NoSQL
                             以业务对象为核心
  NHibernate 资
                             资源库不关心业务逻辑
    源库实现
                             应用层不关心契约实现
                             促进面向契约编程
   设计数据表
                          Domain-Driven Design
Object-Relational Mapping

Relational Model


      Relation




                   Relation




      Relation
Object-Relational Mapping

Relational Model Concepts




  关系数据库(Relational Database)是建立在关系模型上的数据库;
  一个数据表“就是”一个关系(Relation);
  表(关系)之间通过“键”连接;
Object-Relational Mapping

Why ORM ?




                             Productivity
             Modeling
                                 and
             mismatch
                            maintainability

                          ORM


                              Database
            Performance
                            independency
Hibernate

Hibernate: 休眠、冬眠




 活动的熊              Hibernate   冬眠的熊
Hibernate

Hibernate: a Java ORM Framework



        对象                 Hibernate   关系

活动的熊                       Hibernate   冬眠的熊

    关注点
NHibernate Mapping




           Mapping




嵌入的资源
Core NHibernate Types


Configuration          Build (Once)


           Open Session


ISession         ISession
                                        …
 Create
                                        …


IQuery     ISQLQuery        ICriteria   IQueryOver   IQueryable

  HQL           SQL                Dynamically         LINQ
Core NHibernate Types

NHibernate.Cfg.Configuration
// 配置 Configuration 对象
Configuration Configure()
Configuration Configure(string fileName)
Configuration Configure(Assembly assembly, string resourceName)
Configuration Configure(XmlReader textReader)
// 构建 ISessionFactory 的实例
ISessionFactory BuildSessionFactory()




 配
 置
 文
 件
Core NHibernate Types

NHibernate.ISessionFactory

//Create   a database connection and open a <c>ISession</c> on it
ISession   OpenSession()
ISession   OpenSession(IDbConnection conn)
ISession   OpenSession(IInterceptor sessionLocalInterceptor)

NHibernate.ISession
object Save(object obj)
void Delete(object obj)
void Update(object obj)
ICriteria CreateCriteria<T>()
IQueryOver<T,T> QueryOver<T>()
IQuery CreateQuery(string queryString)
ISQLQuery CreateSQLQuery(string queryString)
IQueryable<T> Query<T>(this ISession session)
Core NHibernate Types

ISession查询示例:查询所有用户
Criteria Query
Session.CreateCriteria<User>().List<User>();
Strong-typed Criteria Query
Session.QueryOver<User>().List<User>();
NHibernate Linq Query
Session.Query<User>().ToList<User>();
Query with Hibernate Query Language
Session.CreateQuery("from User").List<User>();
Native SQL Query
Session.CreateSQLQuery("select * from Users")
       .SetResultTransformer(Transformers.AliasToBean<User>())
       .List<User>();
Exercise:ExBlogger

目标:多用户博客程序

访客可以注册成用户
用户可以创建自己的博客
用户可以在自己的博客里写帖子
用户可以评论帖子
使用NHibernate框架持久化对象
Exercise:ExBlogger



  访客
                     博客
       注册
               创建


       博客用户          写    帖子

              发表



                    评论
Exercise:ExBlogger



      Visitor
                                     Blog
          Register
                          Create


                User               Create   Post

                       Create

Ubiquitous Language
领域通用语言
                                Comment
Exercise:ExBlogger




应用服务契约的制定与测试(略)
已确定对象的创建工厂
已确定对象的职责
下一步:制定/实现资源库契约(Repository Contracts/Interfaces)
Exercise:ExBlogger

IRepository<T>
int Save(T entity);
void Update(T entity);
T Get(int id);                 通用持久化方法
IList<T> GetAll();
void Delete(int id);


IUsersRepository:IRepository<User>

IBlogsRepository:IRepository<Blog>
                                           自定义持久化方法
IPostsRepository:IRepository<Post>

ICommentsRepository:IRepository<Comment>
Exercise:ExBlogger

创建并存储用户
var user =
BlogRegistrar.GetInstance().CreateUser(“Mike", "pwd");
var id = _usersRepository.Save(user);




获取所有用户
var users = _usersRepository.GetAll();
Exercise:ExBlogger

创建并存储博客
var blog = user.CreateBlog("foo", "bar");
_blogsRepository.Save(blog);

创建并存储帖子
var post = user.CreatePost("Hello World", "This my first post!")
               .On(blog);
_postsRepository.Save(post);
Exercise:ExBlogger

创建并存储评论
 var comment = user.CreateComment("沙发").On(post);
_commentsRepository.Save(comment);




获取评论列表:组装自定义的DTO
Thanks !
示例代码SVN地址:
http://ex-blogger.googlecode.com/svn/trunk/

推荐资料:

李永京博客
http://www.cnblogs.com/lyj/

领域驱动设计精简版
http://www.infoq.com/cn/minibooks/domain-driven-design-quickly

More Related Content

Similar to An introduce to n hibernate (part 1) pub

安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fb安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fbAlbert Hong
 
企业系统商务智能设计
企业系统商务智能设计企业系统商务智能设计
企业系统商务智能设计George Ang
 
民间秘方
民间秘方民间秘方
民间秘方dynasty
 
從零開始做架構圖
從零開始做架構圖從零開始做架構圖
從零開始做架構圖Philip Zheng
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressAppzhoujg
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)vanadies10
 
NHibernate分享(1) share
NHibernate分享(1) shareNHibernate分享(1) share
NHibernate分享(1) shareXu Huang
 
事件驱动编程
事件驱动编程事件驱动编程
事件驱动编程banq jdon
 
01.uliweb介绍
01.uliweb介绍01.uliweb介绍
01.uliweb介绍modou li
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统klandor
 
選擇正確的Solution 來建置現代化的雲端資料倉儲
選擇正確的Solution 來建置現代化的雲端資料倉儲選擇正確的Solution 來建置現代化的雲端資料倉儲
選擇正確的Solution 來建置現代化的雲端資料倉儲Herman Wu
 
Hadoop 與 SQL 的甜蜜連結
Hadoop 與 SQL 的甜蜜連結Hadoop 與 SQL 的甜蜜連結
Hadoop 與 SQL 的甜蜜連結James Chen
 
E tom ngoss规范及siebel系统在电信行业的应用 陈永林
E tom ngoss规范及siebel系统在电信行业的应用 陈永林E tom ngoss规范及siebel系统在电信行业的应用 陈永林
E tom ngoss规范及siebel系统在电信行业的应用 陈永林corlin chen
 
Oracle北大青鸟完全教程
Oracle北大青鸟完全教程Oracle北大青鸟完全教程
Oracle北大青鸟完全教程yiditushe
 
Big Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBBig Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBMonster Supreme
 
数据分析架构实例与安全的云挖掘
数据分析架构实例与安全的云挖掘数据分析架构实例与安全的云挖掘
数据分析架构实例与安全的云挖掘mysqlops
 
腾讯大讲堂25 企业级搜索托管平台介绍
腾讯大讲堂25 企业级搜索托管平台介绍腾讯大讲堂25 企业级搜索托管平台介绍
腾讯大讲堂25 企业级搜索托管平台介绍George Ang
 
Altibase管理培训 管理篇
Altibase管理培训 管理篇Altibase管理培训 管理篇
Altibase管理培训 管理篇小新 制造
 
000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲ArBing Xie
 

Similar to An introduce to n hibernate (part 1) pub (20)

安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fb安卓中的设计模式举例 by hjm1fb
安卓中的设计模式举例 by hjm1fb
 
企业系统商务智能设计
企业系统商务智能设计企业系统商务智能设计
企业系统商务智能设计
 
民间秘方
民间秘方民间秘方
民间秘方
 
從零開始做架構圖
從零開始做架構圖從零開始做架構圖
從零開始做架構圖
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)
 
NHibernate分享(1) share
NHibernate分享(1) shareNHibernate分享(1) share
NHibernate分享(1) share
 
事件驱动编程
事件驱动编程事件驱动编程
事件驱动编程
 
01.uliweb介绍
01.uliweb介绍01.uliweb介绍
01.uliweb介绍
 
开源应用日志收集系统
开源应用日志收集系统开源应用日志收集系统
开源应用日志收集系统
 
Portfolio
PortfolioPortfolio
Portfolio
 
選擇正確的Solution 來建置現代化的雲端資料倉儲
選擇正確的Solution 來建置現代化的雲端資料倉儲選擇正確的Solution 來建置現代化的雲端資料倉儲
選擇正確的Solution 來建置現代化的雲端資料倉儲
 
Hadoop 與 SQL 的甜蜜連結
Hadoop 與 SQL 的甜蜜連結Hadoop 與 SQL 的甜蜜連結
Hadoop 與 SQL 的甜蜜連結
 
E tom ngoss规范及siebel系统在电信行业的应用 陈永林
E tom ngoss规范及siebel系统在电信行业的应用 陈永林E tom ngoss规范及siebel系统在电信行业的应用 陈永林
E tom ngoss规范及siebel系统在电信行业的应用 陈永林
 
Oracle北大青鸟完全教程
Oracle北大青鸟完全教程Oracle北大青鸟完全教程
Oracle北大青鸟完全教程
 
Big Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDBBig Data, NoSQL, and MongoDB
Big Data, NoSQL, and MongoDB
 
数据分析架构实例与安全的云挖掘
数据分析架构实例与安全的云挖掘数据分析架构实例与安全的云挖掘
数据分析架构实例与安全的云挖掘
 
腾讯大讲堂25 企业级搜索托管平台介绍
腾讯大讲堂25 企业级搜索托管平台介绍腾讯大讲堂25 企业级搜索托管平台介绍
腾讯大讲堂25 企业级搜索托管平台介绍
 
Altibase管理培训 管理篇
Altibase管理培训 管理篇Altibase管理培训 管理篇
Altibase管理培训 管理篇
 
000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲000 北京圣思园教育科技有限公司第一期面授培训大纲
000 北京圣思园教育科技有限公司第一期面授培训大纲
 

An introduce to n hibernate (part 1) pub