More Related Content Similar to An introduce to n hibernate (part 1) pub Similar to An introduce to n hibernate (part 1) pub (20) An introduce to n hibernate (part 1) pub2. 内容
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
12. 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()
配
置
文
件
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>();
17. Exercise:ExBlogger
Visitor
Blog
Register
Create
User Create Post
Create
Ubiquitous Language
领域通用语言
Comment
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>
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);