覆蓋常見的使用場(chǎng)景显歧,基本的增刪改查忽你,分頁幼东。這里只是常見的使用,冷門使用的可以查看官方文檔科雳。
技術(shù)點(diǎn):
* 基本增刪改查
* 動(dòng)態(tài)拼接條件查詢根蟹,傳遞參數(shù)
* 分頁
* 調(diào)用存儲(chǔ)過程
* 提交事務(wù)
* 批量刪除,添加
* sql日志打印
* 接口式編程
* 攔截器分頁
* 枚舉類型
整體流程:
* 主配置文件
* 關(guān)系映射文件
* 代碼調(diào)用
基礎(chǔ)
1糟秘、傳遞參數(shù)
傳遞業(yè)務(wù)參數(shù)給sql語句简逮,可用于動(dòng)態(tài)拼接sql語句。在xml中的select標(biāo)簽中尿赚,參數(shù)節(jié)點(diǎn)只有一個(gè)散庶。單個(gè)參數(shù)好說,比如按照id查詢凌净;但如果想傳遞多個(gè)參數(shù)就要使用類型封裝悲龟,或者使用集合。
下面按照1個(gè)參數(shù)和多個(gè)參數(shù)加以討論冰寻。
1.1 一個(gè)參數(shù)须教,也就是一個(gè)基本類型或者String
如果只傳遞一個(gè)參數(shù),則在parameterType 節(jié)點(diǎn)中聲明數(shù)據(jù)類型(為Java類型)斩芭,然后在sql語句的占位符中可以寫成
id= #{_parameter}
或者隨便寫點(diǎn)啥轻腺,一般寫成列名稱 例如:
id= #{id}
示例代碼片段:
<!--帶有查詢一個(gè)查詢參數(shù)的查詢乐疆,按照id查詢-->
<select id="selectOnePerson" parameterType="int" resultMap="PersonResult">
SELECT ID,NAME,SEX,ADDRESS FROM message WHERE ID = #{id}
</select>
1.2 多個(gè)參數(shù)
如果需要傳遞多個(gè)參數(shù)的話,我們使用一個(gè)類封裝或者使用集合约计。
1.2.1 使用封裝類诀拭,如果使用封裝類,則在parameterType節(jié)點(diǎn)聲明封裝類型的完整限定名(包名.類名)煤蚌,例如
com.xiaozhao.bean.Person
然后在sql語句的占位符中直接使用封裝類中的屬性名耕挨,假設(shè)上訴Person類中有一個(gè)name屬性,例如
NAME = #{name}
示例代碼片段:
<!--帶有多個(gè)參數(shù)的查詢尉桩,且根據(jù)參數(shù)是否有效動(dòng)態(tài)拼接sql-->
<select id="queryPersonList" parameterType="com.xiaozhao.bean.Person" resultMap="PersonResult">
SELECT ID,NAME,SEX,ADDRESS FROM message WHERE 1=1
<if test="name!=null and !"".equals(name.trim())">
and NAME = #{name}
</if>
</select>
1.2.2 使用集合(數(shù)組筒占,List,Map)
如果使用集合則稍有不同蜘犁,但是整體流程差不多翰苫。
打印日志
直接在resources文件夾下新建一個(gè)log4j.properties文件
內(nèi)容設(shè)置如下:
#日志輸出級(jí)別,從低到高依次為:DEBUG < INFO < WARN < ERROR
#在log4j.rootLogger配置的級(jí)別这橙,只有大于等于此配置的才會(huì)顯示
#輸出到控制臺(tái)奏窑,其中"Console"名稱可以為其他,但是下面三行必須相同屈扎。例如 寫成 A埃唯,那么下面三行為:
#log4j.appender.A=org.apache.log4j.ConsoleAppender
#log4j.appender.A.layout=org.apache.log4j.PatternLayout
#log4j.appender.A.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.rootLogger=DEBUG,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
#格式化說明------ %d:時(shí)間;%t:線程名稱鹰晨;%c:類名墨叛;%p:級(jí)別;%m:附加信息模蜡;%n:換行
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
#個(gè)性化配置漠趁,這個(gè)包下面的輸出不會(huì)顯示
log4j.logger.org.apache=INFO
常見標(biāo)簽
1、where,set,trim標(biāo)簽
可以用于sql條件的動(dòng)態(tài)拼接忍疾,不需要再寫 where 1=1
where 和 set是trim的2個(gè)快捷方法闯传,可以根據(jù)規(guī)則動(dòng)態(tài)拼接。
where 和set 本質(zhì)也是trim.
2.sql標(biāo)簽
類似于常量定義膝昆,宏替換
高級(jí)使用
常見問題
1丸边、#{} 和 ${} 的區(qū)別?
首先 #{}是預(yù)編譯荚孵,加快執(zhí)行速度還防止sql注入妹窖。而${}會(huì)直接拼接成字符串,一般用于order by 字段
2收叶、resultMap 和 resultType的區(qū)別骄呼?