定律是在軟件工程中罕見的代碼教程剖析_第1頁
定律是在軟件工程中罕見的代碼教程剖析_第2頁
定律是在軟件工程中罕見的代碼教程剖析_第3頁
定律是在軟件工程中罕見的代碼教程剖析_第4頁
定律是在軟件工程中罕見的代碼教程剖析_第5頁
已閱讀5頁,還剩33頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

永恒定律是在軟件工程中罕見的,而當(dāng)一名工程師宣稱已經(jīng)找到了一個,即工程師通常持懷疑態(tài)度重視[代碼]UserMapper.javapackagecn.itcast.mybatis.mapper;importjava.util.List;importcn.itcast.mybatis.po.User;importcn.itcast.mybatis.po.UserCustom;importcn.itcast.mybatis.po.UserQueryVo;一般原則是更受歡迎。在這篇代碼,我傳達(dá)現(xiàn)代軟件工程的一些松散的理念。這些都是弱持有強(qiáng)烈的意見。我歡迎辯論和討論。一個小丑/****?author:小南風(fēng)2016年3月25日**/publicinterfaceUserMapper{〃用戶信息綜合查詢publicList<UserCustom>findUserList(UserQueryVouserQueryVo);〃用戶信息綜合查詢總數(shù)publicintfindUserCount(UserQueryVouserQueryVo);〃根據(jù)id查詢用戶信息publicUserfindUserById(intid);//根據(jù)id查詢用戶信息,使用resultMap輸出publicUserfindUserByIdResultMap(intid);//根據(jù)用戶名列查詢用戶列表publicList<User>findUserByName(Stringname);//插入用戶publicvoidinsertUser(Useruser);〃刪除用戶publicvoiddeleteUser(intid);[代碼][GoogleGo]代碼packagemainimport("io/ioutil”"net/http”"net/"〃fmt〃"encoding/json")// //黃金數(shù)據(jù)調(diào)用示例代碼一聚合數(shù)據(jù)//在線接口文檔:www/docs/29// constAPPKEY="*******************"http://您申請的APPKEYfuncmain(){//1.上海黃金交易所Request1()//2.上海期貨交易所Request2()//3.銀行賬戶黃金Request3()}//1.上海黃金交易所funcRequest1(){//請求地址juhe:="web:8080/finance/gold/shgold”//初始化參數(shù)param:=.Values{}翻譯的不錯哦!你沒必要去證明你自己。軟件是一個新的領(lǐng)域,沒有人知道要去如何做。如果有人說你是不合格的,因此你必須去做一些維護(hù)的工作,你應(yīng)該質(zhì)疑那個人。我們有一個倒置的體系,那些收入最少的人做最糟糕的工作。他們往往是年輕和幼稚的。//配置請求參數(shù),方法內(nèi)部已處理encode問題,中文參數(shù)可以直接傳參param.Set("key”,APPKEY)//APPKeyparam.Set("v”,"")//JSON格式版本(0或1)默認(rèn)為0〃發(fā)送請求data,err:=Get(juhe,param)iferr!=nil{fmt.Errorf("請求失敗,錯誤信息:\r\n%v”,err)}else{varnetReturnmap[string]interface{}json.Unmarshal(data,&netReturn)ifnetReturn["error_code"].(float64)==0{fmt.Printf("接口返回result字段是:\r\n%v”,netReturn["result"])}}}//2.上海期貨交易所funcRequest2(){//請求地址juhe:="web:8080/finance/gold/shfuture"這不是一個公理。大公司給青年工程師的敘述:年薪8萬美的工作,做軟件維護(hù)的工作,為公司創(chuàng)造了一百萬的效益,然后憎恨你的生活。//初始化參數(shù)param:=.Values{}//配置請求參數(shù),方法內(nèi)部已處理encode問題,中文參數(shù)可以直接傳參param.Set("key”,APPKEY)//APPKeyparam.Set("v”,"")//JSON格式版本(0或1)默認(rèn)為0〃發(fā)送請求data,err:=Get(juhe,param)iferr!=nil{fmt.Errorf("請求失敗,錯誤信息:\r\n%v”,err)}else{varnetReturnmap[string]interface{}json.Unmarshal(data,&netReturn)ifnetReturn["error_code"].(float64)==0{fmt.Printf("接口返回result字段是:\r\n%v”,netReturn["result"])}}}在你花費(fèi)了足夠的時間在上之后,我們會讓你成為SDE2,你可以做稍微高級別的工作,年薪15萬美元,這將為公司創(chuàng)造五百萬的效益。這就是套利。終日乾乾//3.銀行賬戶黃金funcRequest3(){//請求地址juhe:="web:8080/finance/gold/bankgold”//初始化參數(shù)param:=.Values{}//配置請求參數(shù),方法內(nèi)部已處理encode問題,中文參數(shù)可以直接傳參param.Set("key”,APPKEY)//APPKey〃發(fā)送請求data,err:=Get(juhe,param)iferr!=nil{fmt.Errorf("請求失敗,錯誤信息:\r\n%v”,err)}else{varnetReturnmap[string]interface{}json.Unmarshal(data,&netReturn)ifnetReturn["error_code"].(float64)==0{fmt.Printf("接口返回result字段是:\r\n%v”,netReturn["result"])}}}//get網(wǎng)絡(luò)請求funcGet(apistring,params.Values)(rs[]byte,errerror){var*.,err=.Parse(api)iferr!=nil{fmt.Printf("解析錯誤:\r\n%v”,err)returnnil,err}〃如果參數(shù)中有中文參數(shù),這個方法會進(jìn)行Encode.RawQuery=params.Encode()resp,err:=http.Get(.String())iferr!=nil{fmt.Println("err:",err)returnnil,err}deferresp.Body.Close()returnioutil.ReadAll(resp.Body)}//post網(wǎng)絡(luò)請求,params是.Values類型funcPost(apistring,params.Values)(rs[]byte,errerror){resp,err:=http.PostForm(api,params)iferr!=nil{returnnil,err}deferresp.Body.Close()returnioutil.ReadAll(resp.Body)}代碼描述:基于GO的黃金數(shù)據(jù)接口調(diào)用代碼實例關(guān)聯(lián)數(shù)據(jù):黃金數(shù)據(jù)[代碼][C#]代碼usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Net;usingSystem.IO;usingXfrog.Net;usingSystem.Diagnostics;usingSystem.Web;// //黃金數(shù)據(jù)調(diào)用示例代碼一聚合數(shù)據(jù)//在線接口文檔:www/docs/29//代碼中JsonObject類下載地址:/download/gcm3206021155665/7458439// namespaceConsoleAPI{classProgram{staticvoidMain(string[]args){stringappkey=〃*******************〃;//配置您申請的appkey//1.上海黃金交易所string1=〃web:8080/finance/gold/shgold〃;varparameters】=newDictionary<string,string>();parameters1.Add(〃key〃,appkey);//你申請的keyparameters1.Add(〃v〃,"”);//JSON格式版本(0或1)默認(rèn)為0stringresult1=sendPost(1,parameters1,"get");JsonObjectnewObjl=newJsonObject(resultl);StringerrorCodel=newObj1["error_code"].Value;if(errorCode1=="0"){Debug.WriteLine("成功”);Debug.WriteLine(newObj1);}else{//Debug.WriteLine("失敗”);Debug.WriteLine(newObj1["error_code"].Value+":"+newObj1["reason"].Value);}//2.上海期貨交易所string2="web:8080/finance/gold/shfuture";varparameters?=newDictionary<string,string>();parameters2.Add("key”,appkey);//你申請的keyparameters2.Add("v”,"");//JSON格式版本(0或1)默認(rèn)為0stringresult2=sendPost(2,parameters2,"get");JsonObjectnewObj2=newJsonObject(result2);StringerrorCode2=newObj2["error_code"].Value;if(errorCode2=="0"){Debug.WriteLine("成功”);Debug.WriteLine(newObj2);}else{//Debug.WriteLine("失敗”);Debug.WriteLine(newObj2["error_code"].Value+":"+newObj2["reason"].Value);}//3.銀行賬戶黃金string3="web:8080/finance/gold/bankgold";varparameters3=newDictionary<string,string>();parameters3.Add("key”,appkey);//你申請的keystringresult3=sendPost(3,parameters3,"get");JsonObjectnewObj3=newJsonObject(result3);StringerrorCode3=newObj3["error_code"].Value;if(errorCode3=="0"){Debug.WriteLine("成功”);Debug.WriteLine(newObj3);}else{//Debug.WriteLine("失敗”);Debug.WriteLine(newObj3["error_code"].Value+":"+newObj3["reason"].Value);}}///<summary>///Http(GET/POST)///</summary>///<paramname="">^求</param>///<paramname="parameters">^求參數(shù)</param>///<paramname="method">^求方法</param>///<returns>響應(yīng)內(nèi)容</returns>staticstringsendPost(string,IDictionary<string,string>parameters,stringmethod){if(method.ToLower()=="post"){HttpWebRequestreq=null;HttpWebResponsersp=null;System.IO.StreamreqStream=null;try{req=(HttpWebRequest)WebRequest.Create();req.Method=method;req.KeepAlive=false;req.ProtocolVersion=HttpVersion.Version10;req.Timeout=5000;req.ContentType="application/x-www-form-encoded;charset=utf-8";byte[]postData=Encoding.UTF8.GetBytes(BuildQuery(parameters,"utf8”));reqStream=req.GetRequestStream();reqStream.Write(postData,0,postData.Length);rsp=(HttpWebResponse)req.GetResponse();Encodingencoding=Encoding.GetEncoding(rsp.CharacterSet);returnGetResponseAsString(rsp,encoding);}catch(Exceptionex){returnex.Message;}finally{if(reqStream!=null)reqStream.Close();if(rsp!=null)rsp.Close();}}else{//創(chuàng)建請求HttpWebRequestrequest=(HttpWebRequest)WebRequest.Create(+”?”+BuildQuery(parameters,"utf8”));//GET請求request.Method="GET”;request.ReadWriteTimeout=5000;request.ContentType="text/html;charset=UTF-8";HttpWebResponseresponse=(HttpWebResponse)request.GetResponse();StreammyResponseStream=response.GetResponseStream();StreamReadermyStreamReader=newStreamReader(myResponseStream,Encoding.GetEncoding("utf-8"));〃返回內(nèi)容stringretString=myStreamReader.ReadToEnd();returnretString;///<summary>///組裝普通文本請求參數(shù)。///</summary>///<paramname="parameters">Key-Value形式請求參數(shù)字典</param>///<returns>編碼后的請求數(shù)據(jù)</returns>staticstringBuildQuery(IDictionary<string,string>parameters,stringencode){StringBuilderpostData=newStringBuilder();boolhasParam=false;IEnumerator<KeyValuePair<string,string>>dem=parameters.GetEnumerator();while(dem.MoveNext()){stringname=dem.Current.Key;stringvalue=dem.Current.Value;〃忽略參數(shù)名或參數(shù)值為空的參數(shù)if(!string.IsNullOrEmpty(name))//&&!string.IsNullOrEmpty(value){if(hasParam){postData.Append("&");}postData.Append(name);postData.Append("=");if(encode=="gb2312"){postData.Append(HttpUtility.Encode(value,Encoding.GetEncoding("gb2312")));}elseif(encode=="utf8"){postData.Append(HttpUtility.Encode(value,Encoding.UTF8));}else{postData.Append(value);}hasParam=true;returnpostData.ToString();///<summary>///把響應(yīng)流轉(zhuǎn)換為文本。///</summary>///<paramname="rsp">^應(yīng)流對象</param>///<paramname="encoding">^碼方式</param>///<returns>響應(yīng)文本</returns>staticstringGetResponseAsString(HttpWebResponsersp,Encodingencoding){System.IO.Streamstream=null;StreamReaderreader=null;try{//以字符流的方式讀取HTTP響應(yīng)stream=rsp.GetResponseStream();reader=newStreamReader(stream,encoding);returnreader.ReadToEnd();}finally{//釋放資源if(reader!=null)reader.Close();if(stream!=null)stream.Close();if(rsp!=null)rsp.Close();}}}}[代碼][PHP]代碼/***c遠(yuǎn)程傳輸工具*/publicfunctionpost_c($,$body,$header,$type='POST'){$ch=c_init();c_setopt($ch,COPT_,$);c_setopt($ch,COPT_HEADER,0);//0只要正文c_setopt($ch,COPT_TIMEOUT,5);//設(shè)置超時時間c_setopt($ch,COPT_CONNECTTIMEOUT,5);//將c_exec()獲取的信息以文件流的形式返回,而不是直接輸出。c_setopt($ch,COPT_RETURNTRANSFER,1);//增加header頭信息//array_push($header,'Accept:application/json');//array_push($header,'Content-Type:application/json');//array_push($header,'http:multipart/form-data');if(count($body)>0){c_setopt($ch,COPT_POSTFIELDS,$body);}if(count($header)>0){c_setopt($ch,COPT_HTTPHEADER,$header);}〃設(shè)置上傳文件相關(guān)c_setopt($ch,COPT_FOLLOWLOCATION,true);c_setopt($ch,COPT_MAXREDIRS,3);//遞歸c_setopt($ch,COPT_SSL_VERIFYPEER,false);//對認(rèn)證證書來源的檢查c_setopt($ch,COPT_SSL_VERIFYHOST,0);//從證書中檢查SSL加密算法switch($type){case'GET':c_setopt($ch,COPT_HTTPGET,1);break;case'POST':c_setopt($ch,COPT_POST,1);break;case'PUT':c_setopt($ch,COPT_CUSTOMREQUEST,'PUT');break;case'DELETE':c_setopt($ch,COPT_CUSTOMREQUEST,'DELETE');break;}//上傳文件相關(guān)設(shè)置c_setopt($ch,COPT_ENCODING,'gzip');c_setopt($ch,COPT_USERAGENT,'SSTSBrowser/1.0');c_setopt($ch,COPT_USERAGENT,'Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.0;Trident/4.0)');//模擬用戶使用的瀏覽器if(c_errno($ch)){returnc_error($ch);}$content=c_exec($ch);c_close($ch);//關(guān)閉c資源,并且釋放系統(tǒng)資源$result=json_decode($content,true);if(!empty($result)){return$result;}else{return$content;[代碼][C/C++]代碼/*編譯指令$/opt/sybase/OCS-16_0/bin/cpre64-mteststu.cp$cc-m64-g-DSYB_LP64-I.-I/opt/sybase/OCS-16_0/includeteststu.c/opt/sybase/OCS-16_0/include/sybesql.c-L/opt/sybase/OCS-16_0/lib-lsybct64-lsybtcl64-lsybcs64-lsybcomn64-lsybintl64-lsybunic64-rdynamic-ldl-lnsl-lm-oteststu*/#include<stdio.h>/*建立通訊區(qū)域*/EXECSQLINCLUDESQLCA;/***Thesetokensmustbedeclaredinadeclaresection**becausetheyareusedindeclaresectionsbelow.*/EXECSQLBEGINDECLARESECTION;#defineTYPESIZE 13#defineTIDSIZE 6EXECSQLENDDECLARESECTION;#defineEOLN'\0'/***Forwarddeclarationsoftheerrorandmessagehandlersand**othersubroutinescalledfrommain().*/voiderror_handler();voidwarning_handler();秦皇島同城購便偌侮intmain(intargc,char*argv[]){/*聲明宿主變量*/EXECSQLBEGINDECLARESECTION;/*storageforloginnameandpassword.*/char username[30];char sname[30];char password[30];char server[30];EXECSQLENDDECLARESECTION;/*錯誤處理*/EXECSQLWHENEVERSQLERRORCALLerror_handler();EXECSQLWHENEVERSQLWARNINGCALLwarning_handler();EXECSQLWHENEVERNOTFOUNDCONTINUE;/*連接到SQLSERVER服務(wù)器*//***Copytheusernameandpassworddefinedinsybsqlex.hto**thevariablesdeclaredfortheminthedeclaresection.*/strcpy(username,"mymotif");strcpy(password,"wxwpxh");strcpy(server,"MYMOTIFVOSTRO145480");EXECSQLCONNECT:usernameIDENTIFIEDBY:passwordusing:server;EXECSQLUSEtestdb;EXECSQLDECLAREc1CURSORFORSELECTSNAMEFROMSTUDENT;EXECSQLOPENc1;printf("nameintablestudent\n");do{EXECSQLFETCHc1INTO:sname;if(sqlca.sqlcode!=0)break;printf("studentname=%s\n”,sname);}while(1);EXECSQLCLOSEc1;return(0);}/*錯誤處理程序*//***voiderror_handler()****DisplayserrorcodesandnumbersfromtheSQLCAandexitswith**anERREXITstatus.*/voiderror_handler(void){fprintf(stderr,"\n**SQLCODE=(%ld)”,sqlca.sqlcode);if(sqlca.sqlerrm.sqlerrml){fprintf(stderr,"\n**ASEError");fprintf(stderr,"\n**%s",sqlca.sqlerrm.sqlerrmc);fprintf(stderr,〃\n\n〃);exit(-1);}/***voidwarning_handler()****Displayswarningmessages.*/voidwarning_handler(void){if(sqlca.sqlwarn[1]=='W'){fprintf(stderr,"\n**Datatruncated.\n");}if(sqlca.sqlwarn[3]=='W'){fprintf(stderr,"\n**Insufficienthostvariablestostoreresults.\n");}return;}[代碼]Log4j配置<!日志jar><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></dependency>導(dǎo)入這個包,會引入下面兩個jar<!—spring的基本jar包一><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency><!--commons-login是必須的,而且沒有依賴,是獨(dú)立的包--><dependency><groupId>commons-logging</groupId><artifactId>commons-logging-api</artifactId><version>1.1</version></dependency><dependency><!—transactionManager實務(wù)管理的時候,需要這個jar包一><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId></dependency><dependency><!—當(dāng)spring-config.xml文件中配置<aop:aspect>需要加入此包一><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId></dependency>[文件]無縫滾動.html~1KB<!DOCTYPEhtml><html><head><metacharset="utf-8"><title></title><styletype="text/css">*{margin:0;padding:0;}#wrapulli{width:380px;height:230px;float:left;list-style:none;}#wrapul{position:absolute;left:0;top:0;}#wrap{width:1520px;height:230px;margin:100px50px;position:relative;background:red;overflow:hidden;}</style><scripttype="text/javascript">window.onload=function(){varoDiv=document.getElementById('wrap');varoUl=oDiv.getElementsByTagName('ul')[0];varoLi=oUl.getElementsByTagName('li');oUl.innerHTML=oUl.innerHTML+oUl.innerHTML;oUl.style.width=oLi[0].offsetWidth*oLi.length+'px';setInterval(function(){if(oUl.offsetLeft<-oUl.offsetWidth/2){oUl.style.left='0'}oUl.style.left=oUl.offsetLeft-2+'px';},30)}</script></head><body><divid="wrap"><ul><li><imgsrc="img/tour1.jpg”/></li><li><imgsrc="img/tour2.jpg"/></li><li><imgsrc="img/tour3.jpg”/></li><li><imgsrc="img/tour4.jpg"/></li></ul></div></body></html>[代碼]獲取的參數(shù)〃獲取的參數(shù)functiongetParam(paramKey){〃獲取當(dāng)前var=location.href;//獲取要取得的get參數(shù)位置varget=.indexOf(paramKey+"=");if(get==-1){returnfalse;}//截取字符串vargetParamStr=.slice(paramKey.length+get+1);//判斷截取后的字符串是否還有其他get參數(shù)varnextparam=getParamStr.indexOf("&");if(nextparam!=-1){getParamStr=getParamStr.slice(0,nextparam);}returndecodeURIComponent(getParamStr);}[代碼]添加參數(shù)//添加參數(shù)functionaddParam(,paramKey,paramVal){varandStr="?";varbeforeparam=.indexOf("?”);if(beforeparam!=-1){andStr="&”;}return+andStr+paramKey+"="+encodeURIComponent(paramVal);}[代碼]刪除參數(shù)〃刪除參數(shù)functiondelParam(,paramKey){varParam=.substr(.indexOf("?”)+1);varbefore=.substr(0,.indexOf("?”));」—〃〃varnext= ;vararr=newArray();if(Param!=""){varParamArr=Param.split("&");for(vari=0;i<ParamArr.length;i++){varparamArr=ParamArr[i].split("=");if(paramArr[0]!=paramKey){arr.push(ParamArr[i]);}}}if(arr.length>0){next="?”+arr.join("&");}=before+next;return;}[代碼][C#]代碼#region防止sql注入式攻擊(可用于UI層控制)//////判斷字符串中是否有SQL攻擊代碼//////傳入用戶提交數(shù)據(jù)///true-安全;false-有注入攻擊現(xiàn)有;publicboolProcessSqlStr(stringinputString){stringSqlStr=@"and|or|exec|execute|insert|select|delete|update|alter|create|drop|count|\*|chr|char|asc|mid|substring|master|truncate|declare|xp_cmdshell|restore|backup|net+user|net+localgroup+administrators”;try{if((inputString!=null)&&(inputString!=String.Empty)){stringstr_Regex=@"\b("+SqlStr+@")\b";RegexRegex=newRegex(str_Regex,RegexOptions.IgnoreCase);//strings=Regex.Match(inputString).Value;if(true==Regex.IsMatch(inputString))returnfalse;}}catch{returnfalse;}returntrue;}//////處理用戶提交的請求,校驗sql注入式攻擊,在頁面裝置時候運(yùn)行///System.Configuration.ConfigurationSettings.AppSettings["ErrorPage"].ToString();為用戶自定義錯誤頁面提示地址,///在Web.Config文件時里面添加一個ErrorPage即可/////////publicvoidProcessRequest(){trystringgetkeys="”;stringsqlErrorPage=System.Configuration.ConfigurationSettings.AppSettings[〃ErrorPage〃].ToString();if(System.Web.HttpContext.Current.Request.QueryString!=null){for(inti=0;i<System.Web.HttpContext.Current.Request.QueryString.Count;i++){getkeys=System.Web.HttpContext.Current.Request.QueryString.Keys[i];if(!ProcessSqlStr(System.Web.HttpContext.Current.Request.QueryString[getkeys])){System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage+〃?errmsg=〃+getkeys+〃有SQL攻擊嫌疑!");System.Web.HttpContext.Current.Response.End();}}}if(System.Web.HttpContext.Current.Request.Form!=null){for(inti=0;i<System.Web.HttpContext.Current.Request.Form.Count;i++){getkeys=System.Web.HttpContext.Current.Request.Form.Keys[i];if(!ProcessSqlStr(System.Web.HttpContext.Current.Request.Form[getkeys])){System.Web.HttpContext.Current.Response.Redirect(sqlErrorPage+〃?errmsg=〃+getkeys+〃有SQL攻擊嫌疑!");System.Web.HttpContext.Current.Response.End();}}}}catch{//錯誤處理:處理用戶提交信息!}}#endregion#region轉(zhuǎn)換sql代碼(也防止sql注入式攻擊,可以用于業(yè)務(wù)邏輯層,但要求UI層輸入數(shù)據(jù)時候進(jìn)行解碼)//////提取字符固定長度////////////publicstringCheckStringLength(stringinputString,Int32maxLength){if((inputString!=null)&&(inputString!=String.Empty)){inputString=inputString.Trim();if(inputString.Length>maxLength)inputString=inputString.Substring(0,maxLength);}returninputString;}//////將輸入字符串中的sql敏感字,替換成〃[敏感字]〃,要求輸出時,替換回來/////////publicstringMyEncodeInputString(stringinputString){//要替換的敏感字stringSqlStr=@"and|or|exec|execute|insert|select|delete|update|alter|create|drop|count|\*|chr|char|asc|mid|substring|master|truncate|declare|xp_cmdshell|restore|backup|net+user|net+localgroup+administrators”;try{if((inputString!=null)&&(inputString!=String.Empty)){stringstr_Regex=@"\b("+SqlStr+@")\b";RegexRegex=newRegex(str_Regex,RegexOptions.IgnoreCase);//strings=Regex.Match(inputString).Value;MatchCollectionmatches=Regex.Matches(inputString);for(inti=0;i<matches.Count;i++)inputString=inputString.Replace(matches[i].Value,"["+matches[i].Value+"]");}catch{」〃〃return;}returninputString;}//////將已經(jīng)替換成的〃[敏感字]〃,轉(zhuǎn)換回來為〃敏感字〃/////////publicstringMyDecodeOutputString(stringoutputstring){〃要替換的敏感字stringSqlStr=@"and|or|exec|execute|insert|select|delete|update|alter|create|drop|count|\*|chr|char|asc|mid|substring|master|truncate|declare|xp_cmdshell|restore|backup|net+user|net+localgroup+administrators”;try{if((outputstring!=null)&&(outputstring!=String.Empty)){stringstr_Regex=@"\[\b("+SqlStr+@")\b\]";RegexRegex=newRegex(str_Regex,RegexOptions.IgnoreCase);MatchCollectionmatches=Regex.Matches(outputstring);for(inti=0;i<matches.Count;i++)outputstring=outputstring.Replace(matches[i].Value,matches[i].Value.Substring(1,matches[i].Value.Length-2));}}catch{」〃〃return;}returnoutputstring;}#endregion}[代碼]UserMapper.xml<?xmlversion="1.0"encoding="UTF-8”?><!DOCTYPEmapperPUBLIC"-////DTDMapper3.0//EN""/dtd/mybatis-3-mapper.dtd"><!--namespace命名空間,作用就是對sql進(jìn)行分類化管理,理解sql隔離注意:使用mapper代理方法開發(fā),namespace有特殊重要的作用,namespace等于mapper接口地址--><mappernamespace="cn.itcast.mybatis.mapper.UserMapper"><!--定義sql片段id:sql片段的唯一標(biāo)識經(jīng)驗:是基于單表來定義sql片段,這樣話這個sql片段可重用性才高在sql片段中不要包括where--><sqlid="query_user_where"><iftest="userCustom!=null"><iftest="userCustom.sex!=nullanduserCustom.sex!=''">anduser.sex=#{userCustom.sex}</if><iftest="userCustom.username!=nullanduserCustom.username!=''">anduser.usernameLIKE'%${userCustom.username}%'</if><iftest="ids!=null"><!—使用foreach遍歷傳入idscollection:指定輸入對象中集合屬性item:每個遍歷生成對象中open:開始遍歷時拼接的串close:結(jié)束遍歷時拼接的串separator:遍歷的兩個對象中需要拼接的串--><!--使用實現(xiàn)下邊的sql拼接:AND(id=1ORid=10ORid=16)--><foreachcollection="ids"item="user_id"open="AND("close=")"separator="or"><!--每個遍歷需要拼接的串-->id=#{user_id}</foreach><!--實現(xiàn)“andidIN(1,10,16)”拼接--><!--<foreachcollection="ids"item="user_id"open="andidIN(close=")"separator=”,">每個遍歷需要拼接的串#{user_id}</foreach>--></if></if></sql><!--定義resultMap將SELECTidid_,usernameusername_FROMUSER和User類中的屬性作一個映射關(guān)系type:resultMap最終映射的java對象類型,可以使用別名id:對resultMap的唯一標(biāo)識-->〈resultMaptype="user"id="userResultMap"><!--id表示查詢結(jié)果集中唯一標(biāo)識column:查詢出來的列名property:type指定的pojo類型中的屬性名最終resultMap對column和property作一個映射關(guān)系(對應(yīng)關(guān)系)--><idcolumn="id_"property="id"/><!--result:對普通名映射定義column:查詢出來的列名property:type指定的pojo類型中的屬性名最終resultMap對column和property作一個映射關(guān)系(對應(yīng)關(guān)系)--><resultcolumn="username_"property="username"/></resultMap><!--用戶信息綜合查詢#{userCustom.sex}:取出pojo包裝對象中性別值${userCustom.username}:取出pojo包裝對象中用戶名稱--><selectid="findUserList"parameterType="cn.itcast.mybatis.po.UserQueryVo”resultType="cn.itcast.mybatis.po.UserCustom">SELECT*FROMUSER<!--where可以自動去掉條件中的第一個and--><where><!--引用sql片段的id,如果refid指定的id不在本mapper文件中,需要前邊力口namespace--><includerefid="query_user_where"></include><!--在這里還要引用其它的sql片段--></where></select><!--用戶信息綜合查詢總數(shù)parameterType:指定輸入類型和findUserList一樣resultType:輸出結(jié)果類型--><selectid="findUserCount"parameterType="cn.itcast.mybatis.po.UserQueryVo”resultType="int">SELECTcount(*)FROMUSER<!--where可以自動去掉條件中的第一個and--><where><!--引用sql片段的id,如果refid指定的id不在本mapper文件中,需要前邊加namespace--><includerefid="query_user_where"></include><!--在這里還要引用其它的sql片段--></where></select><!--在映射文件中配置很多sql語句--><!--需求:通過id查詢用戶表的記錄--><!--通過select執(zhí)行數(shù)據(jù)庫查詢id:標(biāo)識映射文件中的sql將sql語句封裝到mappedStatement對象中,所以將id稱為statement的idparameterType:指定輸入?yún)?shù)的類型,這里指定int型#{}表示一個占位符號#{id}:其中的id表示接收輸入的參數(shù),參數(shù)名稱就是id,如果輸入?yún)?shù)是簡單類型,#{}中的參數(shù)名可以任意,可以value或其它名稱resultType:指定sql輸出結(jié)果的所映射的java對象類型,select指定resultType表示將單條記錄映射成的java對象。--><selectid="findUserById"parameterType="int"resultType="user">SELECT*FROMUSERWHEREid=#{value}</select><!--使用resultMap進(jìn)行輸出映射resultMap:指定定義的resultMap的id,如果這個resultMap在其它的mapper文件,前邊需要加namespace--><selectid="findUserByIdResultMap"parameterType="int"resultMap="userResultMap">SELECTidid_,usernameusername_FROMUSERWHEREid=#{value}</select><!--根據(jù)用戶名稱模糊查詢用戶信息,可能返回多條resultType:指定就是單條記錄所映射的java對象類型${}:表示拼接sql串,將接收到參數(shù)的內(nèi)容不加任何修飾拼接在sql中。使用${}拼接sql,引起sql注入${value}:接收輸入?yún)?shù)的內(nèi)容,如果傳入類型是簡單類型,${}中只能使用value--><selectid="findUserByName"parameterType="java.lang.String”resultType="cn.itcast.mybatis.po.User">SELECT*FROMUSERWHEREusernameLIKE'%${value}%'</select><!--添加用戶parameterType:指定輸入?yún)?shù)類型是pojo(包括用戶信息)#{}中指定pojo的屬性名,接收到pojo對象的屬性值,mybatis通過OGNL獲取對象的屬性值--><insertid="insertUser"parameterType="cn.itcast.mybatis.po.User"><!--將插入數(shù)據(jù)的主鍵返回,返回到user對象中SELECTLAST_INSERT_ID():得到剛insert進(jìn)去記錄的主鍵值,只適用與自增主鍵keyProperty:將查詢到主鍵值設(shè)置到parameterType指定的對象的哪個屬性order:SELECTLAST_INSERT_ID()執(zhí)行順序,相對于insert語句來說它的執(zhí)行順序resultType:指定SELECTLAST_INSERT_ID()的結(jié)果類型--><selectKeykeyProperty="id"order="AFTER"resultType="java.lang.Integer">SELECTLAST_INSERT_ID()</selectKey>insertintouser(username,birthday,sex,address)value(#{username},#{birthday},#{sex},#{address})<!--使用mysql的uuid()生成主鍵執(zhí)行過程:首先通過uuid()得到主鍵,將主鍵設(shè)置到user對象的id屬性中其次在insert執(zhí)行時,從user對象中取出id屬性值--><!--<selectKeykeyProperty="id"order="BEFORE"resultType="java.lang.String">SELECTuuid()</selectKey>insertintouser(id,username,birthday,sex,address)value(#{id},#{username},#{birthday},#{sex},#{address})--></insert><!--刪除用戶根據(jù)id刪除用戶,需要輸入id值--><deleteid="deleteUser"parameterType="java.lang.Integer">deletefromuserwhereid=#{id}</delete><!--根據(jù)id更新用戶分析:需要傳入用戶的id需要傳入用戶的更新信息parameterType指定user對象,包括id和更新信息,注意:id必須存在#{id}:從輸入user對象中獲取id屬性值-->〈updateid="updateUser"parameterType="cn.itcast.mybatis.po.User">updateusersetusername=#{username},birthday=#{birthday},sex=#{sex},address=#{address}whereid=#{id}</update></mapper>[代碼]User.javapackagecn.itcast.mybatis.po;importjava.util.Date;/****?author:小南風(fēng)2016年3月25日**/publicclassUser{〃屬性名和數(shù)據(jù)庫表的字段對應(yīng)privateintid;privateStringusername;//用戶姓名privateStringsex;//性別privateDatebirthday;//生日privateStringaddress;//地址publicintgetId(){returnid;}publicvoidsetId(intid){this.id=id;}publicStringgetUsername(){returnusername;}publicvoidsetUsername(Stringusername){this.username=username;}publicStringgetSex(){returnsex;}publicvoidsetSex(Stringsex){this.sex=sex;}publicDategetBirthday(){returnbirthday;}publicvoidsetBirthday(Datebirthday){this.birthday=birthday;}publicStringgetAddress(){returnaddress;}publicvoidsetAddress(Stringaddress){this.address=address;}?OverridepublicStringtoString(){return"User[id="+id+",username="+username+",sex="+sex+”,birthday="+birthday+",address="+address+"]";}}[代碼]sqlMapConfig.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-////DTDConfig3.0//EN""/dtd/mybatis-3-config.dtd”〉<configuration><!--加載屬性文件--〉<propertiesresource="perties"><!—<propertyname="jdbc.driver"value=""/>—></properties><typeAliases><!--針對單個別名定義type:類型的路徑alias:別名--><!—<typeAliastype="cn.itcast.mybatis.po.User"alias="user"/>—><!--批量別名定義指定包名,mybatis自動掃描包中的po類,自動定義別名,別名就是類名(首字母大寫或小寫都可以)--><packagename="cn.itcast.mybatis.po"/></typeAliases><!--和spring整合后environments配置將廢除--><environmentsdefault="development"><environmentid="development"><!--使用jdbc事務(wù)管理,事務(wù)控制由mybatis--><transactionManagertype="JDBC"/><!--數(shù)據(jù)庫連接池,由mybatis管理--><dataSourcetype="POOLED"><propertyname="driver"value="${jdbc.driver}"/><propertyname=""value="${jdbc.}"/>〈propertyname="username"value="${jdbc.username}"/>〈propertyname="password"value="${jdbc.password}"/></dataSource></environment></environments><!--加載映射文件--><mappers><mapperresource="cn/itcast/mybatis/mapperxml/UserMapper.xml"/></mappers></configuration>[代碼]perties,pertiesjdbc.driver=com.mysql.jdbc.Driverjdbc.=jdbc\:mysql\://localhost\:3306/mybatis?useUnicode\=true&characterEncoding\=UTF-8jdbc.username=rootjdbc.password=123456perties#GloballoggingconfigurationW\u5728\u5F00\u53D1\u7684\u73AF\u5883\u65E5\u5FD7\u7EA7\u522B\u4E0B,\u8981\u8BBE\u7F6E\u6210DEBUG!,\u751F\u4EA7\u73AF\u5883,\u8BBE\u7F6E\u80FDifno\u6216error,log4j.rootLogger=DEBUG,stdout#Consoleoutput...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p[%t]-%m%n[代碼]mainpackagecn.itcast.mybatis.mapper;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.List;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.junit.Before;importorg.junit.Test;importcn.itcast.mybatis.po.User;importcn.itcast.mybatis.po.UserCustom;importcn.itcast.mybatis.po.UserQueryVo;publicclassUserMapperTest{privateSqlSessionFactorysqlSessionFactory;//此方法是在執(zhí)行testFindUserById之前執(zhí)行?BeforepublicvoidsetUp()throwsException{//創(chuàng)建sqlSessionFactory//mybatis配置文件//Stringresource="SqlMapConfig.xml”;//得到配置文件流InputStreaminputStream=Resources.getResourceAsStream(〃mybatis/SqlMapConfig.xml〃);//創(chuàng)建會話工廠,傳入mybatis的配置文件信息sqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);}〃用戶信息的綜合查詢?TestpublicvoidtestFindUserList()throwsException{SqlSessionsqlSession=sqlSessionFactory.openSession();//創(chuàng)建UserMapper對象,mybatis自動生成mapper代理對象UserMapperuserMapper=sqlSession.getMapper(UserMapper.class);//創(chuàng)建包裝對象,設(shè)置查詢條件UserQueryVouserQueryVo=newUserQueryVo();UserCustomuserCustom=newUserCustom();〃由于這里使用動態(tài)sql,如果不設(shè)置某個值,條件不會拼接在sql中// userCustom.setSex('T');userCustom.setUsername(〃小、明");//傳入多個idList<Integer>ids=newArrayList<Integer>();ids.add(l);ids.add(10);ids.add(16);//將ids通過userQueryVo傳入statement中userQueryVo.setlds(ids);userQueryVo.setUserCustom(userCustom);//調(diào)用userMapper的方法List<UserCustom>list=userMapper.findUserList(userQueryVo);System.out.println(list);}@TestpublicvoidtestFindUserCount()throwsException{SqlSessionsqlSession=sqlSessionFactory.openSession();//創(chuàng)建UserMapper對象,mybatis自動生成mapper代理對象UserMapperuserMa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論