目录

写在前面

nhibernate文档

搭建项目

映射文件

持久化类

辅助类

数据库设计与连接配置

测试

总结

写在前面

一年前刚来这家公司,发现项目中使用的ORM是Nhibernate,这个之前确实没接触过,EF多少在项目中用过,想着既然都是ORM,应该语法上都差不多。当时也就是硬着头皮上的,刚开始也只能通过模仿别人的代码,再加上自己的理解,一些增删改查的方法,确实也被自己给搞出来了,现在回头想想,在项目中,用到的那些方法基本上就一个样,很少有变化。除非有些业务逻辑非常强的,自己搞不定,问一下同事,还是可以解决的。到现在使用Nhibernate也很长时间,中间多少也查过一些资料,从网上下的nhibernate文档.docx,但是每次想去找的时候,总的在电脑上去找,比较麻烦,就干脆记录在博客中了,当时就是有哪些不明白的,可以很方便的从里面查,比如参数是什么含义。也总结了一些,在使用过程遇到的问题。

现在项目告一段落,坐等为客户去部署了,也就有那么点空闲时间,那就要系统的学习一下了。

发现在写这篇文章的时候,说了自己的一些学习方式,发现越写越多,就单独成篇了,也就有了这篇文章——如何高效的利用博客园?

上篇文章,也算是nhibernate学习的开篇吧。

nhibernate文档

[Nhibernate]体系结构

[NHibernate]ISessionFactory配置

[NHibernate]持久化类(Persistent Classes)

[NHibernate]O/R Mapping基础

[NHibernate]集合类(Collections)映射 

[NHibernate]关联映射

[NHibernate]Parent/Child

[NHibernate]缓存(NHibernate.Caches)

[NHibernate]NHibernate.Tool.hbm2net

[NHibernate]Nullables

[NHibernate]Nhibernate如何映射sqlserver中image字段

搭建项目

项目结构和映射文件

项目结构说明

采用传统三层架构

Wolfy.Shop.Domain:数据实体和数据库映射文件。也有人叫做领域层。

Wolfy.Shop.Data:数据层,存放数据库的操作及Nhibernate辅助类。引用Iesi.Collections.dll,NHibernate.dll和类库Wolfy.Shop.Domain

Wolfy.Shop.Business:业务逻辑类。引用类库项目Wolfy.Shop.Domain,Wolfy.Shop.Data

Wolfy.Shop.WebSite:测试项目。需引用Iesi.Collections.dll,NHibernate.dll和类库项目Wolfy.Shop.Domain,Wolfy.Shop.Business

Nhibernate最新版本为4.0.1.GA,下载地址:http://nhforge.org/

解压NHibernate-4.0.1.GA-bin.zip压缩包,内容如下:

其中Confiuration_Templates文件夹内包括:

这些xml内为数据库连接配置文件模版,通过上图也可以发现nhibernate支持的数据库种类还是很全的。主流的数据库已经都包括在内了。

那么,咱们打开MSSQL.cfg的文件看一下

 <?xml version="1.0" encoding="utf-8"?>
<!--
This template was written to work with NHibernate.Test.
Copy the template to your NHibernate.Test project folder and rename it in hibernate.cfg.xml and change it
for your own use before compile tests in VisualStudio.
-->
<!-- This is the System.Data.dll provider for SQL Server -->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="NHibernate.Test">
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">
Server=(local);initial catalog=nhibernate;Integrated Security=SSPI
</property>
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
</session-factory>
</hibernate-configuration>

通过上面的注释部分咱们可以得到一个信息,就是在项目中使用的话,需要将文件重命名为hibernate.cfg.xml.

添加引用

同样可以通过Nuget进行添加,如图:

持久化类

为客户实体创建持久化类

 namespace Wolfy.Shop.Domain.Entities
{
/// <summary>
/// 描述:客户实体,数据库持久化类
/// 创建人:wolfy
/// 创建时间:2014-10-16
/// </summary>
public class Customer
{
/// <summary>
/// 客户id
/// </summary>
public virtual Guid CustomerID { get; set; }
/// <summary>
/// 客户名字
/// </summary>
public virtual string CustomerName { get; set; }
/// <summary>
/// 客户地址
/// </summary>
public virtual string CustomerAddress { get; set; }
}
}

注意NHibernate默认使用代理功能,要求持久化类不是sealed的,而且其公共方法、属性和事件声明为virtual。在这里,类中的字段要设置为virtual,否则出现“

“NHibernate.InvalidProxyTypeException”类型的异常在 Wolfy.Shop.Data.dll 中发生,但未在用户代码中进行处理

其他信息: The following types may not be used as proxies:

Wolfy.Shop.Domain.Entities.Customer: method get_CustomerID should be 'public/protected virtual' or 'protected internal virtual'

Wolfy.Shop.Domain.Entities.Customer: method set_CustomerID should be 'public/protected virtual' or 'protected internal virtual'

Wolfy.Shop.Domain.Entities.Customer: method get_CustomerName should be 'public/protected virtual' or 'protected internal virtual'

Wolfy.Shop.Domain.Entities.Customer: method set_CustomerName should be 'public/protected virtual' or 'protected internal virtual'

”异常。

编写映射文件

编写NHibernate配置文件智能提示的功能。只要在下载的NHibernate里找到configuration.xsd和nhibernate-mapping.xsd两个文件并复制到vs安装目录下,如C:\Program  Files\Microsoft Visual Studio 9.0\Xml\Schemas目录即可。

此时,你在nhibernate的配置文件中就有智能提示功能了。

nhibernate如何知道持久化类和数据库表的对应关系的呢?这就要通过映射文件来完成这个任务了,映射文件包含了对象/关系映射所需的元数据。元数据包含持久化类的声明和属性到数据库的映射。映射文件告诉nhibernate它应该访问数据库里面的哪个表及使用表里面的哪些字段。

那么我们编写Customer持久化类的映射文件,注意映射文件以.hbm.xml结尾。如Customer.hbm.xml

 <?xml version="1.0" encoding="utf-8" ?>
<!--assembly:程序集,namespace:命名空间-->
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Wolfy.Shop.Domain" namespace="Wolfy.Shop.Domain.Entities">
<class name="Wolfy.Shop.Domain.Entities.Customer,Wolfy.Shop.Domain" table="TB_Customer">
<!--主键-->
<id name="CustomerID" type="Guid" unsaved-value="null">
<column name="CustomerID" sql-type="uniqueidentifier" not-null="true" unique="true"/>
<generator class="assigned"></generator>
</id>
<property name="CustomerName" type="String">
<column name="CustomerName" sql-type="nvarchar" not-null="false"/>
</property>
<property name="CustomerAddress" type="String">
<column name="CustomerAddress" sql-type="nvarchar" not-null="false"/>
</property> </class>
</hibernate-mapping>

这些东西该怎么记?记住根节点hibernate,并且映射文件中要有主键id和property节点就可以了,其他的依赖vs的智能提示,就可以了。
这里需要养成一个习惯,就写好映射文件,需要修改它的属性

否则会出现,如下错误,而这个错误也是使用nhibernate最常见,所以养成一个好习惯,能提高你的开发效率:

辅助类

在使用之前,需要通过ISessionFactory获得ISession,ISessionFactory的详细介绍可以参考文档[NHibernate]ISessionFactory配置 ,ISessionFactory是线程安全的,而ISession是非线程安全的。很多线程可以同时访问ISessionFactory,所以ISession要通过ISessionFactory打开,在所有的工作完成后,需要关闭。ISessionFactory通常是个线程安全的全局对象,只需要被实例化一次(可以使用单例模式)。这里编写一个简单的辅助类NHibernateHelper,用于创建ISessionFactory和配置ISessionFactory,并打开一个新的ISession的方法。代码如下:

 using NHibernate;
using NHibernate.Cfg;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace Wolfy.Shop.Data
{
/// <summary>
/// 描述:nhibernate辅助类
/// 创建人:wolfy
/// 创建时间:2014-10-16
/// </summary>
public class NHibernateHelper
{
private ISessionFactory _sessionFactory;
public NHibernateHelper()
{
//创建ISessionFactory
_sessionFactory = GetSessionFactory();
}
/// <summary>
/// 创建ISessionFactory
/// </summary>
/// <returns></returns>
public ISessionFactory GetSessionFactory()
{
//配置ISessionFactory
return (new Configuration()).Configure().BuildSessionFactory();
}
/// <summary>
/// 打开ISession
/// </summary>
/// <returns></returns>
public ISession GetSession()
{
return _sessionFactory.OpenSession();
}
} }

这里需引入命名空间:NHibernate和NHibernate.Cfg。

数据库设计与连接配置

数据表设计如图所示:

创建数据表的sql

 USE [master]
GO
/****** Object: Database [Shop] Script Date: 2014/11/2 11:28:05 ******/
CREATE DATABASE [Shop]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'Shop', FILENAME = N'F:\Database\Shop.mdf' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'Shop_log', FILENAME = N'F:\Database\Shop_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
ALTER DATABASE [Shop] SET COMPATIBILITY_LEVEL = 110
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [Shop].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [Shop] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [Shop] SET ANSI_NULLS OFF
GO
ALTER DATABASE [Shop] SET ANSI_PADDING OFF
GO
ALTER DATABASE [Shop] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [Shop] SET ARITHABORT OFF
GO
ALTER DATABASE [Shop] SET AUTO_CLOSE OFF
GO
ALTER DATABASE [Shop] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [Shop] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [Shop] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [Shop] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [Shop] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [Shop] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [Shop] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [Shop] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [Shop] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [Shop] SET DISABLE_BROKER
GO
ALTER DATABASE [Shop] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [Shop] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [Shop] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [Shop] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [Shop] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [Shop] SET READ_COMMITTED_SNAPSHOT OFF
GO
ALTER DATABASE [Shop] SET HONOR_BROKER_PRIORITY OFF
GO
ALTER DATABASE [Shop] SET RECOVERY FULL
GO
ALTER DATABASE [Shop] SET MULTI_USER
GO
ALTER DATABASE [Shop] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [Shop] SET DB_CHAINING OFF
GO
ALTER DATABASE [Shop] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF )
GO
ALTER DATABASE [Shop] SET TARGET_RECOVERY_TIME = 0 SECONDS
GO
USE [Shop]
GO
/****** Object: Table [dbo].[TB_Customer] Script Date: 2014/11/2 11:28:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TB_Customer](
[CustomerID] [uniqueidentifier] NOT NULL,
[CustomerName] [nvarchar](16) NULL,
[CustomerAddress] [nvarchar](128) NULL,
[Version] [int] NOT NULL,
CONSTRAINT [pk_customerid] PRIMARY KEY CLUSTERED
(
[CustomerID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] GO
/****** Object: Table [dbo].[TB_Order] Script Date: 2014/11/2 11:28:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TB_Order](
[OrderID] [uniqueidentifier] NOT NULL,
[CustomerID] [uniqueidentifier] NULL,
[OrderDate] [datetime] NULL,
CONSTRAINT [PK_TB_Order] PRIMARY KEY CLUSTERED
(
[OrderID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] GO
/****** Object: Table [dbo].[TB_OrderProduct] Script Date: 2014/11/2 11:28:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TB_OrderProduct](
[OrderID] [uniqueidentifier] NOT NULL,
[ProductID] [uniqueidentifier] NOT NULL
) ON [PRIMARY] GO
/****** Object: Table [dbo].[TB_Product] Script Date: 2014/11/2 11:28:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TB_Product](
[ProductID] [uniqueidentifier] NOT NULL,
[Name] [nvarchar](128) NULL,
[Price] [decimal](18, 0) NULL,
CONSTRAINT [PK_TB_Product] PRIMARY KEY CLUSTERED
(
[ProductID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] GO
ALTER TABLE [dbo].[TB_Customer] ADD DEFAULT ((1)) FOR [Version]
GO
ALTER TABLE [dbo].[TB_Order] WITH CHECK ADD CONSTRAINT [FK_TB_Order_TB_Customer] FOREIGN KEY([CustomerID])
REFERENCES [dbo].[TB_Customer] ([CustomerID])
GO
ALTER TABLE [dbo].[TB_Order] CHECK CONSTRAINT [FK_TB_Order_TB_Customer]
GO
ALTER TABLE [dbo].[TB_OrderProduct] WITH CHECK ADD CONSTRAINT [FK_TB_OrderProduct_TB_Order] FOREIGN KEY([OrderID])
REFERENCES [dbo].[TB_Order] ([OrderID])
GO
ALTER TABLE [dbo].[TB_OrderProduct] CHECK CONSTRAINT [FK_TB_OrderProduct_TB_Order]
GO
ALTER TABLE [dbo].[TB_OrderProduct] WITH CHECK ADD CONSTRAINT [FK_TB_OrderProduct_TB_Product] FOREIGN KEY([ProductID])
REFERENCES [dbo].[TB_Product] ([ProductID])
GO
ALTER TABLE [dbo].[TB_OrderProduct] CHECK CONSTRAINT [FK_TB_OrderProduct_TB_Product]
GO
USE [master]
GO
ALTER DATABASE [Shop] SET READ_WRITE
GO

nhibernate配置,也就是数据库配置:

这里使用的是SQL Server2012,所以我们使用MSSQL.cfg.xml文件,重命名为hibernate.cfg.xml.

注意需根据自己数据库的实例名修改,并添加mapping节点,其他的设置,可根据需要进行添加。这里采用最简单的一种方式,关于nhibernate的配置参数,可参考文档中的说明。

  1 <?xml version="1.0" encoding="utf-8" ?>
2 <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
3 <session-factory>
4 <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
5 <property name="connection.connection_string">
6 server=.;database=shop;uid=sa;pwd=sa
7 </property>
8 <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
9 <mapping assembly="Wolfy.Shop.Domain"/>
10 </session-factory>
11 </hibernate-configuration>

修改后,将hibernate.cfg.xml拷入Wolfy.Shop.WebSite项目,并修改其属性:

否则会出现如下异常:

数据层和业务逻辑层代码

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Wolfy.Shop.Domain.Entities;
using NHibernate;
using NHibernate.Linq;
using NHibernate.Cfg;
using System.Linq.Expressions;
namespace Wolfy.Shop.Data
{
/// <summary>
/// 描述:客户数据层类,操作数据库
/// 创建人:wolfy
/// 创建时间:2014-10-16
/// </summary>
public class CustomerData
{
/// <summary>
/// 添加客户
/// </summary>
/// <param name="customer">客户实体</param>
/// <returns>是否添加成功 </returns>
public bool AddCustomer(Customer customer)
{ try
{
NHibernateHelper nhibernateHelper = new NHibernateHelper();
var session = nhibernateHelper.GetSession();
session.SaveOrUpdate(customer);
session.Flush();
return true;
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 根据条件得到客户信息集合
/// </summary>
/// <param name="where">条件</param>
/// <returns>客户信息集合</returns>
public IList<Customer> GetCustomerList(Expression<Func<Customer, bool>> where)
{
try
{
NHibernateHelper nhibernateHelper = new NHibernateHelper();
ISession session = nhibernateHelper.GetSession();
return session.Query<Customer>().Where(where).ToList();
}
catch (Exception ex)
{
throw ex;
}
}
}
}
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Wolfy.Shop.Data;
using Wolfy.Shop.Domain.Entities; namespace Wolfy.Shop.Business
{ /// <summary>
/// 描述:客户信息业务逻辑层
/// 创建人:wolfy
/// 创建时间:2014-10-17
/// </summary>
public class CustomerBusiness
{
private CustomerData _customerData;
public CustomerBusiness()
{
_customerData = new CustomerData();
}
/// <summary>
/// 添加客户
/// </summary>
/// <param name="customer">客户实体</param>
/// <returns>是否添加成功 </returns>
public bool AddCustomer(Customer customer)
{
return _customerData.AddCustomer(customer);
}
/// <summary>
/// 根据条件得到客户信息集合
/// </summary>
/// <param name="where">条件</param>
/// <returns>客户信息集合</returns>
public IList<Customer> GetCustomerList(Expression<Func<Customer, bool>> where)
{
return _customerData.GetCustomerList(where);
}
}
}

测试

为了以后使用方便,在这里使用webform项目作为测试,通过单击“添加”按钮,向数据库中插入记录,

页面

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CustomerManager.aspx.cs" Inherits="Wolfy.Shop.WebSite.CustomerManager" %>

 <!DOCTYPE html>

 <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">
.main {
border: 1px solid #0094ff;
margin: 50px auto;
width: 600px;
} .table {
border: 1px solid #0094ff;
border-collapse: collapse;
width: 98%;
text-align: center;
margin:5px auto;
} .table th {
background-color: lightgray;
}
.table tr td {
border: 1px solid #0094ff;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="main">
<asp:Button runat="server" ID="btnAdd" Text="添加" OnClick="btnAdd_Click" />
<div>
<asp:Repeater runat="server" ID="rptCustomerList">
<HeaderTemplate>
<table class="table">
<tr>
<th>姓名</th>
<th>姓名</th>
<th>地址</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#Container.ItemIndex+1 %></td>
<td><%#Eval("CustomerName") %></td>
<td><%#Eval("CustomerAddress") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</div>
</form>
</body>
</html>

CustomerManager。aspx

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Wolfy.Shop.Domain.Entities; namespace Wolfy.Shop.WebSite
{
public partial class CustomerManager : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
RepeaterDataBind();
}
}
private void RepeaterDataBind()
{
Business.CustomerBusiness customerBusiness = new Business.CustomerBusiness();
this.rptCustomerList.DataSource = customerBusiness.GetCustomerList(c => == );
this.rptCustomerList.DataBind();
}
/// <summary>
/// 添加客户信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnAdd_Click(object sender, EventArgs e)
{
var customer = new Customer() { CustomerName = "wolfy", CustomerAddress = "北京 海淀", CustomerID = Guid.NewGuid() };
Business.CustomerBusiness customerBusiness = new Business.CustomerBusiness();
if (customerBusiness.AddCustomer(customer))
{
this.RepeaterDataBind();
}
}
}
}

CustomerManager.aspx.cs

界面

通过SQL Server Profiler查看生成的sql语句

通过监控到的sql语句,也可以看到使用nhibernate插入数据时,数据库中是通过存储过程进行插入数据的。

总结

本文简单介绍了使用nhibernate的一些配置,给我的感觉是,在使用时只要配置正确,其他的增删改查什么的也就没什么难的了。在配置nhibernate的时候,有些细节需要注意。比如映射文件和nhibernate的配置文件的属性需要进行修改。

参考文章

http://www.cnblogs.com/lyj/archive/2008/10/14/1310913.html#comment_tip

[NHibernate]基本配置与测试的更多相关文章

  1. 一步步学习NHibernate(2)——配置NHibernate的环境

    请注明转载地址:http://www.cnblogs.com/arhat 第二章 环境搭建 在上一章中,我们知道了NHibernate是用来干什么的了,那么今天在本章中,我们开始搭建NHibernat ...

  2. 四步完成NodeJS安装,配置和测试

    四步完成NodeJS安装,配置和测试 NodeJS 官网地址: http://nodejs.org/ 第一步:在官网点击 ’ INSTALL ’,下载相应的版本(我的机器是Win7专业版 64bit) ...

  3. WIN7环境下CUDA7.5的安装、配置和测试(Visual Studio 2010)

    以下基于"WIN7(64位)+Visual Studio 2010+CUDA7.5". 系统:WIN7,64位 开发平台:Visual Studio 2010 显卡:NVIDIA ...

  4. NHibernate 基本配置 (第一篇)

    使用NHibernate最重要的一步就是配置,如果连NHibernate都还没有跑的起来,谈何学习.今天就来详解一下NHibernate的配置. 一.NHibernate基本配置 NHibernate ...

  5. freeRadius 基础配置及测试

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...

  6. myBatis 基础测试 表关联关系配置 集合 测试

    myBatis 基础测试 表关联关系配置 集合 测试 测试myelipse项目源码 sql 下载 http://download.csdn.net/detail/liangrui1988/599388 ...

  7. ubuntu10.10 tftp安装,配置,测试

    ubuntu10.10 tftp安装,配置,测试 成于坚持,败于止步 虽然ubuntu/centos/redhat都是linux,但是内核其中存在一定的修改,所以对于tftp服务器的安装存在不同的命令 ...

  8. 大数据测试之hadoop集群配置和测试

    大数据测试之hadoop集群配置和测试   一.准备(所有节点都需要做):系统:Ubuntu12.04java版本:JDK1.7SSH(ubuntu自带)三台在同一ip段的机器,设置为静态IP机器分配 ...

  9. Oracle RAC 11g DG Broker配置和测试

    Oracle RAC 11g DG Broker配置和测试 之前在<RHEL6.4 + Oracle 11g DG测试环境快速搭建参考>已经简单说过. 本篇在实验环境中实际配置 环境: R ...

随机推荐

  1. java强引用、软引用、弱引用、虚引用

    前言概述 在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象.这就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清洁工人收走 ...

  2. CML相关

    !!:执行上一条命令 !blah:执行最近的以 blah 开头的命令,如 !ls !blah:p:仅打印输出,而不执行 !$:上一条命令的最后一个参数,与 Alt + . 相同 !$:p:打印输出 ! ...

  3. Mysql 主从热备份

    工作原理 首先锁定并备份主服务器数据库,从服务器导入备份的数据库,实现两个数据库的初态一样.然后把主服务器上执行过的sql语句都记录到二进制日志 Binarylog 中,从服务器会来读取这个log, ...

  4. java笔记

    ANT概述:http://www.blogjava.net/amigoxie/archive/2007/11/09/159413.html http://baitai.iteye.com/blog/7 ...

  5. 电脑控制Android设备的软件——Total Control

    最早开始搞Android开发时,为了调试方便,想找一个Android下的远程控制软件,支持在电脑端远程控制和同步显示Android设备.先后试了360手机助手.Mobizen.Vysor和Mirror ...

  6. Java反射特性--获取其他类实例并调用其方法

    1. 代码结构 .├── com│   └── test│   └── MyTest.java└── MainCall.java 2. 代码内容 MyTest.java: package com.te ...

  7. jdbc java数据库连接 1)jdbc入门

      之前操作数据 1)通过mysql的客户端工具,登录数据库服务器  (mysql -u root -p 密码) 2)编写sql语句 3)发送sql语句到数据库服务器执行 什么是jdbc? 使用jav ...

  8. 微博公众平台(二)-- Token验证代码

    Token,验证逻辑:1.将Token.timestamp.nonce放入数组 2.将数组从小到大排列 3.将数组按顺序拼装成一个字符串 4.对生成的字符串进行SHA1加密 5.将密文转换为小写 6. ...

  9. IoC模式(依赖、依赖倒置、依赖注入、控制反转)

    1.依赖 依赖就是有联系,有地方使用到它就是有依赖它,一个系统不可能完全避免依赖.如果你的一个类或者模块在项目中没有用到它,恭喜你,可以从项目中剔除它或者排除它了,因为没有一个地方会依赖它.下面看一个 ...

  10. php 字符串和数字比较一些问题

    本文章来给大家介绍关于php 字符串和数字比较一些问题,因为数字与字符在php中是不同的数据类型,所以在比较时可能会有很多的问题. ,1,2等等,其中0标示成功,其他表示不同的错误代码.程序通过 if ...