Presentation is loading. Please wait.

Presentation is loading. Please wait.

An Introduce to NHibernate

Similar presentations


Presentation on theme: "An Introduce to NHibernate"— 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 ? Modeling mismatch Productivity and maintainability Performance Database independency ORM

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

9 对象 关系 活动的熊 冬眠的熊 让开发者更关注对象的设计! Hibernate 关注点 Hibernate: Java
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 IQuery ISQLQuery ICriteria IQueryOver IQueryable HQL SQL Dynamically LINQ

12 配置文件 Core NHibernate Types NHibernate.Cfg.Configuration
Configuration Configure() Configuration Configure(string fileName) Configuration Configure(Assembly assembly, string resourceName) Configuration Configure(XmlReader textReader) // 构建 ISessionFactory 的实例 ISessionFactory BuildSessionFactory() 配置文件

13 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)

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 访客可以注册成用户 用户可以创建自己的博客 用户可以在自己的博客里写帖子 用户可以评论帖子 使用NHibernate框架持久化对象
Exercise:ExBlogger 目标:多用户博客程序 访客可以注册成用户 用户可以创建自己的博客 用户可以在自己的博客里写帖子 用户可以评论帖子 使用NHibernate框架持久化对象

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

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

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

19 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>

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

21 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);

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

23 Thanks ! 示例代码SVN地址: http://ex-blogger.googlecode.com/svn/trunk/ 推荐资料:
李永京博客 领域驱动设计精简版


Download ppt "An Introduce to NHibernate"

Similar presentations


Ads by Google