Nhibernate 在项目中的位置
Nhibernate 是一个对象持久化框架,所谓持久化就是把数据保存在文件或关系数据库中.
哪么Nhibernate 处于在持久化过程中的中间层,他负责把成功映射的对象转换成相应的SQL语句.
再对数据库作增删改查操作,其中HQL是他内部的查询规则语句,哪么它到底有什么优势,为什么要用HQL呢?
优点:
1.对于一个大型的项目,开发人员是否对于数据层有所恐惧,为什么我们一直在写着简单,
但又不得不写的语句,比如 Select * from A where id=@id ,
哪么如果我们项目层次又很多.数据层写一个方法,工厂又要加上一个实例数据层的方法,
然后业务层又写一个对应的方法,这样开发下去.整洁统一干净的结构带来了巨大的工作量成本,
让开发人员重复着大量的相似代码.有了NHibernate 这些SQL语句,和方法都大大减少,
当项目的数据库表数量不断增大,哪么这种优势越发突显.因为我们只要 " 映射 " 只要有了对象,
和对象跟表结构的映射,哪么其它的工作都交给NHibernate 吧
两个文件 :
1.实体类
2.实体类映射到表结构的xml文件.
我认为Nhibernate 最大特点是对象映射,
如果没有了对象映射哪么它就失去了灵魂.
所以理解映射是灵活使用Nhibernate 的关键.
让我们来先看看概念:
1.在NHibernate 持久层中每个实体模型都对应了数据库中的一个表,
每个属性都对应了表中的一个字段,每个实体对象对应了表中的一条记录。
使用NHibernate 时数据库设计的一些想法
1.在设计表结构时,保证每一个表都必须有主键
2.在字段名字的定义上,最好不要用下划线,全部使用英文,
个人建议使用首字母大写的缩写形式
安全问题:
不用担心NHibernate会被SQL注入,事实上他的注入风险要远低于你直接手写的风险,
当开发人员累了是否不经意写出类似这种代码 : string sql = "select * from a where id=" + id;
也许这种语句是你不想的.他破坏了你的原则"只用参数",但确写在了程序里.增加了风险,
而NHibernate 的概念 对象属性永远对应着 表字段 当你的查询会被转成 类似这种 where id=@id;
风险降低!