定律是在软件工程中罕见的代码教程剖析_第1页
定律是在软件工程中罕见的代码教程剖析_第2页
定律是在软件工程中罕见的代码教程剖析_第3页
定律是在软件工程中罕见的代码教程剖析_第4页
定律是在软件工程中罕见的代码教程剖析_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

永恒定律是在软件工程中罕见的,而当一名工程师宣称已经找到了一个,即工程师通常持怀疑态度重视[代码]UserMapper.javapackagecn.itcast.mybatis.mapper;importjava.util.List;importcn.itcast.mybatis.po.User;importcn.itcast.mybatis.po.UserCustom;importcn.itcast.mybatis.po.UserQueryVo;一般原则是更受欢迎。在这篇代码,我传达现代软件工程的一些松散的理念。这些都是弱持有强烈的意见。我欢迎辩论和讨论。一个小丑/****©author:小南风2016年3月25日**/publicinterfaceUserMapper{〃用户信息综合查询publicList<UserCustom>findUserList(UserQueryVouserQueryVo);〃用户信息综合查询总数publicintfindUserCount(UserQueryVouserQueryVo);〃根据id查询用户信息publicUserfindUserById(intid);//根据id查询用户信息,使用resultMap输出publicUserfindUserByIdResultMap(intid);//根据用户名列查询用户列表publicList<User>findUserByName(Stringname);//插入用户publicvoidinsertUser(Useruser);〃删除用户publicvoiddeleteUser(intid);[代码][GoogleGo]代码packagemainimport("io/ioutil”"net/http”"net/"〃fmt〃"encoding/json")// //黄金数据调用示例代码一聚合数据//在线接口文档:www/docs/29// constAPPKEY="*******************"//您申请的APPKEYfuncmain(){//1.上海黄金交易所Request1()//2.上海期货交易所Request2()//3.银行账户黄金Request3()}//1.上海黄金交易所funcRequest1(){//请求地址juhe:="web:8080/finance/gold/shgold”//初始化参数param:=.Values{}翻译的不错哦!你没必要去证明你自己。软件是一个新的领域,没有人知道要去如何做。如果有人说你是不合格的,因此你必须去做一些维护的工作,你应该质疑那个人。我们有一个倒置的体系,那些收入最少的人做最糟糕的工作。他们往往是年轻和幼稚的。//配置请求参数,方法内部已处理encode问题,中文参数可以直接传参param.Set("key”,APPKEY)//APPKeyparam.Set("v”,"")//JSON格式版本(0或1)默认为0〃发送请求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万美的工作,做软件维护的工作,为公司创造了一百万的效益,然后憎恨你的生活。//初始化参数param:=.Values{}//配置请求参数,方法内部已处理encode问题,中文参数可以直接传参param.Set("key”,APPKEY)//APPKeyparam.Set("v”,"")//JSON格式版本(0或1)默认为0〃发送请求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"])}}}在你花费了足够的时间在上之后,我们会让你成为SDE2,你可以做稍微高级别的工作,年薪15万美元,这将为公司创造五百万的效益。这就是套利。终日乾乾//3.银行账户黄金funcRequest3(){//请求地址juhe:="web:8080/finance/gold/bankgold”//初始化参数param:=.Values{}//配置请求参数,方法内部已处理encode问题,中文参数可以直接传参param.Set("key”,APPKEY)//APPKey〃发送请求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网络请求funcGet(apistring,params.Values)(rs[]byte,errerror){var*.,err=.Parse(api)iferr!=nil{fmt.Printf("解析错误:\r\n%v”,err)returnnil,err}〃如果参数中有中文参数,这个方法会进行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网络请求,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的黄金数据接口调用代码实例关联数据:黄金数据[代码][C#]代码usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Net;usingSystem.IO;usingXfrog.Net;usingSystem.Diagnostics;usingSystem.Web;// //黄金数据调用示例代码一聚合数据//在线接口文档: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)默认为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)默认为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">^求参数</param>///<paramname="method">^求方法</param>///<returns>响应内容</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{//创建请求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"));〃返回内容stringretString=myStreamReader.ReadToEnd();returnretString;///<summary>///组装普通文本请求参数。///</summary>///<paramname="parameters">Key-Value形式请求参数字典</param>///<returns>编码后的请求数据</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;〃忽略参数名或参数值为空的参数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>///把响应流转换为文本。///</summary>///<paramname="rsp">^应流对象</param>///<paramname="encoding">^码方式</param>///<returns>响应文本</returns>staticstringGetResponseAsString(HttpWebResponsersp,Encodingencoding){System.IO.Streamstream=null;StreamReaderreader=null;try{//以字符流的方式读取HTTP响应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远程传输工具*/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);//设置超时时间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);}〃设置上传文件相关c_setopt($ch,COPT_FOLLOWLOCATION,true);c_setopt($ch,COPT_MAXREDIRS,3);//递归c_setopt($ch,COPT_SSL_VERIFYPEER,false);//对认证证书来源的检查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;}//上传文件相关设置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);//关闭c资源,并且释放系统资源$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>/*建立通讯区域*/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服务器*//***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>导入这个包,会引入下面两个jar<!—spring的基本jar包一><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency><!--commons-login是必须的,而且没有依赖,是独立的包--><dependency><groupId>commons-logging</groupId><artifactId>commons-logging-api</artifactId><version>1.1</version></dependency><dependency><!—transactionManager实务管理的时候,需要这个jar包一><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId></dependency><dependency><!—当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>[代码]获取的参数〃获取的参数functiongetParam(paramKey){〃获取当前var=location.href;//获取要取得的get参数位置varget=.indexOf(paramKey+"=");if(get==-1){returnfalse;}//截取字符串vargetParamStr=.slice(paramKey.length+get+1);//判断截取后的字符串是否还有其他get参数varnextparam=getParamStr.indexOf("&");if(nextparam!=-1){getParamStr=getParamStr.slice(0,nextparam);}returndecodeURIComponent(getParamStr);}[代码]添加参数//添加参数functionaddParam(,paramKey,paramVal){varandStr="?";varbeforeparam=.indexOf("?”);if(beforeparam!=-1){andStr="&”;}return+andStr+paramKey+"="+encodeURIComponent(paramVal);}[代码]删除参数〃删除参数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攻击代码//////传入用户提交数据///true-安全;false-有注入攻击现有;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注入式攻击,在页面装置时候运行///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转换sql代码(也防止sql注入式攻击,可以用于业务逻辑层,但要求UI层输入数据时候进行解码)//////提取字符固定长度////////////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;}//////将已经替换成的〃[敏感字]〃,转换回来为〃敏感字〃/////////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进行分类化管理,理解sql隔离注意:使用mapper代理方法开发,namespace有特殊重要的作用,namespace等于mapper接口地址--><mappernamespace="cn.itcast.mybatis.mapper.UserMapper"><!--定义sql片段id:sql片段的唯一标识经验:是基于单表来定义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:结束遍历时拼接的串separator:遍历的两个对象中需要拼接的串--><!--使用实现下边的sql拼接:AND(id=1ORid=10ORid=16)--><foreachcollection="ids"item="user_id"open="AND("close=")"separator="or"><!--每个遍历需要拼接的串-->id=#{user_id}</foreach><!--实现“andidIN(1,10,16)”拼接--><!--<foreachcollection="ids"item="user_id"open="andidIN(close=")"separator=”,">每个遍历需要拼接的串#{user_id}</foreach>--></if></if></sql><!--定义resultMap将SELECTidid_,usernameusername_FROMUSER和User类中的属性作一个映射关系type:resultMap最终映射的java对象类型,可以使用别名id:对resultMap的唯一标识-->〈resultMaptype="user"id="userResultMap"><!--id表示查询结果集中唯一标识column:查询出来的列名property:type指定的pojo类型中的属性名最终resultMap对column和property作一个映射关系(对应关系)--><idcolumn="id_"property="id"/><!--result:对普通名映射定义column:查询出来的列名property:type指定的pojo类型中的属性名最终resultMap对column和property作一个映射关系(对应关系)--><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><!--用户信息综合查询总数parameterType:指定输入类型和findUserList一样resultType:输出结果类型--><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执行数据库查询id:标识映射文件中的sql将sql语句封装到mappedStatement对象中,所以将id称为statement的idparameterType:指定输入参数的类型,这里指定int型#{}表示一个占位符号#{id}:其中的id表示接收输入的参数,参数名称就是id,如果输入参数是简单类型,#{}中的参数名可以任意,可以value或其它名称resultType:指定sql输出结果的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象。--><selectid="findUserById"parameterType="int"resultType="user">SELECT*FROMUSERWHEREid=#{value}</select><!--使用resultMap进行输出映射resultMap:指定定义的resultMap的id,如果这个resultMap在其它的mapper文件,前边需要加namespace--><selectid="findUserByIdResultMap"parameterType="int"resultMap="userResultMap">SELECTidid_,usernameusername_FROMUSERWHEREid=#{value}</select><!--根据用户名称模糊查询用户信息,可能返回多条resultType:指定就是单条记录所映射的java对象类型${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中。使用${}拼接sql,引起sql注入${value}:接收输入参数的内容,如果传入类型是简单类型,${}中只能使用value--><selectid="findUserByName"parameterType="java.lang.String”resultType="cn.itcast.mybatis.po.User">SELECT*FROMUSERWHEREusernameLIKE'%${value}%'</select><!--添加用户parameterType:指定输入参数类型是pojo(包括用户信息)#{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值--><insertid="insertUser"parameterType="cn.itcast.mybatis.po.User"><!--将插入数据的主键返回,返回到user对象中SELECTLAST_INSERT_ID():得到刚insert进去记录的主键值,只适用与自增主键keyProperty:将查询到主键值设置到parameterType指定的对象的哪个属性order:SELECTLAST_INSERT_ID()执行顺序,相对于insert语句来说它的执行顺序resultType:指定SELECTLAST_INSERT_ID()的结果类型--><selectKeykeyProperty="id"order="AFTER"resultType="java.lang.Integer">SELECTLAST_INSERT_ID()</selectKey>insertintouser(username,birthday,sex,address)value(#{username},#{birthday},#{sex},#{address})<!--使用mysql的uuid()生成主键执行过程:首先通过uuid()得到主键,将主键设置到user对象的id属性中其次在insert执行时,从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><!--删除用户根据id删除用户,需要输入id值--><deleteid="deleteUser"parameterType="java.lang.Integer">deletefromuserwhereid=#{id}</delete><!--根据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:小南风2016年3月25日**/publicclassUser{〃属性名和数据库表的字段对应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事务管理,事务控制由mybatis--><transactionManagertype="JDBC"/><!--数据库连接池,由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;//此方法是在执行testFindUserById之前执行©BeforepublicvoidsetUp()throwsException{//创建sqlSessionFactory//mybatis配置文件//Stringresource="SqlMapConfig.xml”;//得到配置文件流InputStreaminputStream=Resources.getResourceAsStream(〃mybatis/SqlMapConfig.xml〃);//创建会话工厂,传入mybatis的配置文件信息sqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);}〃用户信息的综合查询©TestpublicvoidtestFindUserList()throwsException{SqlSessionsqlSession=sqlSessionFactory.openSession();//创建UserMapper对象,mybatis自动生成mapper代理对象UserMapperuserMapper=sqlSession.getMapper(UserMapper.class);//创建包装对象,设置查询条件UserQueryVouserQueryVo=newUserQueryVo();UserCustomuserCustom=newUserCustom();〃由于这里使用动态sql,如果不设置某个值,条件不会拼接在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);//调用userMapper的方法List<UserCustom>list=userMapper.findUserList(userQueryVo);System.out.println(list);}@TestpublicvoidtestFindUserCount()throwsException{SqlSessionsqlSession=sqlSessionFactory.openSession();//创建UserMapper对象,mybatis自动生成mapper代理对象UserMapperuserMa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论