html5-img
1 / 23

An Introduce to NHibernate

An Introduce to NHibernate. PART 1. 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. 设计 数据模型.

bern
Download Presentation

An Introduce to NHibernate

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. An Introduce to NHibernate PART 1 J九日

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

  3. SQL Helper vs. NHibernate Working with SQL Helper 上层应用/Business Logic 太暧昧 创建数据对象 编写SQL 设计数据模型 • 以数据表为核心 • 模型仅为装载数据 • 底层可能包含业务逻辑 • 底层与上层关系紧密 • 受PetShop4的影响 设计数据表 前期的设计很 可能面目全非 “Data-Driven Design”

  4. SQL Helper vs. NHibernate Working with NHibernate 各种应用程序 解决O-R不对称,转移主要关注点! 设计应用服务契约 Cache 设计业务领域对象 Search 设计资源库契约 NoSQL • 以业务对象为核心 • 资源库不关心业务逻辑 • 应用层不关心契约实现 • 促进面向契约编程 NHibernate 资源库实现 设计数据表 Domain-Driven Design

  5. Object-Relational Mapping Relational Model Relation Relation Relation

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

  7. Object-Relational Mapping Why ORM ?

  8. Hibernate Hibernate: 休眠、冬眠 活动的熊 冬眠的熊 Hibernate

  9. Hibernate Hibernate: a Java ORM Framework 对象 关系 Hibernate 活动的熊 冬眠的熊 Hibernate Hibernate: Java NHibernate: .NET 让开发者更关注对象的设计! 关注点

  10. NHibernate Mapping Mapping 嵌入的资源

  11. Core NHibernate Types Build (Once) ISessionFactory Configuration Open Session ISession ISession …… Create IQueryOver IQuery ISQLQuery ICriteria IQueryable HQL SQL Dynamically LINQ

  12. Core NHibernate Types NHibernate.Cfg.Configuration // 配置Configuration 对象 ConfigurationConfigure() ConfigurationConfigure(stringfileName) ConfigurationConfigure(Assemblyassembly, stringresourceName) Configuration Configure(XmlReadertextReader) // 构建 ISessionFactory的实例 ISessionFactoryBuildSessionFactory() 配置文件

  13. Core NHibernate Types NHibernate.ISessionFactory //Create a database connection and open a <c>ISession</c> on it ISessionOpenSession() ISessionOpenSession(IDbConnection conn) ISessionOpenSession(IInterceptorsessionLocalInterceptor) NHibernate.ISession object Save(objectobj) void Delete(objectobj) voidUpdate(objectobj) ICriteriaCreateCriteria<T>() IQueryOver<T,T> QueryOver<T>() IQueryCreateQuery(stringqueryString) ISQLQueryCreateSQLQuery(stringqueryString) IQueryable<T> Query<T>(thisISession session)

  14. 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>();

  15. Exercise:ExBlogger 目标:多用户博客程序 • 访客可以注册成用户 • 用户可以创建自己的博客 • 用户可以在自己的博客里写帖子 • 用户可以评论帖子 • 使用NHibernate框架持久化对象

  16. Exercise:ExBlogger 访客 博客 注册 创建 博客用户 帖子 写 发表 评论

  17. Exercise:ExBlogger Visitor Blog Register Create User Post Create Create Ubiquitous Language 领域通用语言 Comment

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

  19. Exercise:ExBlogger IRepository<T> intSave(T entity); void Update(T entity); T Get(intid); IList<T> GetAll(); void Delete(intid); 通用持久化方法 IUsersRepository:IRepository<User> IBlogsRepository:IRepository<Blog> 自定义持久化方法 IPostsRepository:IRepository<Post> ICommentsRepository:IRepository<Comment>

  20. Exercise:ExBlogger 创建并存储用户 varuser = BlogRegistrar.GetInstance().CreateUser(“Mike", "pwd"); var id = _usersRepository.Save(user); 获取所有用户 varusers = _usersRepository.GetAll();

  21. Exercise:ExBlogger 创建并存储博客 varblog = user.CreateBlog("foo", "bar"); _blogsRepository.Save(blog); 创建并存储帖子 varpost = user.CreatePost("Hello World", "This my first post!") .On(blog); _postsRepository.Save(post);

  22. Exercise:ExBlogger 创建并存储评论 varcomment = user.CreateComment("沙发").On(post); _commentsRepository.Save(comment); 获取评论列表:组装自定义的DTO

  23. 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