最后我们来解决点遗留问题
首先是读取Attribute的问题
Type tp = target.GetType();
PropertyInfo pp = tp.GetProperty(s);
foreach (object o in pp.GetCustomAttributes(false))
{
if (o.GetType().Equals(typeof(ParamAttribute)))
{
ParamAttribute p = (ParamAttribute)o;
//这里P就是Attribute的对象啦
break;
}
}
大致的方法就是这样子。
还有就是如何通过“NChar”等字符串获取System.Data.SqlDBType这个枚举的类型的值
其实也不难,
SqlDbType ptype = (SqlDbType)System.Enum.Parse(typeof(SqlDbType), "VarChar");
这样子就可以了
最后我们实现一个数据库操作组件就可以把上面内容组合起来了,下面贴的代码是我自己写了个很粗糙的例子上的
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Collections;
using System.Reflection;
using Alexander.Xbase.ClassConfig;
using Alexander.Xbase.Xcache;
using Alexander.Xbase.Xresource;
using Alexander.Xbase.Interface;
namespace Alexander.Xbase.SqlExec
{
public class Exec: Alexander.Xbase.Interface.IQueriable
{
private string ConnectionString;
private SqlConnection conn;
private SqlTransaction tran;
private bool TransOpen;
private string configpath;
IQueriable 成员#region IQueriable 成员
public void Init(string connstr,string configbase)
{
ConnectionString = connstr;
configpath = configbase;
conn = new SqlConnection(ConnectionString);
if (conn.State.Equals(ConnectionState.Closed))
{
conn.Open();
}
//throw new Exception("The method or operation is not implemented.");
}
public void OpenTranscation()
{
TransOpen = true;
tran = conn.BeginTransaction();
// throw new Exception("The method or operation is not implemented.");
}
public void Commit()
{
TransOpen = false;
tran.Commit();
tran = null;
//throw new Exception("The method or operation is not implemented.");
}
public void RollBack()
{
TransOpen = false;
tran.Rollback();
tran = null;
//throw new Exception("The method or operation is not implemented.");
}
public object Query4Object(string action, object target)
{
object rs=new object();
ConfigStruct config = new ConfigStruct(new Resource(configpath + target.GetType().Name+".xml").Data);
string sql = config.GetSql(action);
string execsql = MakeExecuteSql(sql);
string storedsql = MakeValueSql(sql,target);
string sKey = target.GetType().Name + ":" + storedsql;
if (config.IsCache(action))
{
if (IsInCache(sKey, rs))
{
return ObjCache.GetObject[sKey];
}
}
SqlCommand comm = new SqlCommand(execsql, conn);
PrepareCommand(comm, execsql, target);
SqlDataReader sr = comm.ExecuteReader();
while (sr.Read())
{
rs=FillObject(sr, target.GetType());
}
sr.Close();
if (config.IsCache(action))
ObjCache.Insert(sKey, rs);
return rs;
//throw new Exception("The method or operation is not implemented.");
}
public void Query4List(string action,ref IList target, object queryparam)
{
object rs=new object();
//SortedList sl = new SortedList();
ConfigStruct config = new ConfigStruct(new Resource(configpath + queryparam.GetType().Name + ".xml").Data);
string sql = config.GetSql(action);
string execsql = MakeExecuteSql(sql);
string storedsql = MakeValueSql(sql,queryparam);
string sKey = queryparam.GetType().Name + ":" + storedsql;
if (config.IsCache(action))
{
if (IsInCache(sKey, rs))
{
target = (IList)ObjCache.GetObject[sKey];
return;
}
}
SqlCommand comm = new SqlCommand(execsql, conn);
PrepareCommand(comm, sql, queryparam);
SqlDataReader sr = comm.ExecuteReader();
int i=0;
while (sr.Read())
{
rs=FillObject(sr, queryparam.GetType());
target.Add(rs);
}
sr.Close();
if (config.IsCache(action))
{
ObjCache.Insert(sKey, target);
}
//return sl;
//throw new Exception("The method or operation is not implemented.");
}
public int Query4Page(string action,ref IList target, object queryparam, int pageid, int pagesize,string sort,string direct)
{
object rs = new object();
ConfigStruct config = new ConfigStruct(new Resource(configpath + queryparam.GetType().Name+".xml").Data);
string sql = config.GetSql(action);
string pagesql = DoPageSql(sql, pageid, pagesize, sort, direct);
string execsql = MakeExecuteSql(pagesql);
string storedsql = MakeValueSql(pagesql, queryparam);
string sKey = queryparam.GetType().Name + ":" + storedsql;
int count = (int)Count(action,DoCountSql(MakeExecuteSql(sql)), queryparam);
if (config.IsCache(action))
{
if (IsInCache(sKey, rs))
{
target = (IList)ObjCache.GetObject[sKey];
return count;
}
}
SqlCommand comm = new SqlCommand(execsql, conn);
PrepareCommand(comm, sql, queryparam);
SqlDataReader sr = comm.ExecuteReader();
int i = 0;
while (sr.Read())
{
rs=FillObject(sr, queryparam.GetType());
target.Add(rs);
}
sr.Close();
if (config.IsCache(action))
{
ObjCache.Insert(sKey, target);
}
return count;
//throw new Exception("The method or operation is not implemented.");
}
public int Query4Update(string action, object target)
{
object rs = new object();
ConfigStruct config = new ConfigStruct(new Resource(configpath + target.GetType().Name + ".xml").Data);
string sql = config.GetSql(action);
string execsql = MakeExecuteSql(sql);
string storedsql = MakeValueSql(sql, target);
string sKey = target.GetType().Name + ":" + storedsql;
SqlCommand comm = new SqlCommand(execsql, conn);
PrepareCommand(comm, sql, target);
int ct=comm.ExecuteNonQuery();
ObjCache.Flash(target.GetType().Name);
return ct;
//throw new Exception("The method or operation is not implemented.");
}
public object Query4Count(string action, object target)
{
ConfigStruct config = new ConfigStruct(new Resource(configpath + target.GetType().Name + ".xml").Data);
string sql = config.GetSql(action);
return Count(action,sql, target);
}
public void Close()
{
conn.Close();
//throw new Exception("The method or operation is not implemented.");
}
#endregion
private string DoPageSql(String command, int pageid, int pagesize, string sor
分享到:
相关推荐
Java ORM(Object-Relational Mapping)框架是一种将数据库关系数据与Java对象进行映射的技术,使得开发者可以在操作对象的同时,间接地对数据库进行操作。这个简单的Java ORM框架,名为“Potato ORM”,可能是作者...
Hibernate是一个优秀的对象关系映射(ORM)框架,使得Java开发者可以方便地操作数据库。它通过配置文件将Java类与数据库表进行映射,简化了SQL的编写。在SSH中,Hibernate负责数据持久化,Spring通过SessionFactory...
### 手把手教你Hibernate 3.2 #### 教学目标与内容概览 本教程由具有数十年教育经验的资深Java教师吴湘江老师编写,旨在帮助学习者全面掌握Hibernate 3.2的核心概念与实际操作技巧。教程分为多个章节,首先概述了...
SSH入门教程:手把手教你整合Struts1.2、Spring和Hibernate SSH是Java开发中的一个经典技术栈,由Struts、Spring和Hibernate三个开源框架组成。本教程将引导初学者逐步了解并掌握这三个框架的整合,从而实现一个...
在追求成为一位杰出的架构师的道路上,"手把手教你成为架构师课程资料包大放送" 提供了丰富的资源,旨在帮助你深入理解和掌握软件架构设计的核心概念。这个资料包特别关注Android架构组件和MyBatis框架,这些都是...
通过这个"手把手教你SSH2整合"的项目实例,你可以深入理解这三大框架如何协同工作,提高开发效率,以及如何解决在实际开发中可能出现的问题。实践中,你将学到如何配置和优化SSH2,以及如何在项目中应用最佳实践。这...
Struts提供了MVC设计模式的实现,Spring则负责管理对象及其依赖关系,而Hibernate则是用于简化数据库交互的ORM(对象关系映射)工具。本教程将详细讲解如何在Myeclipse环境下搭建SSH框架。 首先,创建一个新的Web ...
在"手把手教你开发ejb3.0第一章"中,我们将深入探讨EJB 3.0的基础知识和核心概念。 1. **EJB 3.0概述** - **简化API**:EJB 3.0引入了注解(Annotations),大大减少了XML配置,使得部署和开发更简单。 - **实体...
这篇文档旨在指导你如何免费且合法地获取并使用正版的IntelliJ IDEA。 首先,IntelliJ IDEA提供了一个开源免费协议,详细规定在https://www.jetbrains.com/community/opensource/。根据协议,如果你是一个开源项目...
自动生成Hibernate_ORM_2.gif`:这些可能是演示如何使用MyEclipse的Hibernate插件自动生成ORM映射的图片教程。 - `3.1.添加Spring.gif`、`4.2.添加Hibernate.gif`、`2.3.创建Action.gif`等:这些图解文件分别展示了...
这个“手把手教SSH”教程适合初学者,旨在帮助他们理解并掌握这三大框架的核心概念和使用方法。 首先,Struts是一个基于MVC(Model-View-Controller)设计模式的开源Web应用框架,它的主要目标是提供一套开发Web...
Struts、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责,组合使用可以构建出高效、灵活的企业级应用程序。...希望这个教程能帮助你开启Java Web开发的大门,为你的编程事业奠定坚实的基础。
在Web开发中,AJAX(Asynchronous JavaScript and XML)是一种...在实际开发中,你可以根据项目需求灵活调整这三层,例如使用前端框架(如React、Vue等)来增强表现层的功能,或者利用RESTful API来简化前后端交互。
3. **Hibernate**:是一个对象关系映射(ORM)工具,它允许开发者使用Java对象来操作数据库,减少了对SQL的直接依赖。Hibernate通过配置文件(如hibernate.cfg.xml)来定义对象和表之间的映射关系。 在实现留言板的...
Spring还提供了大量的模块,如Spring JDBC、Spring ORM支持MyBatis等,方便与各种数据库进行交互。 **MyBatis** MyBatis是一个轻量级的持久层框架,它将SQL语句与Java代码分离,通过XML或注解方式配置和映射原生...
使用 DjangoAdmin,可以快速生成 CRUD 操作的界面,并且可以通过 ORM 生成的 API 来做到定制化的更新。 VueJS 的单文件组件 VueJS 的单文件组件允许将模板、脚本和样式写在一个文件中,使得开发更加方便、快速。...
Hibernate是一个对象关系映射(ORM)框架,简化了Java应用与数据库之间的交互,允许开发者用面向对象的方式来操作数据库。 【SSH框架环境搭建步骤】 1. **数据库创建** - 代码创建:通过SQL语句创建名为`demouse`...
**Hibernate手把手教学** 在IT领域,ORM(Object-Relational Mapping)框架是数据库操作的重要工具,而Hibernate作为Java中最受欢迎的ORM框架之一,深受开发者喜爱。本教学资源源自厦门理工学院软件学院的一位资深...