JavaWeb學習之路——SSM框架之Mybatis(三)
前提:JavaWeb學習之路——SSM框架之Mybatis(二)
1.目錄結構
2.目錄解釋:
src下:
pojo包:寫java檔案
serverlet包:寫serverlet檔案
service包:寫介面和它的實現類
mapper包:用來配置資料庫檔案
WebContent:專案的根目錄,放置jsp檔案和資原始檔包
3.路徑解釋
絕對路徑:路徑中以/開頭的都叫做全路徑,從根目錄(WebContent)出發找到其他資源的過程
相對路徑:不以/開頭都是相對路徑,相對路徑是從當前資源出發找到其他資源的路徑
請求轉發/表示WebContent目錄,重定向<a herf="">、src下/表示tomcat的webapps資料夾根目錄
4.log4j
(1)介紹
一個apache推出的開源免費日誌處理的類庫。
在專案中編寫System.out.println();輸出到控制檯,專案釋出到tomacat後,沒有控制檯,不容易觀察輸出結果。
log4j作用,不僅能把內容輸出到控制檯,還能輸出到檔案
使用方法:
匯入log4j-xxx.jar;
在src下新建log4j.properties(不能改變路徑和名稱);
(2)配置檔案
log4j輸出級別:五個級別——fatal(致命錯誤)>error(錯誤)>warn(警告)>info(普通訊息)>debug(除錯資訊)
在log4j第一行中控制輸出級別、輸出目的地,寫誰往哪裡輸出,先下面為往控制檯和檔案輸出普通訊息
%C為輸出類資訊,
log4j.rootCategory=INFO, CONSOLE,LOGFILE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%C %d{YYYY-MM-DD hh:mm:ss} %p %m %n
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%C %m %L %n
輸出結果:
INFO級別:
DEBUG級別:
(3)控制檯顯示輸出
在mybatis全域性配置檔案中通過<settings>標籤來控制mybatis全域性開關
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
前提:src下有配置檔案log4j.properties,lib下有log4j.jar
可以控制輸出內容級別,將mapper.xml中a.b.c的內容設定為DEBUG類別
包級別,<mapper > namespace屬性中最後的類名
log4j.logeer.a.b.c=DEBUG
5.mybatis引數傳遞
(1).parameterType屬性:在xxxMapper.xml中設定相應的引數型別、sql語句中寫引數位置,
用parameterType表示引數,#{0}表示獲取引數內容,裡面從0開始,也可以使用#{param1}表示第一個引數,只有一個引數
則對#{}內容沒有要求
<select id="selById" resultType="com.likui.pojo.Flower" parameterType="int">
select * from flower where id=#{0}
</select>
(2).SqlSession的selectList()和selectOne()的第二個引數和selectMap()的第三個引數都表示方法的引數
傳遞引數來返回對應結果:
Flower flower=session.selectOne("a.b.selById",2);
System.out.println(flower.getId()+"\t\t"+flower.getName()+"\t\t"+
flower.getPrice()+"\t\t"+flower.getProduction());
控制檯輸出DEBUG:
(3).#{}和${}區別
#{}java中使用的是引數內容,支援索引、param1獲取指定位置,並且SQL語句中使用?佔位符處理
${} java檔案中使用的字串拼接,不適用?佔位符,預設找${}中的內容的get/set方法,如果使用的是數字,則不表示位置
比較常用的是#{}
<select id="selById" resultType="com.likui.pojo.Flower" parameterType="com.likui.pojo.Flower">
select * from flower where id=${id}
</select>
Flower flower2=new Flower();
flower2.setId(1);
Flower flower=session.selectOne("a.b.selById",flower2);
(4).傳遞多個引數型別
使用Map集合或者物件來傳遞:
xml檔案中配置引數
map中#{}中寫map對應的key值
<select id="c" resultType="com.likui.pojo.Flower" parameterType="map">
select * from flower where id=#{id} and name=#{name}
</select>
java檔案中傳遞引數:
Flower flower2=new Flower();
flower2.setId(1);
flower2.setName("牡丹");
Map<String, Object> map=new HashMap<>();
map.put("id", flower2.getId());
map.put("name", flower2.getName());
Flower flower=session.selectOne("a.b.c",map);
6.別名-typeAliases
在mybatis.xml資料庫配置檔案中寫上別名:
<typeAliases>
<typeAlias type="com.likui.pojo.Flower" alias="flo"/>
</typeAliases>
然後在mapper.xml資料庫語句中可以用上類的別名來代替相應類
<select id="c" resultType="flo" parameterType="map">
select * from flower where id=#{id} and name=#{name}
</select>