an introduce to nhibernate
DESCRIPTION
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. 设计 数据模型. - PowerPoint PPT PresentationTRANSCRIPT
LOGO
An Introduce to NHibernatePART 1
J 九日
内容SQL Helper vs. NHibernate Object-Relational Mapping
关系模型 为什么使用 ORM?
Hibernate 含义NHibernate Mapping核心类型Exercise: ExBlogger
SQL Helper vs. NHibernate
设计数据表设计数据模型
编写 SQL
创建数据对象上层应用 /Business Logic
Working with SQL Helper
以数据表为核心 模型仅为装载数据 底层可能包含业务逻辑 底层与上层关系紧密 受 PetShop4 的影响
“Data-Driven Design”
太暧昧
前期的设计很可能面目全非
SQL Helper vs. NHibernate
Working with NHibernate
设计应用服务契约
设计资源库契约NHibernate 资源库实现设计数据表
各种应用程序
Cache
Search
NoSQL 以业务对象为核心 资源库不关心业务逻辑 应用层不关心契约实现 促进面向契约编程Domain-Driven Design
解决 O-R 不对称,转移主要关注点! 设计业务领域对象
Object-Relational Mapping
Relational Model
Relation
Relation
Relation
Object-Relational Mapping
Relational Model Concepts
关系数据库( Relational Database )是建立在关系模型上的数据库; 一个数据表“就是”一个关系( Relation ); 表(关系)之间通过“键”连接;
Object-Relational Mapping
Why ORM ?
Modeling mismatch
Productivity and
maintainability
Performance Database independency
ORM
Hibernate
Hibernate: 休眠、冬眠
活动的熊 冬眠的熊Hibernate
Hibernate
Hibernate: a Java ORM Framework
对象 关系Hibernate
冬眠的熊Hibernate 活动的熊
关注点Hibernate: Java
NHibernate: .NET
让开发者更关注对象的设计!
NHibernate Mapping
Mapping
嵌入的资源
Core NHibernate Types
Configuration ISessionFactory
ISession
IQuery
Build (Once)
ISession ……
Open Session
ISQLQuery ICriteria IQueryOver
HQL SQL
IQueryable
Create
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 itISession OpenSession()ISession OpenSession(IDbConnection conn)ISession OpenSession(IInterceptor sessionLocalInterceptor)NHibernate.ISessionobject 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
Criteria Query
ISession 查询示例:查询所有用户Session.CreateCriteria<User>().List<User>();
Strong-typed Criteria Query
Session.QueryOver<User>().List<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>();
Session.Query<User>().ToList<User>();
NHibernate Linq Query
Exercise:ExBlogger
目标:多用户博客程序访客可以注册成用户用户可以创建自己的博客用户可以在自己的博客里写帖子用户可以评论帖子使用 NHibernate 框架持久化对象
Exercise:ExBlogger
访客
博客用户
博客
帖子
评论
注册 创建写
发表
Exercise:ExBlogger
Visitor
User
Blog
Post
Comment
Register Create
Create
Create
Ubiquitous Language领域通用语言
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
获取评论列表:组装自定义的 DTO
var comment = user.CreateComment(" 沙发 ").On(post);_commentsRepository.Save(comment);
创建并存储评论
Thanks !
示例代码 SVN 地址:http://ex-blogger.googlecode.com/svn/trunk/
推荐资料:李永京博客http://www.cnblogs.com/lyj/
领域驱动设计精简版http://www.infoq.com/cn/minibooks/domain-driven-design-quickly