摘要 前面文章介绍了NHibernate对简单.net数据类型的映射对照表.NHibernate也可以映射复杂数据类型,这里介绍通过组件映射NHibernate值对象. 1. NHibernate引用对象和NHibernate值对象 NHibernate引用对象:指的是具有主键值的NHibernate实体对象,他必须是另一个NHibernate实体对象的属性.他所属的对象也可以理解为主对象,有一个从属的指向关系.例如:Order对象有个属性Customer,表示这个Order对象是属于哪个Cus…
摘要 上一节对NHibernate二级缓存做了简单介绍,NHibernate二级缓存是由SessionFactory管理的,所有Session共享.这一节介绍二级缓存其他两个方面:二级缓存查询和二级缓存管理. 1. NHibernate二级缓存查询 NHibernate二级缓存查询是指NHibernate将查询记录的集合放到二级缓存中,之后每次查询都可以从二级缓存中拿查询记录信息. 二级缓存使用步骤: 1)在hibernate.cfg.xml文件中,使用cache.use_query_cache…
摘要 这篇文章介绍NHibernate最实用的内容:关系映射. NHibernate的关系映射方式有三种: Set:无序对象集合,集合中每一个元素不能重复. List:有序对象集合,集合中的元素可以重复. Bag:无序对象集合,集合中的元素可以重复. Map:键值对集合,相当于Hashtable或Dictionary. 这篇文章以一对多关系为例,介绍怎样在NHibernate中建立一对多关系映射.一对多关系是在现实项目中最经常碰到的一种关系.后面文章介绍多对多关系. 这篇文章的附件:NHiber…
摘要 NHibernate是一个成熟的开源的面向对象的.net映射框架.大量的实际项目中正在使用该框架.他是建立在ADO.Net基础之上.目前的版本是NHibernate 4.0.4.本系列文章都是基于NHibernate 4.0版本. 1. 什么是ORM? ORM指Object Relational Mapping.他是一种让你可以在面向对象和关系数据库之间互相映射的技术. 现实世界中,每个事物都是对象.我们称具有自己数据属性的事物为对象. 关系世界都是以集合为基础的表和数据行记录.这不同于面…
摘要 NHibernate的Session的管理涉及到NHibernate的两个最重要的对象ISessionFactory和ISession.ISessionFactory的生成非常消耗资源,通常都在应用程序启动的时候生成,并使用单例模式,被应用程序的所有线程共享.ISession的生成虽然没有ISessionFactory那么消耗资源,但是Session中保存了一级缓存池,如果每次使用到ISession的时候都生成新的ISession对象,而且这样的操作频率很大的时候,也会一定程度上大量消耗内…
摘要 Nhibernatea缓存非常强大,按照缓存存储在Session对象还是SessionFactory对象分为一级缓存和二级缓存. 一级缓存存在于Session对象里,也叫Session缓存,由Session进行管理.一级缓存是NHibernate内置的缓存. 二级缓存存在于SessionFactory对象里,也叫SessionFactory缓存,由SessionFactory进行管理,并且有大量的第三方dll对他进行扩展,他是一种“可插拔式”的缓存. 这一节主要讲一级缓存,后面一篇文章介绍…
摘要 在实际的项目中,经常是将NHibernate的实体关系映射类做成独立的工程(assembly dll),只对外提供Session调用的接口.这个程序集作为数据访问层,可以被上面的多个工程(ASP.Net.Windows Form.Windows Serviice等)调用. 这篇文章介绍如何设计NHibernate数据访问层的工程,以及如何架构数据访问层和上面的应用层的关系. 本文章的所有代码可以到第一个NHibernate程序下载. 步骤: 1)为了后面文章的程序演示方便,删除Custom…
摘要 NHibernate提供两个方法按主键值查找对象:Load/Get. 1. Load/Get方法的区别 Load: Load方法可以对查询进行优化. Load方法实际得到一proxy对象,并不立即查询数据库.当访问对象的属性的时候才查询数据库.在NHibernate里称为Lazy Loding(延迟加载). Load方法得到的对象,如果对象不存在,在访问对象的属性时将抛出异常. 当需要得到实体对象,但是不需要访问对象属性的时候,宜使用Load方法.比如Delete方法: private s…
摘要 NHibernate实现事务机制非常简单,调用ISession.BeginTransaction()开启一个事务对象ITransaction,使用ITransaction.Commit()提交事务,使用ITransaction.Rollback()回滚事务. 标准NHibernate事务代码: using (var session = SessionFactory.OpenSession()) { using (var transaction = session.BeginTransact…
摘要 NHibernate的多对多关系映射由many-to-many定义. 从这里下载本文的代码NHibernate Demo 1.修改数据库 添加Product表 添加ProductOrder表 数据库表之间的关系: Product和Order之间的关系是多对多关系,一条订单上有多个产品,一个产品可以有多个订单.多对多关系中的中间表(这里是ProductOrder表)不需要在关系映射中定义实体类和映射文件. 实际项目中,Product和Order之间应该不是这种简单的多对多关系,而是有个“订单…
摘要 NHibernate的二级缓存由SessionFactory管理,由所有Session共享. NHibernate缓存读取顺序: 首先从一级缓存中读取,如果一级缓存对象存在,则读取一级缓存对象并返回 如果一级缓存对象不存在,则读二级缓存. 如果二级缓存对象存在,则读取二级缓存里的对象并返回 如果二级缓存对象不存在,则读数据库 二级缓存一般存储不发生变化的数据,如果数据经常要进行修改删除操作,不宜使用缓存 1. NHibernate二级缓存设置 NHibernate的二级缓存在hiberna…
摘要 在同一时刻数据访问量和更新次数比较大的系统中,产生了数据的并发访问问题.并发访问使得在这样的环境中,所有用户(程序.实际用户.进程.线程等)的操作不产生负面问题. 如果不使用并发,在两个用户同时写同一条数据的时候,最后结果是不确定的.不使用并发的时候两个客户同时删除同一条数据,将产生异常终止程序. 并发控制方式有两种:悲观并发控制和乐观并发控制,NHibernate使用乐观并发控制.这篇文章首先介绍这两种策略,然后详细介绍NHibernate的乐观并发控制. 1. 悲观并发控制和乐观并发控…
摘要 有三种方式可以实现NHibernate运行时监控,监控的信息包括:执行了的SQL语句.NHibernate执行过程.数据库性能分析.这对我们学习NHibernate有很大的帮助,在工作中也能快速定位问题,最好是能够掌握他们. 1. LogSqlInConsole 修改上一节的SessionFactory属性,添加行x.LogSqlInConsole = true; public static ISessionFactory SessionFactory { get { if (_sessi…
摘要 NHibernate支持所有的数据库数据类型. 以SQL Server数据库为例,下表是NHibernate支持的SQL Server数据库最常见的数据类型对照表. 第一列是NHibernate映射文件内type属性值,第二列是对应的.Net的POCO类属性数据类型,第三列是数据库字段类型. NHibernate映射类型   .Net数据类型   数据库数据类型   Int16 System.Int16 DbType.Int16 Int32 System.Int32 DbType.Int3…
摘要 对于批量插入和批量修改数据,通过设置NHibernate配置文件的BatchSize属性,可以大量减少NHibernate与数据库交互的次数. 1. Batch属性介绍 设置了BatchSize属性后,NHibernate将对批量的Insert/Update操作进行自动分组,按分组提交到数据库,大量减少了与数据库交互的次数. NHibernate目前只支持对SQL Server数据库和Oracle数据库的批量Insert/Update操作进行BatchSize优化. 对于Insert操作,…
摘要 NHibernate对象持久化 NHibernate对象的三个状态:临时态.持久态.游离态(托管态) NHibernate三状态的相互转化 1. NHibernate对象持久化 NHibernate的对象持久化是指将NHibernate的POCO对象写入到持久化对象集合,POCO对象变成持久化状态,以及从数据库中用NHibernate查询出POCO对象,写入到持久化对象集合,查询出的POCO对象具有持久化状态的过程. NHibernate用XML映射的实体对象类符合POCO(简单传统CLR…
作者按:因为教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十五):开发模式与 webpack-dev-server>原文地址.更欢迎来我的小站看更多原创内容:godbmw.com,进行"姿势"交流 ♪(^∇^*) 0. 课程介绍和资料 >>>本节课源码 >>>所有课程源码 本节课的代码目录如下: 本节课用的 plugin 和 loader 的配置文件package.json如下: { &q…
Bootstrap入门(十五)组件9:面板组件 虽然不总是必须,但是某些时候你可能需要将某些 DOM 内容放到一个盒子里.对于这种情况,可以试试面板组件. 1.基本实例 2.带标题的面板 3.情景效果 4.代表格的面板 5.带列表组的面板 先引入本地的CSS文件 <link href="bootstrap.min.css" rel="stylesheet"> 1.基本实例 我们先来创建一个基本的面板实例,在容器div中新建一个属性为panel,样式制定为…
Java 设计模式系列(十五)观察者模式(Observer) Java 设计模式系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Java 设计模式系列(十五)观察者模式(Observer) Java 设计模式系列(十五)Spring 中的监听器模式 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Model/View)模式.源-监听器(Source/Listener)模式或从属者(D…
Java 设计模式系列(十五)迭代器模式(Iterator) 迭代器模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象(internal representation). 一.实现自己的迭代器 public class MyArrayList<T> implements Iterable<T> { private Object[] elements = {"java", "python&…
摘要 NHibernate提供了多种查询方式,最早的HQL语言查询.Criteria查询和SQL Query,到NHibernate 3.0的Linq NHibernate,NHIbernate 4.0又添加了Query Over.每种方式各有优缺点,任何一个SQL查询可以使用任何查询方式查询.根据程序员每种方式掌握的情况,可以使用不同的查询方式.本篇文章介绍HQL语言查询.HQL(Hibernate Query Language)是NHibernate特有的面向对象查询语言,他具有继承.多态的…
第一章:NHibernate基础 NHibernate介绍 第一个NHibernate工程 简单的增删改查询 运行时监控 NHibernate配置 数据类型映射 Get/Load方法 NHibernate批量更新 NHibernate事务 NHibernate组件 使用程序集管理NHibernate项目 NHibernate Session管理 第二章:NHibernate对象状态.缓存与并发控制 NHibernate对象状态 NHibernate一级缓存 NHibernate二级缓存上 NHi…
摘要 这篇文章介绍了如何创建一个简单的使用NHibernate的控制台应用程序,包括使用NuGet.简单的配置.单表映射.对NHibernate配置文件添加智能提示.使用ISessionFactory和ISession. 1. 环境准备 Visual Studio 2015.SQL Server 2008或者SQL Server 2008 R2. 2. 创建工程 1)创建空控制台应用程序NHibernateDemoApp. 2)添加NHibernate到工程.右键NHibernateDemoAp…
http://dong2008hong.blog.163.com/blog/static/4696882720140322449780/ Unity3D脚本中文系列教程(十四) ◆ LightRenderMode.Auto 描述: 自动选择渲染模式. 选择是否渲染这个Light为像素光或者顶点光源(建议缺省). // 设置光源的渲染模式为自动 light.renderMode = LightRenderMode.Auto; 参见: light组件 ◆ LightRenderMode.ForceP…
上篇的续集. 工具: Idea201902/JDK11/Gradle5.6.2/Mysql8.0.11/Lombok0.27/Postman7.5.0/SpringBoot2.1.9/Nacos1.1.3/Seata0.8.1/SeataServer0.8.1/Dubbo2.7.3 难度:新手--战士--老兵--大师 目标: 1.使用Seata实现storage模块的TCC模式的本地模式 2.使用Seata实现多级TCC模式 步骤: 为了更好的遇到各种问题,同时保持时效性,我尽量使用最新的软件版…
开始挑战第二十五关(Trick with OR & AND) 第二十五关A(Trick with comments) 0x1先查看源码 (1)这里的or和and采用了i正则匹配,大小写都无法绕过 (2)看下mysql逻辑运算符,and和or还可以使用&&和||,如下图: 0x2开始测试 (1)首先使用or和and看看,直接被过滤了 (2)那就直接改为||  &&利用,成功 (3)或者采用双写的方式来绕过oorr 剩下的注入方式都和以前同样,就不测试了.......…
开始挑战第十五关(Blind- Boolian Based- String)和 第十六关(Blind- Time Based- Double quotes- String) 访问地址,输入报错语句 '  ''  ')  ") -    ' and 1=1#  等使其报错 猜解字段名,这里是2个字段 union select联合查询,加入使其报错 使用报错函数也无用 使用时间函数试试,成功测试,存在时间盲注,注意,这里注释符--+不能使用,只能使用# 继续通过if语句进行猜解 后面怎么测试,参考G…
一.简介 Apache Flume 是一个分布式,高可用的数据收集系统,可以从不同的数据源收集数据,经过聚合后发送到分布式计算框架或者存储系统中.Spark Straming 提供了以下两种方式用于 Flume 的整合. 二.推送式方法 在推送式方法 (Flume-style Push-based Approach) 中,Spark Streaming 程序需要对某台服务器的某个端口进行监听,Flume 通过 avro Sink 将数据源源不断推送到该端口.这里以监听日志文件为例,具体整合方式如…
摘要 这一篇文章介绍在NHibernate 3.2里引入的Query Over查询,Query Over查询跟Criteria查询类似.首先创建IQueryOver对象,然后通过调用该对象的API函数,进行对象查询.这篇文章使用Query Over重写之前所有的查询. 本篇文章的代码可以到NHibernate查询下载 1.创建IQueryOver对象,返回所有Customer信息 public IList<Customer> QueryAllOver() { return Session.Qu…
摘要 上一篇文章介绍了Fluent NHibernate基础知识.但是,Fluent NHibernate提供了一种更方便的Mapping方法称为Auto Mapping.只需在代码中定义一些Convention继承类,针对具体的属性.主键.关系.组件指定Mapping的规则,在实体类里定义简单的POCO对象就可以完成整个数据库的自动映射.Auto Mapping适合全新的系统开发,即是在系统设计时还没有数据库的时候.有点像Microsoft Entity Framework的Code Firs…