描述政府網(wǎng)站網(wǎng)站建設(shè)簡(jiǎn)單制作html靜態(tài)網(wǎng)頁(yè)
本文目錄
- 前言
- 一、創(chuàng)建XML映射文件
- 二、MybatisX插件安裝
- 三、mapper標(biāo)簽
- 四、select標(biāo)簽
- UserMapper接口方法
- UserMapper.xml
- 五、resultMap標(biāo)簽
- 定義resultMap標(biāo)簽
- 修改select標(biāo)簽
- 總結(jié)
前言
MyBatis的強(qiáng)大在于它的語(yǔ)句映射,它提供了注解和XML映射文件兩種開(kāi)發(fā)方式,都是為了減少我們的使用成本,屏蔽JDBC代碼細(xì)節(jié),節(jié)省代碼,從而讓我們更專(zhuān)注于SQL代碼!
通過(guò) 《上文》,我們學(xué)會(huì)了常用12種注解開(kāi)發(fā),本文主要講解XML映射文件方式開(kāi)發(fā),輕松學(xué)會(huì)創(chuàng)建XML映射文件和常用的select標(biāo)簽和resultMap標(biāo)簽的用法。
一、創(chuàng)建XML映射文件
XML映射文件的目錄位置通常推薦
創(chuàng)建在resources
下,例如實(shí)戰(zhàn)案例創(chuàng)建如下:
在tg-book-dal
的resources下創(chuàng)建與UserMapper.java
對(duì)應(yīng)的Xml映射文件UserMapper.xml
,如下圖:
要求:路徑相同,名稱(chēng)相同。
不同行不行?可以通過(guò)
mybatis.mapper-locations
配置!建議保持默認(rèn)相同!
UserMapper.xml
的內(nèi)容定義如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.tg.book.dal.mapper.UserMapper"></mapper>
二、MybatisX插件安裝
這里推薦安裝使用MybatisX插件,非常方便在接口與XML映射文件之間來(lái)回跳轉(zhuǎn)
!以及可以生成標(biāo)簽
!
IDEA的File-》Settings-》Plugins
搜索MybatisX安裝即可!
三、mapper標(biāo)簽
mapper標(biāo)簽
,它是最頂級(jí)的標(biāo)簽,也就是XML根標(biāo)簽,通過(guò)namespace
屬性指定對(duì)應(yīng)的接口
,比如這里指定的是:org.tg.book.dal.mapper.UserMapper,這樣接口和XML映射文件就產(chǎn)生了關(guān)聯(lián),接口通過(guò)JDK動(dòng)態(tài)代理生成實(shí)現(xiàn)類(lèi)時(shí),就會(huì)讀取XML映射文件的對(duì)應(yīng)配置!
如何配置呢?常用的XML標(biāo)簽有:
- select標(biāo)簽(對(duì)應(yīng)寫(xiě)查詢(xún)SQL語(yǔ)句)
- resultMap標(biāo)簽(結(jié)果映射,上文曾介紹過(guò))
- insert標(biāo)簽(對(duì)應(yīng)寫(xiě)插入INSERT語(yǔ)句)
- update標(biāo)簽(對(duì)應(yīng)寫(xiě)修改UPDATE語(yǔ)句)
- delete標(biāo)簽(對(duì)應(yīng)寫(xiě)刪除DELETE語(yǔ)句)
- sql標(biāo)簽(對(duì)應(yīng)寫(xiě)SQL語(yǔ)句,這個(gè)SQL語(yǔ)句可被其他語(yǔ)句引用的
可重用
的語(yǔ)句塊)
四、select標(biāo)簽
我們先刪除上文的注解方式,換成XML映射文件的方式來(lái)實(shí)現(xiàn)!
UserMapper接口方法
@Param
指定參數(shù)名
public interface UserMapper {User selectByUserNamePassword(@Param("userName") String userName,@Param("password") String password);
}
這時(shí)MybatisX插件會(huì)提示一個(gè)錯(cuò)誤,把鼠標(biāo)懸浮在方法上,會(huì)提示selectByUserNamePassword方法在xml中沒(méi)有定義
,我們點(diǎn)擊Generate statement
UserMapper.xml
這時(shí),在UserMapper.xml中會(huì)生成一個(gè)select標(biāo)簽
,使用id屬性
指定對(duì)應(yīng)的接口方法名,使用resultType屬性
指定返回類(lèi)型,如下圖:
這里依然有一個(gè)警告:XML tag has empty body
,是因?yàn)槲覀儧](méi)有寫(xiě)對(duì)應(yīng)的查詢(xún)select語(yǔ)句SQL,我們?cè)?code>select標(biāo)簽中補(bǔ)充SQL語(yǔ)句如下:
select * from user where user_name =#{userName} and password =#{password}
SQL中的參數(shù)使用#{}
作為占位符
實(shí)際的效果與上文使用的
@Select注解
相同!
五、resultMap標(biāo)簽
同樣的,運(yùn)行后你會(huì)發(fā)現(xiàn)【User對(duì)象】的userId
并沒(méi)有取到值,原因是【user表】的字段名叫id
,而不是userId
,名稱(chēng)不同所以無(wú)法獲取到對(duì)應(yīng)的值,我們通過(guò)resultMap
標(biāo)簽方式解決。
定義resultMap標(biāo)簽
<resultMap id="UserMap" type="org.tg.book.dal.po.User"><id column="id" jdbcType="INTEGER" property="userId"/><result column="user_name" jdbcType="VARCHAR" property="userName"/><result column="password" jdbcType="VARCHAR" property="password"/>
</resultMap>
resultMap標(biāo)簽說(shuō)明:
- 通過(guò)
id屬性
定義唯一標(biāo)識(shí),type
屬性定義結(jié)果類(lèi)型 - 通過(guò)
id標(biāo)簽
指定主鍵列,result
標(biāo)簽指定非主鍵列property
指定對(duì)象的屬性名column
指定數(shù)據(jù)表的列名jdbcType
指定數(shù)據(jù)表的字段類(lèi)型
修改select標(biāo)簽
使用resultMap
屬性代替了resultType
屬性,resultMap屬性?xún)?nèi)指定剛定義的resultMap id名稱(chēng)。
實(shí)際的效果與上文使用的
@Results和@Result注解
相同!
OK,到這,我們就使用XML映射文件方式,完整實(shí)現(xiàn)了接口方法selectByUserNamePassword!
總結(jié)
寫(xiě)一個(gè)數(shù)據(jù)庫(kù)查詢(xún)方法,簡(jiǎn)單來(lái)說(shuō),步驟如下:
- 創(chuàng)建接口對(duì)應(yīng)的xml映射文件
- 創(chuàng)建查詢(xún)方法對(duì)應(yīng)的select標(biāo)簽
- 寫(xiě)查詢(xún)selec語(yǔ)句SQL
- 【可選】如果【數(shù)據(jù)庫(kù)字段】與【PO對(duì)象屬性】不一致,需要增加結(jié)果映射resultMap標(biāo)簽,然后在select標(biāo)簽使用resultMap屬性指定resultMap標(biāo)簽