04 2011 档案
摘要:在使用 C# 产生随机数时,一般来说大家都不希望会有重复的出现,但有时候确很难避免这种情况发生。如在运行一个程序时,要连续产生多个随机数,而且期间的时间间隔非常短,这时候就会出问题了,最基本的产生随机数写法是:1Random r = new Random();但这事必不能解决上面所提的情况,会产生很多完全相同的随机数,所以必须在产生时添加一个随机数因子的参数,这样可以避免出现重复的可能性,不过这个随机数因子要如何确定呢?我之前试过使用时间毫秒来做,感觉应该算是可以的了:1Random r = new Random(unchecked((int)(DateTime.Now.Ticks)));这也
阅读全文
摘要:今天在做项目的时候,由于要批量生成充值卡,充值卡的密码是随机产生,结果在程序运行时,充值卡的密码几乎都是一样的,于是手动调试,调试生产的密码又不一样,纳闷半天,仔细一想,随机可能是以时间为种子,于是就换了个全局的Random ,再运行程序,一切正常: 分析:出现相同的原因: Random是根据时间产生随机数的,在实际运行的时候,没有断点,所以两句话执行的时间间隔非常短,无法被计时器识别,所以用的是一个相同的时间做的种子,就得到了相同的随机数 调试的时候两句话之间的时间足够长,所以种子也不同,就产生了不同的随机数 只有一个Random对象的话他会用上一次产生的结果生成种子,所以两次rnd.Nex
阅读全文
摘要:4.6 发送取消消息(下行业务)当VASP发送MM7SubmitReq消息给MMSC成功后,VASP可以发送取消消息,以取消之前所发送给MMSC的消息。具体构建取消消息见4.2.2.2。package com.cmcc.mm7.vasp.conf;import com.cmcc.mm7.vasp.message.*;import com.cmcc.mm7.vasp.service.MM7Sender;import com.cmcc.mm7.vasp.common.*;import java.io.*;public class VaspSendTest {public static void m
阅读全文
摘要:4.4 VASP接收状态报告(上行业务)当VASP在发送MM7SubmitReq给MMSC时设置需要发送状态报告的请求为true时,MMSC在收到MM7SubmitReq后,会发送状态报告给VASP,此时VASP可以进行接收。接收方式和接收传送消息一样,也有两种方式:4.4.1方式1:普通应用程序中的用法public class MyReceiver extends MM7Receiver{public MM7DeliveryReportReq deliveryReportReq; //Main方法 public static void main(String[]args) { //初始化VA
阅读全文
摘要:4.1.2 方式2:Web应用程序中的用法public class MyReceiver extends MM7RecieveServlet{ public MM7VASPRes doDeliver(MM7DeliverReq request) { System.out.println(“收到手机”+request.getSender()+“提交的消息,标题为:”+request.getSubject());System.out.println("MMSC的标识符为:"+request. GetMMSRelayServerID()); //SP需要进行一些处理,例如构建MM
阅读全文
摘要:4.3 VASP接收传送消息以及发送提交消息实例举一个实例说明VASP构建MM7SubmitReq,发送给MMSC,并得到返回消息,通过StatusCode判断,本次发送是否成功,若成功,得到MessageID,以便以后希望取消或替换该消息时用。public class MyReceiver extends MM7Receiver{ //定义一个MM7DeliverReq,以便得到MMSC发过来的Deliver消息。(必备) public static MM7DeliverReq deliverReq = new MM7DeliverReq(); //Main方法 public static
阅读全文
摘要:2.7递送报告报告是接收方(终端)对接收到消息的处理方式信息。递送报告指MMSC在获取这个报告后把这个信息发送给发送方(SP)。接收方对消息的处理可能是接收或者拒绝等。处理流程如下:l SP发送消息(通过MMSC)给终端,并且要求递送报告;l 终端接收到消息后做相应处理(接收或拒绝);l MMSC把终端对消息的处理信息(递送报告)发送给SP。3.安装方法 这里主要介绍一下如何将MM7 API运用到VASP自己开发的程序中以及在配置文件中需要注意修改的地方。3.1 MM7 API的使用在VASP用Java开发自己程序时,只要将中国移动集团公司提供的mm7api.jar和lib下的所有的Jar文件
阅读全文
摘要:2.3.2下行业务的业务代码规范下行业务的业务代码为六位,其构成如下:第1位:功能标识位,目前有如下两种选择:l 1,代表一般下行业务l 7,代表用于“先机时代”项目中手机内置并参与渠道分成的业务l 6,代表用于集团客户应用的业务(免费)其他数字目前保留。第2位:彩信业务一级分类,具体如下面表格:第3位:彩信业务二级分类,具体如下面表格:一级分类及标识代码二级分类及标识代码新闻天气(1)天气预报(1)热点快讯(2)社会新闻(3)体育新闻(4)娱乐新闻(5)财经新闻(6)综合新闻(0)游戏娱乐(2)聊天交友(1)笑话幽默(2)彩信游戏(3)影音视线(4)互动有奖(5)五花八门(0)时尚生活(3)
阅读全文
摘要:1.概述该文档说明了SP如何使用中国移动集团公司的MM7 API程序与彩信中心进行对接,实现MM7接口的通讯,开发增值业务应用。该MM7 API是使用纯Java开发的,使用的JDK的版本为JDK1.4.0。所以使用该API进行开发时,要求使用的JDK版本必须是JDK1.4.0以上版本。该API所使用的通讯承载协议是HTTP/1.1。缩略词: MM: Multimedia Message (多媒体消息) MMS: Multimedia Message Service(多媒体消息服务) MMSC: Multimedia Message Service Center(多媒体消息服务中心) VAS:
阅读全文
摘要:目 录1.概述2.概念2.1企业代码2.2服务代码2.3业务代码2.3.1上行业务的业务代码规范2.3.2下行业务的业务代码规范2.4操作指令码2.5下行业务2.6上行业务2.7递送报告3.安装方法3.1 MM7 API的使用3.2配置文件的设置4.开发方法4.1VASP接收传送请求(上行业务)4.1.1 方式1:普通应用程序中的用法4.1.2 方式2:Web应用程序中的用法4.2发送多媒体消息的过程(下行业务)4.2.1准备4.2.2创建待发送消息4.2.2.1 创建提交增值业务的多媒体消息(MM7SubmitReq)4.2.2.2 创建取消多媒体消息(MM7CancelReq)4.2.2.
阅读全文
摘要:在本文的前两篇文章里对MSMQ的相关知识点进行了介绍,很多阅读过这前两篇文章的朋友都曾问到过这样一些问题: 1、如何把MSMQ应用到实际的项目中去呢? 2、可不可以介绍一个实际的应用实例?3、...... 在前两篇文章里,关于MSMQ常用的技术点基本介绍完毕了,本文主要以MS开源项目PetShop中的MSMQ应用作为案例来介绍MSMQ在实际项目中的应用。在PetShop里,由于系统使用了多线程的专用应用程序来监控消息队列,在进入PetShop应用分析前,我们先来了解下关于多线程和MSMQ的相关知识点。一、多线程和MSMQ 现在有这样一个需求,指定的消息队列里不管有无消息数据,我们通过一个多线程
阅读全文
摘要:在我上一篇文章《ASP.NET中进行消息处理(MSMQ)一》里对MSMQ做了个通俗的介绍,最后以发送普通文本消息和复杂的对象消息为例介绍了消息队列的使用。本文在此基础上继续介绍MSMQ的相关知识点,最后还是通过一个示例程序来分析MSMQ在实际项目开发中的应用。建议:如果你对MSMQ不够了解,在你阅读本文前请先阅读第一部分:《ASP.NET中进行消息处理(MSMQ)一》。一、消息传递的优先级 在MSMQ中消息在队列里传输是分有优先级的,这里我就以实例的形式介绍下关于优先级的使用,优先级一共有七种,MessagePriority枚举里全部进行了封装。因这里只作程序演示就不一一列举出,仅用了High
阅读全文
摘要:MSMQ是微软消息队列的英文缩写。那么什么是消息队列?这些介绍网上一大片这里就不多说了。本文对于大虾级的人物来说这只是小玩意而已,对于初学者来说这文章还是有一定的帮助,希望路过的大虾们别笑话我班门弄斧。一、MSMQ介绍和安装消息队列 关于MSMQ详细的介绍请大家向http://www.baidu.com/或http://www.g.cn/等专家咨询。 使用消息队列的优点:稳定、消息优先级、脱机能力以及安全性。 消息队列分为用户创建的队列(专用队列)和系统队列,用户队列分为,。我是Windows XP,看下图所示(myQueue为自己创建的消息队列,msmqtriggersnotifiation
阅读全文
摘要:请转载,省的以后到处找了,方便大家,更方便自己。欢迎大家转载啊!具体的社保构成比例为: 养老保险:单位每个月为你缴纳21%,你自己缴纳8%; 医疗保险:单位每个月为你缴纳9%,你自己缴纳2%外加10块钱的大病统筹(大病统筹主要管住院这块); 失业保险:单位每个月为你缴纳2%,你自己缴纳1%; 工伤保险:单位每个月为你缴纳0.5%,你自己一分钱也不要缴; 生育保险:单位每个月为你缴纳0.8%,你自己一分钱也不要缴; 住房公积金:单位每个月为你缴纳8%,你自己缴纳8% 以上,这么算下来,单位每个月为你缴纳的社保比例应该是21%+9%+2%+0.5%+0.8%+8%=41.3% 你自己每个月为你缴纳
阅读全文
摘要:不知何时,我订上都市快报的彩信,从每天一条,后来每天早晚各一条。这条彩信在上厕所,做公交时能打发点时间,看看社会,国内外的新闻。有时一个增值产品,不是每天都用,而是当你需要时,有它帮你打发时间,你也就觉得有点用了,不去取消掉。近段时间自己也接解到了彩信业务,进入公司后觉得一桢一图,一桢一文的排版形式太不友好,一直想改良一下,于是开始百度SMIL文件了。具体的我不说了,只是说一下我的改良之路。SMIL文件样例:<smil><head><layout><root-layout height="480px" width="320
阅读全文
摘要:声明:本文内容主要译自Nauman Leghari的Using log4net,亦加入了个人的一点心得(节3.1.4)。请在这里下载示例代码 1 简介 1.1 Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问题。 经验表明,日志记录往往是软件开发周期中的重要组成部分。它具有以下几个优点:它可以提供应用程序运行时的精确环境,可供开发人员尽快找到应用程序中的Bug;一旦在程序中加入了Log 输出代码,程序运行过程中就能生成并输出日志信息而无需人工干预
阅读全文
摘要:线程是程序执行的基本原子单位. 一个进程可以由多个线程组成.在分布式编程中,正确使用线程能够很好的提高应用程序的性能及运行效率.实现原理是将一个进程分成多个线程,然后让它们并发异步执行,来提高运行效率.并发执行并不是同时执行(占有cpu),任意时刻还是只能有一个线程占用cpu,只不过是它们争夺cpu频繁一些,感觉到他们似乎都在运行.下面通过一个简单的例子来说明一下它的工作原理设一个进程要完成两个任务:任务1和任务2并且任务1要经历: a1->b1->c1三个步骤才能完成 任务2要经历: a2->b2->c2三个步骤才能完成i.如果两个任务同步执行的话完成两个任务是这样执
阅读全文
摘要:1,人生最重要的不是努力,不是奋斗,而是抉择。 2,老板只能给一个位置,不能给一个未来。舞台再大,人走茶凉。3,意外和明天不知道哪个先来。没有危机是最大的危机,满足现状是最大的陷阱。4,所见所闻改变一生,不知不觉断送一生。5,生意,可以掌控努力与投资,却无法掌控结果。人生得意时找出路,失意时才有退路,宝马都有备胎,您的人生呢?6,世界上有多少有才华的失败者,世界上有很多高学历的无业游民-----是因为选择错误。7,下对注,赢一次;跟对人,赢一世。8,学识不如知识,知识不如做事,做事不如做人。9,不识货,半世苦;不识人,一世苦。10,生命不在于活得长与短,而在于顿悟的早与晚。11,做人处事,待人
阅读全文
摘要:1:你想一下你比较喜欢和谁在一起,你们在一起做的事情,聊的话题,从这里可以找到自己的兴趣。2:选择很厚的综合类报纸,逐页翻过,各个板块扫描浏览。当发现某一类主题始终能够吸引自己的眼球,能够认真读完的时候,这个方面极有可能就是兴趣点。3:翻看电视各个频道,或者不同类别的电影。当发现吸引自己的片断、情节、类型时,特别是能够清晰回忆时,这也是兴趣点。4:多去参加社会活动,和课程。了解自己的工作兴趣和生活兴趣。努力让做一个快乐的人。你只有喜欢才能快乐。附:发现优点的一些办法:途径:1,自评,就是自己花一点时间来写自己的优点2,他评,就是找身边熟悉你的朋友,请他们告诉你,你的优点有那些3,测评,就是做一
阅读全文
摘要:永远觉得自己不够好。这样的人有才华、有能力,也够努力,但自我评价低、缺乏自信,难有飞越和突破。观点过于绝对。他们是非分明,世界不是黑色就是白色。可是,太过坚持原则,也很可能四处树敌,影响发展。太过苛求他人。这样的人对别人不断鞭策、严格监督。虽说佩服其才干,但“高处不胜寒”,少有人愿意与之共事。从不得罪人。这也是我们所说的“老好人”,他们害怕得罪人,拼命地避免矛盾冲突。但情绪得不到发泄,结果可能反而让气氛更加紧张。得理不饶人。他们就像“推土机”一样,做事态度强硬,有问题一定要追查到底,容易让人反感。对抗或仇视社会。他们天生叛逆,处处喜欢与人对着干。在讲究秩序的社会环境下,很难生存。总想一举成名。
阅读全文
摘要:教你9招重新认识你的老板 在各位的职业发展生涯中,个人的发展提升与企业的决策层老板对你认识是密不可分的。你自己的天赋努力是前提和基础,决策层老板的赏识和认可确是主要后因,那么,如何来看待你的大老板呢?如何来有效的与老板来沟通、来表达你的才华呢? 首先是如何来认识你的老板,这里指的老板指的是企业所有者,大多数同仁还是习惯性的把老板当是高人、大人、强人、有距离的人,感到老板很厉害,无所不知无所不晓,自己很多方面与老板相差悬殊,单独遇到老板时往往缩手缩脚,说话都不顺溜了,更别提如何充分展现自己的才华了。 还有,许多老板本身有很多传奇故事,单枪匹马力挽狂澜啦、白手起家成就非凡啦、独具慧眼抢夺天机啦等等
阅读全文
摘要:在说管理情绪之前先了解情绪,请看下图:在现代生活中怎样注意情绪锻炼呢?一、在生活变化面前,应经常保持开朗明快的心境和愉快的情绪,遇事冷静,客观地做出分析和判断。 二、要多方面培养自己的兴趣与爱好,如书法、绘画、集邮、养花、下棋、听音乐、跳舞、打太极拳等,择其所好,从事这些活动,可以修身养性,陶冶情操。三、对自己要有自知之明,遇事要尽力而为,适可而止,不要好胜逞能而去做力不从心的事。四、不要过于计较个人的得失,不要常为一些鸡毛蒜皮的事而动辄发火,愤懑要克制,怨恨要消除。五、经常从事一些力所能及的体育运动,既能锻炼筋骨,增强体质,又能使人心情舒畅,精神愉快。六、保持和睦的家庭生活和友好的人际关系、
阅读全文
摘要:在一个大的div里有2个横列(DIV),并且在大的div里加入背景图片。可是改好后,在Firefox下却无法正确显示背景图片。代码是这样的:1.HTML(样本):<div id="footer"><div id="footer_left">Content1</div><div id="footer_right">Content2</div></div>2. CSS:#footer {width:730px; background-image: url(../ima
阅读全文
摘要:大概一年左右的时间里Club数据库的CPU一直处于很高的负荷中,从40%一直攀升到如今的80%,随着数据量的增加,负担越来越重,已经频繁超时,且濒临无法服务的边缘。经长期的调查发现这是Ibatis.net的一个性能问题(同样适用于Ibatis)。问题是这样的:Club的主要业务表是Comment表,其中的主键是一个varchar(36)类型的Guid,当每次搜索一条记录时我们会使用这样的一个statement:<select id="GetComment" parameterClass="string" resultMap="Commen
阅读全文
摘要:iBatis解决sql注入(1) ibatis xml配置:下面的写法只是简单的转义 name like '%$name$%' (2) 这时会导致sql注入问题,比如参数name传进一个单引号“'”,生成的sql语句会是:name like '%'%' (3) 解决方法是利用字符串连接的方式来构成sql语句 name like '%'||'#name#'||'%' (4) 这样参数都会经过预编译,就不会发生sql注入问题了。(5) #与$区别: #xxx# 代表xxx是属性值,map里面的key或者
阅读全文
摘要:1.insert,update,delete返回值(1).insert返回的为插入的主键值,但必须在配置文件中加入<selectKey/>如果主键值为String<selectKeyresultClass="string"keyProperty="id">SELECT@@IDENTITYASID</selectKey>如果主键值为Int型<selectKeyresultClass="java.lang.Integer"keyProperty="id">SELECT@@
阅读全文
摘要:下面这个配置基本上包含了最复杂的功能:分页\搜索\排序\缓存\传值Hash表\返回hash表\动态sql<statement id="XinxiTable_SelectAll" listClass="ArrayList" resultMap="SimpleXinxi" parameterClass="Hashtable" cacheModel="xinxi-cache" > SELECT <dynamic prepend="top"> <isNo
阅读全文
摘要:在 IBatisNet 没有 IBatis4Java 的 startBatch() 函数,这让我们批量插入大量数据时很受困扰。本文介绍了如何在 IBatisNet 和 ADO.Net 中批量插入数据。 说到批量插入,我们有以下解决方案:1) 直接执行用 SqlCommand执行 INSERT语句,一条一条的插入。无疑,这样效率最低。 2) 把拼接INSERT 语句,一次插入多条;这样性能不好说,最大的问题就是 SqlCommand 有参数限制(2100个)。 3)利用 SqlBulkCopy 或SqlDataAdapter 的 Update 方法,可以实现批量的更新/插入,但是数据是基于 Da
阅读全文
摘要:除了前面两章中我们接触到的简单的数据库操作,iBATIS也可以完成更为复杂的任务。在本章中,我们会了解新的技术,减少我们的编码量;以及改善性能、降低资源消耗(footprint)的几种方法。6.1 使用iBATIS操作XML 译者注:iBATIS的Java版本可以操作基于XML的数据。但意义并不是很大,在以后的版本中该特性可能会被移除。iBATIS.NET则未提供该功能。6.2 使用映射语句关联对象iBATIS框架也提供了多种方法用以关联复杂的对象,比如订单(order)和它的订单项(order item)(还有它们的相关产品、顾客等等)。每种方法都有其优点和缺点,正所谓“尺有所短,寸有所长”
阅读全文
摘要:5.3 更新和删除数据 至此,我们已经学习了如何向数据库插入数据以及获取相应记录的键值,再来看看如何更新和删除数据。Insert方法返回的是object类型的值,而Update和Delete方法则返回int类型的值,该值指示了更新或删除语句所影响的记录数。iBATIS框架允许使用单条语句操作一条或多条记录。这是它与大多数ORM工具不同的地方之一,后者一般只能修改单条记录。5.3.1 并发更新处理 iBATIS目前尚未实现的一个功能是锁定记录以管理对相同数据的并发修改。有几种技术可用来处理并发更新,如在数据行上使用时间戳或者版本号。比如,有如下一个account表,定义为:Code highli
阅读全文
摘要:对数据库执行查询无疑很重要,但多数程序同时也需要将数据写入数据库。在本章中,我们将探究使用iBATIS操作数据库的几种方式。本章的内容以第4章介绍的概念为基础,因此,如果您刚开始接触iBATiS,还没读过第4章,可以先去浏览一下,因为这一章中的关于参数映射的绝大部分内容同样适用于本章的非查询语句。 5.1 更新数据的基石 在第4章中,您已经学习了所有的语句类型和基本查询相关的部分API。这里我们再来看一下执行非查询语句常用的API,然后回顾一下更新数据库相关的语句类型。5.1.1 非查询SQL语句相关的API 我们把更新数据库的一些“高级”的技术保留在下章中,这里就仅仅看一下insert,up
阅读全文
摘要:4.3 映射参数(Mapping Parameters) 对于大多数SQL语句来说,它们有用是因为我们可以在运行时向其传入参数。 有两种方式可以将参数(parameter)映射到语句中:内联(inline)参数和外部(external)参数。使用内联参数,配置一般较为简单,iBATIS会根据您的配置进行“揣测”,以获取其它细节信息。而使用外部参数时,配置一般更为显式的(具体)——因为您告诉iBATIS它该如何去做。 4.3.1 外部参数映射 参数映射(Parameter Map)定义了一个参数的有序列表,它与查询语句的占位符相匹配。注意,参数对象的属性定义可以按任意顺序,参数映射会确保每个值得
阅读全文
摘要:在前面的章节中,我们了解了iBATIS的sqlMap.config文件的配置,还给出了一个映射语句文件的示例。现在您应该具备了一定基础,可以进一步完善我们的数据访问层了。 本章和下一章(执行非查询语句)将详细讨论在Data Map文件中创建和使用映射语句的相关内容。在本章中,我们将首先浏览映射语句的大体内容以及它们的前提知识。然后我们将解释如何使用映射语句从数据库中获取类型化的对象(typed object),以及如何传入参数来限制返回的数据(比如添加查询条件)。在第五章中,您将学习到如何使用映射语句来更新数据库。4.1 使用基础 4.1.1 创建JavaBeans 译注:原书中本节的内容主要
阅读全文
摘要:译注:本章讲解的是iBATIS的安装和配置,原书使用的是Java版本,与.NET版本的安装、配置过程不尽相同,因此这里直接就.NET版本进行说明。主要参考的是iBATIS官方的DataMapper Guide文档,本章的配置主要针对DataMapper,DataAccess的配置将出现在第10章。 iBATIS的安装过程快速而简单。它是一个类库,而不是应用程序,所以实际上并不需要安装,但要在应用程序中使用它还是要经过几个步骤。 如果您熟悉C#和ADO.NET,那么可能需要好好阅读本章为下面的一两章做好准备。首先,我们提供了安装和配置过程的概览,然后是该过程的详细说明。 要获取iBATIS,您有
阅读全文
摘要:2.5 iBATIS快速上手 iBATIS框架非常简单,它上手起来同样简单。有多简单呢?使用iBATIS只要五分钟我们就可以创建一个完整的应用程序了——当然这不是大型的ERP(Enterprise Resource Planning)解决方案,也不是大规模的电子商务网站,只是一个简单的命令行工具,它可以执行iBATIS SQL Map中的SQL语句并返回结果到控制台。下面这个例子将配置一个简单的静态SQL语句,查询一个简单的数据表,将结果输出到控制台,效果如下:<!--[endif]--> 输出的数据实在不算漂亮,但足够我们了解iBATIS基本的工作原理了。在下面几个小节中,我们会
阅读全文
摘要:iBATIS是一个混合式的解决方案(hybrid solution),借鉴了多种操作关系数据库的方法的理念。那么iBATIS到底是什么呢?这一章就来回答这个问题。iBATIS是一种data mapper。Martin Fowler在他的《Patterns of Enterprise Application Architecture》一书中是这样描述Data Mapper的:一个映射层,在对象和数据库间传递数据,并保持两者与映射层本身相独立。.注:Mapper是在两个独立对象间建立通信关系的一种对象。Martin很好地区分了数据映射(Data Mapping)和元数据映射(Metadata Ma
阅读全文
摘要:在一个邮件列表的讨论中,了解了如何在IBatis.Net中返回DataSet以及一些相关的内容。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->publicstaticDataSetQueryForDataSet(stringstatementName,objectparamObject){DataSetds=newDataSet();ISqlMappermapper=GetMapper();IMappedStatementstatement
阅读全文
摘要:最近有人问我怎么获取存储过程的output的参数值,由于我最近没有用Ibatis.net,所以就从文档中找到的param的xml,也就没有在意,但后来有人说调不通,今天早上又收到一份留言,所以我早上作了测试!也出现获取不到数据的问题,但最后还是解决了!我的测试环境是sqlserver2005/vs2005/ibatis.net2.0如下:procedure:createprocsp_output(@testParamintoutput)asbeginset@testParam=10endgoxml:<parameterMaps><parameterMapid="se
阅读全文
摘要:其实调用方式比较简单,主要也就是两种类型的存储过程:1、更新类型的存储过程2、查询类型的存储过程下面就来看看具体的调用方式:1、更新类型的存储过程sp_InsertAccount:CREATEPROCEDURE[dbo].[sp_InsertAccount]--Addtheparametersforthestoredprocedurehere@Account_IDint,@Account_FirstNamevarchar(32),@Account_LastNamevarchar(32)ASBEGINinsertintoaccounts(account_id,account_firstname,
阅读全文
摘要:Castle是另外一个框架,包含了AOP、IOC、ORM等多个方面,其中的Castle.DynamicProxy可以实现动态代理的功能,这个也是很多框架的基础。在IBatis.Net中就是使用了Castle.DynamicProxy来实现数据库连接等动态操作的。同时在NHibernet等其他框架中也使用到了这个技术。下面我通过一个简单例子来看一下如何在我们的代码中调用Castle.DynamicProxy:一般情况下要有三个类:1、接口类:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceGSpring.
阅读全文
摘要:在IBatis.Net中可以通过配置文件动态选择数据库、动态选择Dao对象。Dao对象也就是操作数据库的类,通过配置文件我们可以选择DataMapper的方式、Ado的方式、NHibernet的方式以前其他第三方的方式来操作数据库。有利于系统的灵活性和可扩展性。通过分析动态选择Dao的设计可以加深对IBatis.Net的理解,更好的使用它,同时也可以借鉴它的好的设计模式,应用到我们的程序开发中去。源代码是最好的分析方式,下面是一些重点代码和说明:前提:需要在dao.config中配置:<daoFactory><daointerface="GSpring.Dao.In
阅读全文
摘要:在上一篇文章中我提到了三种方式,都是各有利弊:第一种方式当数据关联很多的情况下,实体类会很复杂;第二种方式比较灵活,但是不太符合OO的思想(不过,可以适当使用);第三种方式最主要的问题就是性能不太理想,配置比较麻烦。下面是第四种多表查询的方式,相对第二种多了一点配置,但是其他方面都很好(当然可能还有其他更好地解决方法,希望能多提宝贵意见-_-)例子还是一样:两张表Account和Degree,使用Account_ID关联,需要查出两张表的所有纪录首先:修改实体类,增加以下属性:privateDegree_degree;publicDegreeDegree{get{return_degree;}
阅读全文
摘要:在项目开发过程中,查询占了很大的一个比重,一个框架的好坏也很多程度上取决于查询的灵活性和效率。在IBatis.Net中提供了方便的数据库查询方式。在Dao代码部分主要有两种方式:1、查询结果为一个对象:ISqlMappersqlMap=sqlMapDaoSession.SqlMap;return(Account)sqlMap.QueryForObject("GetAccountViaColumnName",accountID);2、查询结果为一个列表:ISqlMappersqlMap=sqlMapDaoSession.SqlMap;return(ArrayList)sqlM
阅读全文
摘要:在IBatis中提供了数据库缓存的模式,可以提高访问效率。对于一些不常更新的表可以直接利用IBatis的缓存方式。要使用IBatis的数据库缓存,只要利用配置文件就可以了,实现起来比较简单:<selectid="GetCachedAccountsViaResultMap"resultMap="account-result"cacheModel="account-cache">select*fromAccountsorderbyAccount_ID</select>最主要的就是cacheModel="a
阅读全文
摘要:在IBatis中我们可以灵活的选择DAO类型,也就是可以在底层选用不同的数据库操作方式。有常规方式、配置文件的方式、Hibernet的方式等:1、常规方式和我们之前的ADO.NET开发较为类似,都是将sql语句写在cs代码中进行调用:首先通过配置文件初始化:DomDaoManagerBuilderbuilder=newDomDaoManagerBuilder();builder.Configure("dao"+"_"+ConfigurationManager.AppSettings["database"]+"_"+
阅读全文
摘要:最近这段时间一直在用IBatis来进行开发。现在把这段时间的一些开发心得写出来,跟大家一起分享。首先,IBatis可以说转变了我以前的一些思想。我们以前开发项目的时候,总是先建立好数据库,分析清楚表与表之间的关系,才开始根据这些表进行实际的开发。实际上并没有完全把面向对象的优势展现出来。现在的使用IBatis。顺序可以是这样,首先项目经理会分析整个项目,可以分成为几个对象,每个对象具有什么属性,什么方法。同时会用visio画出UML图来。这样可以说把面向对象的优势完全体现出来了。 然后程序员会根据UML图来操作对象,实现每个对象的属性和方法。这样就可以完全脱离数据库,去考虑程序的问题。这种开发
阅读全文
摘要:Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。 你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行。一个自动执行而无须干预的任务在执行过程中如果发生一个严重错误,应用能够知到其执行失败并尝试重新执行吗?你和你的团队是用.NET编程吗?如果这些问题中任何一个你回答
阅读全文
摘要:什么是MVC模式MVC(Model-View-Controller,模型—视图—控制器模式)用于表示一种软件架构模式。它把软件系统分为三个基本部分:模型(Model),视图(View)和控制器(Controller)。那么MVC模式和我们熟悉的WebForm模式有什么不同呢?他的各个部分又是怎样分工的呢?我们先来看一下普通的WebForm模式下,我们请求一个例如http://www.51mvc.com/blog/index.aspx的URL,那么我们的WebForm程序会到网站根目录下去寻找blog目录下的index.aspx文件,然后由index.aspx页面的CodeBehind文件(.C
阅读全文
摘要:项目中需要把所的错误信息写入一个文件(log_infoYYYY.MM.DD),用户操作信息写入另一个文件(log_infoYYYY.MM.DD)中。<log4net> <root> <level value="DEBUG" /> <appender-ref ref="LogFileAppender" /> <appender-ref ref="ErrorFileAppender"/> </root> <appender name="LogFileA
阅读全文
浙公网安备 33010602011771号