为初学者写ORM,ORM的原理及测试案例

提纲

一、什么是ORM。
二、反射以及Attribute在ORM中的应用。
三、创建一个数据库表和表对应的实体model。
四、实体model如何映射出数据库表。
五、组合ORM映射生成insert语句。
六、测试ORM的插入映射。
七、总结。

内容:

一 、什么是ORM?

概念: 对象关系映射(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

详细介绍:  让我们从O/R开始。字母O起源于"对象"(Object),而R则来自于"关系"(Relational)。几乎所有的程序里面,都存在对象和关系数据库。在业务逻辑层和用户界面层中,我们是面向对象的。当对象信息发生变化的时候,我们需要把对象的信息保存在关系数据库中。
        当你开发一个应用程序的时候(不使用O/R Mapping),你可能会写不少数据访问层的代码,用来从数据库保存,删除,读取对象信息,等等。你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。
        ORM解决的主要问题是对象关系的映射。域模型和关系模型分别是建立在概念模型的基础上的。域模型是面向对象的,而关系模型是面向关系的。一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录,类的每个属性对应表的每个字段。
        ORM技术特点:
        1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。
        2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。

二、反射以及Attribute在ORM中的应用。

什么是反射?
简单点吧,反射就是在运行时动态获取对象信息的方法,比如运行时知道对象有哪些属性,方法,委托等等等等。
反射有什么用呢?
反射不但让你在运行是获取对象的信息,还提供运行时动态调用对象方法以及动态设置、获取属性等的能力。
反射在ORM中有什么用呢?
我 这里所讨论的ORM实现是通过自定义Attribute的方式进行映射规则的描述的。但是我们并不知道具体哪个对象需要对应哪个表,并且这些对象是独立于 我们的ORM框架的,所以我们只能通过自定义Attribute来定义映射规则,然后通过反射来动态获取这些映射规则。
(这里只简单说明下概念:具体如何实现过程请看第四项。)

三、创建一个数据库表和表对应的实体model。

     传统的创建表和model实体的创建过程。

    1.创建数据库表

create table TB_People
(
Pl_ID Int identity(1,1) primary key , PL_Age Int, Pl_Sex Nvarchar(4), Pl_LoginName nvarchar(30), Pl_TrueName nvarchar(30), PL_Pwd nvarchar(60)
)

  2.根据表结构一般我们会创建如下model实体

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace FuzhuKeji
{
public class M_People
{ string _Pl_ID; public string Pl_ID
{
get { return _Pl_ID; }
set { _Pl_ID = value; }
} int _PL_Age; public int PL_Age
{
get { return _PL_Age; }
set { _PL_Age = value; }
} string _Pl_Sex; public string Pl_Sex
{
get { return _Pl_Sex; }
set { _Pl_Sex = value; }
} string _Pl_LoginName; public string Pl_LoginName
{
get { return _Pl_LoginName; }
set { _Pl_LoginName = value; }
} string _Pl_TrueName; public string Pl_TrueName
{
get { return _Pl_TrueName; }
set { _Pl_TrueName = value; }
} string _PL_Pwd; public string PL_Pwd
{
get { return _PL_Pwd; }
set { _PL_Pwd = value; }
} }
}

现在看到了表结构 和model实体,那如何根据model实体映射出表的插入语句及结构呢?下面我们就介绍有model映射到数据库表。

四、实体model如何映射出数据库表。

上面简单介绍了反射以及Attribute在ORM中的应用,那如何通过这些进行映射出来的呢?

方法一:

看到 题纲三中的model实体了,下面我们就通过反射的方法来动态获取此映射规则:

/// <summary>
/// 测试映射
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
M_People mp = new M_People();
mp.PL_Age = ;
mp.Pl_ID = "";
mp.Pl_LoginName = "Test1";
mp.PL_Pwd = "";
mp.Pl_Sex = "男";
mp.Pl_TrueName = "张三";
PropertyInfo[] infos = mp.GetType().GetProperties(); string Message_shuxing1 = ""; foreach (PropertyInfo info in infos)
{
//获取属性并打印
Message_shuxing1 = Message_shuxing1 + (info.Name + ":" + info.GetValue(mp, null));
} MessageBox.Show("这里看到可以获得属性名称和属性值(是不是对ORM有点慢慢明白了):"+Message_shuxing1); // 上面info.GetValue(mp, null)获得属性的值。
//info.SetValue(mp, "XX", null); 赋值 }

测试效果图如下:

aaarticlea/png;base64,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" alt="" width="857" height="105" />

是不是有点思路了,知道如何搞了,呵呵。

看到红色部分了吗

aaarticlea/png;base64,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" alt="" />

有感觉了没有:是不是和数据库的名称一样,而且还获得了值。为什么会出现这种情况呢?

属性是来至那?--Model实体吧,属性的名称也是model实体属性名称吧。所以我们只要把属性的名称按某个规则定义就可以获得其对应的数据库字段名和类型。

方法二:

备注下:其实不只这种方法可以完成ORM的映射,而且还可以通过Attribute:
Attribute中文翻译虽然也号称“属性”,但是她和对象的属性(Property)其实是完全不同的两概念。她是在运行时对对象或者对象属性、方法、委托等等进行描述的类,用于在运行时描述你的代码或者在运行时影响你的程序的行为。
其 实我们在c#的编程中经常看到Attribute,只不过我们没有注意罢了。比如Main函数前的“[STAThread]”这个其实就是一个 Attribute。全程为[STAThreadAttribute]。另外指定类可序列化的[Serializable]等等。是不是都很熟悉啊?只不 过平时估计没有用到,所以没有注意罢了。

既然Attribute是类,那么她的定义方法和类就没有两样了,唯一的不同就是自定义Attribute类必须继承于System.Attribute。

那我们改下M_People实体的东西如下:

下面我们来简单定义一个描述数据库字段信息的Attribute,在此类中我们采用更省略的方式,仅仅提供“字段名”,“字段类型”:

public class DataFieldAttribute : Attribute
{
private string _FieldName;
private string _FieldType;
public DataFieldAttribute(string fieldname, string fieldtype)
{
this._FieldName = fieldname;
this._FieldType = fieldtype;
}
public string FieldName
{
get { return this._FieldName; }
set { this._FieldName = value; }
}
public string FieldType
{
get { return this._FieldType; }
set { this._FieldType = value; }
}
}

那我们把Mode更改下改为如下:

public class M_People
{ string _Pl_ID;
[DataFieldAttribute("Pl_ID", "Int")]
public string Pl_ID
{
get { return _Pl_ID; }
set { _Pl_ID = value; }
} int _PL_Age;
[DataFieldAttribute("PL_Age", "Int")]
public int PL_Age
{
get { return _PL_Age; }
set { _PL_Age = value; }
} string _Pl_Sex;
[DataFieldAttribute("Pl_Sex", "nvarchar")]
public string Pl_Sex
{
get { return _Pl_Sex; }
set { _Pl_Sex = value; }
} string _Pl_LoginName;
[DataFieldAttribute("Pl_LoginName", "nvarchar")]
public string Pl_LoginName
{
get { return _Pl_LoginName; }
set { _Pl_LoginName = value; }
} string _Pl_TrueName;
[DataFieldAttribute("Pl_TrueName", "nvarchar")]
public string Pl_TrueName
{
get { return _Pl_TrueName; }
set { _Pl_TrueName = value; }
} string _PL_Pwd;
[DataFieldAttribute("PL_Pwd", "nvarchar")]
public string PL_Pwd
{
get { return _PL_Pwd; }
set { _PL_Pwd = value; }
} }

通过自定义Attribute,我们定义了类属性和数据库字段的一一对应关系。

那我们通过事件测试下方法案例:

/// <summary>
/// 反射+Attribute 映射出数据库表
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
M_People mp = new M_People();
mp.PL_Age = ;
mp.Pl_ID = "";
mp.Pl_LoginName = "Test1";
mp.PL_Pwd = "";
mp.Pl_Sex = "男";
mp.Pl_TrueName = "张三"; PropertyInfo[] infos = mp.GetType().GetProperties();
string Str_TestAtrrubute = ""; object[] objDataFieldAttribute = null;
foreach (PropertyInfo info in infos)
{
objDataFieldAttribute = info.GetCustomAttributes(typeof(DataFieldAttribute), false);
if (objDataFieldAttribute != null)
{
Str_TestAtrrubute=Str_TestAtrrubute+(info.Name + "->数据库字段:" + ((DataFieldAttribute)objDataFieldAttribute[]).FieldName)+" --------";
}
} MessageBox.Show(Str_TestAtrrubute);
}

测试的效果图如下:

aaarticlea/png;base64,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" alt="" width="660" height="97" />

哈 哈,你是不是很想动手了啊?

加油!下面我们就介绍如何实现插入语句的映射!

五、组合ORM映射生成insert语句。

我们仔细思考下看到上面的我们会怎么想才可以生成一条sql语句并且执行。

首先我们是不是应该分开两部分,

第一步负责生成插入语句。

第二步是负责执行插入语句得。

我们继续思考?生成一条插入语句我们要考虑哪些问题?

a、是不是返回值

b、是不是要判断表中是否有不需要组合为插入语句的字段(如自增字段)

c、而且这个插入语句是针对对象的插入语句而不是固定的某个或者已知的某个实体。所以我们会考虑到泛型的使用。

这样我们基本确定了insert语句的参数和结构。

我们再回到第一步如何根据实体生成插入语句? 我们第四部也只是说了根据实体映射出和数据库字段一样的名字,这有什么用呢?

肯定根据这些字段名我们要想办法组合个sql语句。继续分析、、、

如何分工 :肯定要给个执行的sql语句

分工一:是不是获得属性名称组合sql。

分工二:是不是做个参数的对应表。

分工三:组合这些东西,并把其属性类型和数据库字段类型对应起来。

上面说了那么多,只是帮大家打开思路,其实只要你理解了映射(第四项),用自己的思路去写那些组合sql也可以得,

我这个地方写的也不见得完美,只是给大家做个例子,嘿嘿,一起加油!

有几个地方用到了枚举首先我列出枚举的方法:

第一个属性标识是否为主键或者读写的标识
[Serializable]
[Flags]
public enum ColumnKeyType
{
/// <summary>
/// 默认状态
/// </summary>
Default = 1, /// <summary>
/// 标识为主键
/// </summary>
Identity = 2, /// <summary>
/// Extend状态下,不参与读取、增加、修改
/// </summary>
Extend = 4, /// <summary>
/// Read状态下不参与增加、修改
/// </summary>
Read = 8
} 返回值做了枚举:
public enum DBReturnType
{ /// <summary>
/// 返回受影响的行数
/// </summary>
EffectRow,
/// <summary>
/// 返回最后插入的主键值
/// </summary>
Identity
}

插入语句的代码:

 #region 把对象内容保存到数据库中 Insert
/// <summary>
/// 把对象内容保存到数据库中
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="model"></param>
/// <param name="isIncludeKeyColumn">插入语句中是否包含对主键的插入,当主键值为自动增加时为false</param>
/// <param name="returnType">返回的数据类型:DBReturnType.EffectRow 为返回受影响行数;DBReturnType.IdEntity 返回最新插入主键值(isIncludeKeyColumn == false时有效)</param>
public static int Insert<T>(T model, bool isIncludeKeyColumn, DBReturnType returnType) where T : class
{
int i = 0;
Type type = typeof(T); //获取表名
string tableName = EntityHelper.GetTableName(type); PropertyInfo[] pis = type.GetProperties(); //获取所有字段和主键名称
List<string> columns = null; //处理是否包含主键插入
if (isIncludeKeyColumn == false)
{
columns = EntityHelper.GetTableColumns(pis, ColumnKeyType.Identity | ColumnKeyType.Extend, null);
}
else
{
columns = EntityHelper.GetTableColumns(pis, ColumnKeyType.Extend, null);
} //生成INSERT语句
StringBuilder sqlText = new StringBuilder();
sqlText.Append("INSERT INTO ");
sqlText.Append(tableName);
sqlText.Append(" ("); //第一个字段
sqlText.Append(columns[0]); //第二个起所有字段
int loop = columns.Count;
for (i = 1; i < loop; i++)
{
sqlText.Append(",");
sqlText.Append(columns[i]);
} sqlText.Append(") VALUES ("); //第一个字段
sqlText.Append("@");
sqlText.Append(columns[0]); //第二个起所有字段
for (i = 1; i < loop; i++)
{
sqlText.Append(",@");
sqlText.Append(columns[i]);
} sqlText.Append(");"); //生成MySqlParamter
PropertyInfo propertyInfo = null; SqlParameter[] paras = new SqlParameter[loop];
for (i = 0; i < loop; i++)
{
propertyInfo = type.GetProperty(columns[i]);
paras[i] = new SqlParameter(columns[i], GetMySqlDbType(propertyInfo.PropertyType), -1);
paras[i].Value = propertyInfo.GetValue(model, null);
} //根据两种情况返回不同的值
if (isIncludeKeyColumn == false && returnType == DBReturnType.Identity)
{
sqlText.Append(" SELECT @@identity AS RetId");
SqlDataReader sdr = DataReader(sqlText.ToString(), CommandType.Text, paras);
int keyId = 0;
if (sdr.Read())
{
keyId = Convert.ToInt32(sdr["RetId"]);
}
sdr.Close(); return keyId;
}
else
{
return NonQuery(sqlText.ToString(), CommandType.Text, paras);
}
} #endregion #region 根据Type类型获取SQL的数据类型 /// <summary>
/// 根据Type类型获取MySQL的数据类型
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
private static SqlDbType GetMySqlDbType(Type type)
{
SqlDbType dbtype = SqlDbType.VarChar; if (type.Equals(typeof(string)))
{ }
else if (type.Equals(typeof(int)))
{
dbtype = SqlDbType.Int;
}
else if (type.Equals(typeof(bool)))
{
dbtype = SqlDbType.Bit;
}
else if (type.Equals(typeof(DateTime)))
{
dbtype = SqlDbType.DateTime;
}
else if (type.Equals(typeof(decimal)))
{
dbtype = SqlDbType.Decimal;
}
else if (type.Equals(typeof(float)))
{
dbtype = SqlDbType.Float;
}
else if (type.Equals(typeof(double)))
{
dbtype = SqlDbType.Float;
} return dbtype;
} #endregion

下面我们简单定义一个描述数据库字段信息的Attribute 包括表名 属性字段获得

从Model模型中获取数据表名、主键名、 获取需要的读取数据源的字段集

(忘了说明表的表名写在那个地方,其实表名只需要定义在类的上面就可以了)为了简单起见我还是把目前的model放到代码里面

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace FuzhuKeji
{
[Serializable]
[Property("TB_People")]
public class M_People
{ string _Pl_ID; /// <summary>
/// 主键
/// </summary>
[Property(ColumnKeyType.Identity)]
public string Pl_ID
{
get { return _Pl_ID; }
set { _Pl_ID = value; }
} int _PL_Age; public int PL_Age
{
get { return _PL_Age; }
set { _PL_Age = value; }
} string _Pl_Sex; public string Pl_Sex
{
get { return _Pl_Sex; }
set { _Pl_Sex = value; }
} string _Pl_LoginName; public string Pl_LoginName
{
get { return _Pl_LoginName; }
set { _Pl_LoginName = value; }
} string _Pl_TrueName; public string Pl_TrueName
{
get { return _Pl_TrueName; }
set { _Pl_TrueName = value; }
} string _PL_Pwd; public string PL_Pwd
{
get { return _PL_Pwd; }
set { _PL_Pwd = value; }
} }
}

好吧这样就不用担心了映射表名获得字段的代码在下面:

#region 下面我们简单定义一个描述数据库字段信息的Attribute 包括表名 属性字段获得
public class PropertyAttribute : Attribute
{
public string tableName;
public ColumnKeyType columnKeyType; /// <summary>
/// 重构方法默认值
/// </summary>
public PropertyAttribute()
{
this.columnKeyType = ColumnKeyType.Default;
} /// <summary>
///
/// </summary>
/// <param name="tableName"></param>
public PropertyAttribute(string tableName)
{
this.tableName = tableName;
} public PropertyAttribute(ColumnKeyType columnKeyType)
{
this.columnKeyType = columnKeyType;
}
} #endregion #region 从Model模型中获取数据表名、主键名、 获取需要的读取数据源的字段集 public class EntityHelper
{
/// <summary>
/// 从Model模型中获取数据表名
/// </summary>
public static string GetTableName(Type type)
{
PropertyAttribute property = (PropertyAttribute)(type.GetCustomAttributes(false)[0]);
return property.tableName;
} /// <summary>
/// 从Model模型中获取数据主键名
/// </summary>
public static PropertyInfo GetTableIdentity(PropertyInfo[] pis)
{
object[] infos = null;
PropertyAttribute attribute = null;
foreach (PropertyInfo pi in pis)
{
infos = pi.GetCustomAttributes(false);
if (infos.Length > 0)
{
attribute = (PropertyAttribute)(infos[0]);
if (attribute.columnKeyType == ColumnKeyType.Identity)
{
return pi;
}
}
} return null;
} /// <summary>
/// 获取需要的读取数据源的字段集
/// </summary>
/// <param name="pis">Model模型所有属性集合</param>
/// <param name="filter"></param>
/// <param name="customColumns">自定义查询列名集合,使用逗号分隔。如不需要则为null</param>
/// <returns></returns>
public static List<string> GetTableColumns(PropertyInfo[] pis, ColumnKeyType filter, string customColumns)
{
string col = "";
return GetTableColumns(pis, filter, customColumns, ref col);
} /// <summary>
/// 获取需要的读取数据源的字段集
/// </summary>
/// <param name="pis">Model模型所有属性集合</param>
/// <param name="filter"></param>
/// <param name="customColumns">自定义查询列名集合,使用逗号分隔。如不需要则为null</param>
/// <returns></returns>
public static List<string> GetTableColumns(PropertyInfo[] pis, ColumnKeyType filter, string customColumns, ref string outCol)
{
List<string> columns = new List<string>();
if (customColumns != null && customColumns.Length > 0)
{
/*
* 需要安全处理
* 限制字段不包含空格
*/
customColumns = customColumns.Trim();
string[] strs = customColumns.Split(',');
foreach (string str in strs)
{
if (IsRegexMatch(str, @"^(\w[^\s';]+)$"))
{
columns.Add(str);
}
} outCol = customColumns;
}
else
{
object[] infos = null;
PropertyAttribute attribute = null;
foreach (PropertyInfo pi in pis)
{
//删除外部扩展对象项
infos = pi.GetCustomAttributes(false);
if (infos.Length > 0)
{
attribute = (PropertyAttribute)(infos[0]);
if (attribute.columnKeyType == (filter & attribute.columnKeyType))
{
continue;
}
}
outCol += string.Concat(",", pi.Name);
columns.Add(pi.Name);
} outCol = outCol.Remove(0, 1);
} return columns;
} /// <summary>
/// 检查是否满足某种正则表达式
/// </summary>
private static bool IsRegexMatch(string str, string Express)
{
if (string.IsNullOrEmpty(str))
{
return false;
} return Regex.IsMatch(str, Express); }
} #endregion

上面就完成了sql语句的生成:下面我就定义一个sql语句的执行就可以了。其实你到insert方法里会发现 在生产完sql语句就调用执行方法了。

      /// <summary>
/// 配置字符串参数
/// </summary>
private static void PrepareCommand(SqlConnection conn, SqlTransaction trans, SqlCommand sqlCommand, string sqlText, CommandType commandType, SqlParameter[] parms)
{
if (conn.State != ConnectionState.Open)
{
conn.Open();
} sqlCommand.Connection = conn;
sqlCommand.CommandText = sqlText;
sqlCommand.CommandType = commandType; if (trans != null)
{
sqlCommand.Transaction = trans;
} if (parms != null)
{
foreach (SqlParameter parm in parms)
{
sqlCommand.Parameters.Add(parm);
}
}
} /// <summary>
/// 执行SQL语句,返回数据集
/// </summary>
public static SqlDataReader DataReader(string sqlText, CommandType commandType, SqlParameter[] parms)
{
SqlConnection conn = new SqlConnection(@"Data Source=HAOFUQI\SQLEXPRESS;Initial Catalog=Fukusuke;Persist Security Info=True;User ID=sa;pwd=123");
SqlCommand sqlCommand = new SqlCommand();
PrepareCommand(conn, null, sqlCommand, sqlText, commandType, parms); SqlDataReader reader = sqlCommand.ExecuteReader(CommandBehavior.CloseConnection); sqlCommand.Dispose();
return reader;
} /// <summary>
/// 执行SQL语句,并返回影响行数
/// </summary>
public static int NonQuery(string sqlText, CommandType commandType, SqlParameter[] parms)
{
int reVal = 0;
using (SqlConnection conn = new SqlConnection(@"Data Source=HAOFUQI\SQLEXPRESS;Initial Catalog=Fukusuke;Persist Security Info=True;User ID=sa;pwd=123"))
{
SqlCommand sqlCommand = new SqlCommand();
PrepareCommand(conn, null, sqlCommand, sqlText, commandType, parms); reVal = sqlCommand.ExecuteNonQuery(); sqlCommand.Parameters.Clear();
sqlCommand.Dispose();
} return reVal;
}

六、测试ORM的插入映射。

   /// <summary>
/// 执行插入语句
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
M_People mp = new M_People();
mp.PL_Age = ;
mp.Pl_ID = "";
mp.Pl_LoginName = "Test1";
mp.PL_Pwd = "";
mp.Pl_Sex = "男";
mp.Pl_TrueName = "张三";
int Insert_Key= DBHelper.Insert<M_People>(mp,false ,DBReturnType.Identity);
MessageBox.Show("添加成功! 插入数据的主键为:"+Insert_Key.ToString());
}

测试结果如下:

aaarticlea/png;base64,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" alt="" />

数据库插入效果:

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA/gAAAAoCAIAAADFb8ZyAAAFlUlEQVR4nO3csW4cNxSF4XknPUwaQd0+RaoUqVOlSJlGEgS4yEukSuoAKSZwF8NwgrhzxRQLD2iSwzlcakjz8v9wi921DO8e0cszo1ktzrnvf/rFOff0+PLfvx+3eXp8ef/uw9Pji/vS8pk7zbr+5f+7dw/Pdw/P2427h+fffv7mvH99OO/fffDvBt8a/+6p37UhBFn5CCoQZ6VEtL05xF9gONXkuvJzMPzaS+XXVXxX/COTMu9XACBa3E1F/9TntEZF379N0Q/4m0G+Xc22Tcb2Nk69asxDL/rJ9Cj6QQ6GX36R0gPImd/BKPoA6t1S9M9+TmvqjL4/FH1fUPR9wYOdnuBXJFPI8o9MSDnzml9m8yzCTFal5/WtRrSJfwKZXCfzLJ4Mij6AesVFv4GVol+CzUCXPCjKPDIz1pUus67iNeaiOhtr/PxbYl3pyApAvQGKPvLYDHRkpSMrHVnpyEpHVgDqUfSHx2agIysdWenISkdWOrICUO+g6LtlYRiGYRiGqRoAPVD0GYZhGIY5eQD0sPz+9hNFn2EYhmGYEwdAD8u3Pzz98bdzh0W/oZVr9EtwHaeOrHRkpSMrHVnpjGRF0Qe6Wr778c3bf5yj6A/LyGbQBFnpyEpHVjqy0hnJiqIPdLX8+udH6dKdhlaKfgkjm0ETZKUjKx1Z6chKZyQrij7Qlfxh3IZWin4JI5tBE2SlIysdWenISmckK4o+0BVFf3hGNoMmyEpHVjqy0pGVzkhWFH2gK4r+8IxsBk3EWS07ujy9rwrrSudnFawify0drqsZFh7rSmckK4o+0BVFf3hGNoMmkkU/uOHm6FuHWFe6ZFb5or93hGl+7bGudEayougDXY1R9O8vl+u0fBqjCDaDZF2YoUAoOKOv2ztLLYYTf5nhVJWib/jlF8kcbG93g2U27f9Kij6AegMUfb/f0/VjQSGLb0+4Qe7hjL7usJDlTXWoeXjpjuHXXip5YsK/G9ye+T8mRR9AvQGKvo+iH9vbDGgYMc7o6yrPvCb/9Mzn29PewbazfoRzA/0AcqofCiVR9AHUG6boc+nOnsxlAy46vzi5zMZJPoF8IcufeY3vJh8xI/NTtcwx5JxHmGLR53jJUfQBvIZhiv4VXT9WWshmtvd5hgn71qHDdRXEdXj+3nCqXLqjU4q+fo7fNoo+gHoU/eHF5XXv7mzbZEw8o09QruQAMviavWprONXDD+Mafu2llEvC9v7ubDFS9AHUG6Do82HcvMz1wY7++qX85xn27s7p5p8UUfSvghwMv/wipQeQM7+DUfQB1Bug6Dt+vWbW4a9B5HKUTf7zDJlHJlT6Ydx4mc2zCA9/m5N+Xt9qRJv8rwPmHcxH0QdQb4yijwwjm0ETyYOizCMzY13pMusqXmMuqrOxxs+/JdaVzkhWFH2gK4r+8IxsBk2QlY6sdGSlIyudkawo+kBXFP3hGdkMmiArHVnpyEpHVjojWVH0ga7kos8wDMMwDHPbAOiBos8wDMMwzMkDoAeKPsMwDMMwJw+AHg6Kfpdr5Veu0S9h5DrOJshKR1Y6stKRlY6sANSj6A+PzUBHVjqy0pGVjqx0ZAWgHkV/eGwGOrLSkZWOrHRkpSMrAPUo+sNjM9CRlY6sdGSlIysdWQGoR9EfHpuBjqx0ZKUjKx1Z6cgKQD2K/vDYDHRkpSMrHVnpyEpHVgDqVRX95ZxfmLVS9EuwGejISkdWOrLSkZWOrADUu6Xob/0+vvEq1p2if3+5xHf1B61KbgbBd+R6V3/QKrLSkZWOrHRkpaPoA6h34xl9/z331d9q11TRv79crrPddbR851xqM1g+2+46dk3nHFmVICsdWenISkfRB1Dv9kt3gnfnV7TuFH3ntXaK/ia5cTpvF2Tj3JCVjqx0ZKUjKx1FH0C9/wGT4GPHYdwj7QAAAABJRU5ErkJggg==" alt="" />

这个地方就插入语句成功了。

七、总结。

这篇文章写得不是很好,我只是想描述,却没有一层层去剥开,也许这篇文章太长了吧。
这篇文章的核心应该是说明白如何映射如何到sql。没有分层的概念。看起来混乱,但是如果分层我就要更多篇幅讲解。

写的错误或者不好的地方还请多多批评指导。

上一篇写的是:为初学者写三层.为初学者写三层,三层的搭建和测试例子

下面准备写ORM框架,然后把生成器集成到框架中。(伪三层+ORM)+生成器+常用类库 用一个财务报销系统作为案例。

好了就写到这吧!

本文主要参考文献:

1. 什么是ORM :http://www.cnblogs.com/double1030/archive/2009/02/01/1382062.html

2.ORM硬伤 :http://www.cnblogs.com/Barton131420/archive/2007/01/07/613955.html

3反射以及Attribute在ORM中的应用:.http://blog.csdn.net/ronotian/article/details/2900714

下载地址:http://pan.baidu.com/s/1bn6bM3d

上一篇:java之JAVA异常


下一篇:POJ 3298 Antimonotonicity (思维)