上節(jié)課我們快速的整合了spring和mybatis,基于這些知識(shí)點(diǎn)我們進(jìn)行套路的訓(xùn)練
這節(jié)課我們學(xué)下動(dòng)態(tài)SQL創(chuàng)建和基本的增刪改查
上幾節(jié)課我們做了用戶的Controller(UsersController)我們上節(jié)課創(chuàng)建了個(gè)接口泰涂,里面寫(xiě)入了@Select注解(目前我們講的都是以注解的方式)后面我們會(huì)使用xml的方式鲫竞,這節(jié)課還是以注解的方式利用sql語(yǔ)句結(jié)合相關(guān)類來(lái)完成里面的功能
下面我們模擬下下面這些功能(做下面的小案例)
首先我們要實(shí)現(xiàn)訪問(wèn)GET/users 如果是這樣的路徑 則獲取用戶全部列表信息
GET/users/123 獲取用戶詳細(xì)信息 POST/users新增用戶 DELETE/users刪除用戶 PUT/users修改用戶
我們還是結(jié)合users_reg這張表做演示
首先我們把UserInfo實(shí)體類中私有屬性加入useremail字段 使其和數(shù)據(jù)庫(kù)表中的字段一致
下面我們就使用spring結(jié)合mybatis實(shí)現(xiàn)一個(gè)簡(jiǎn)單的用戶api
下面我們寫(xiě)下代碼
首先看下上節(jié)課的內(nèi)容
上節(jié)課我們?cè)赨serMapper接口中寫(xiě)了獲取用戶詳細(xì)信息的接口(根據(jù)用戶id)
這節(jié)課我們接著寫(xiě) 首先我們寫(xiě)獲取用戶全部列表接口
代碼如下
以上代碼為基本的增刪改查代碼
上面的代碼會(huì)有個(gè)問(wèn)題 如果我們想要執(zhí)行新增操作 可能要返回新增用戶id(在mysql中為自增id)這里我們會(huì)用到mybatis中的一個(gè)特性 叫selectkey
下面是selectkey的簡(jiǎn)單寫(xiě)法
其中幾個(gè)參數(shù)說(shuō)明如下
statement表示如果完成新增操作后,我們的自增id是如何寫(xiě)出來(lái)的(這里面是使用mysql的自增id)
keyProperty表示一旦取出來(lái)后 這個(gè)值(自增id值)放在對(duì)應(yīng)UserInfo的哪一個(gè)字段里面進(jìn)行映射
before:false表示@Selectkey這句話是在Insert語(yǔ)句執(zhí)行之前還是之后產(chǎn)生的(mysql是之后)
resultType代表@SelectKey返回值的類型
這部分在官方文檔的這部分有說(shuō)明http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html
只不過(guò)文檔中是以xml方式來(lái)配置(后面我們?cè)趯W(xué))
下面我們看下@SelectKey如何做以及如何映射
官方示例代碼如下(官方文檔搜索SelectKey)是以xml方式的示例
我們課程中暫時(shí)使用注解的方式返回新增用戶的id
在UserMapper中加入如下
接下來(lái)我們把剛才講的rest形式案例給實(shí)現(xiàn)了
在我們UsesController中寫(xiě)了最簡(jiǎn)單的getUserDetail(通過(guò)用戶id獲取用戶詳細(xì)信息)
下面我們?cè)诶锩嫣砑有碌姆椒?br> 因?yàn)槲覀儼咐杏性鰟h改查四個(gè)方法 所以我們要在spring配置文件中加入(GET,PUT,Delete逼蒙,Insert跨域請(qǐng)求方式)
添加如下
否則前端調(diào)用時(shí)可能存在問(wèn)題
下面我們回到UsersController中繼續(xù)寫(xiě)代碼
如下
寫(xiě)好代碼后我們編譯下代碼
使用火狐的插件測(cè)試下接口
get方式使用瀏覽器就可以測(cè)試
如下
訪問(wèn)localhost:8080/users
取出用戶所有列表
訪問(wèn)localhost:8080/users/3
返回用戶詳細(xì)信息
接下來(lái)測(cè)試下post put 和delete方式
新增用戶
header我們?cè)O(shè)置成application/json的格式
結(jié)果如下
再看下我們數(shù)據(jù)庫(kù)user_reg表
新增用戶成功
接下來(lái)測(cè)試修改用戶(PUT)就測(cè)試剛剛新增的userid為8的用戶
點(diǎn)擊send
結(jié)果如下
將user_name修改為zhad_new
看下數(shù)據(jù)庫(kù)表中結(jié)果
可以看見(jiàn)userid為8的用戶名變?yōu)閦had_new了
下面測(cè)試下刪除用戶操作
刪除用戶id為4的用戶
點(diǎn)擊send結(jié)果如下
數(shù)據(jù)庫(kù)表中如下
可以看見(jiàn)userid為4的用于刪除了
以上就是最簡(jiǎn)單的用戶rest api和mybatis增刪改查來(lái)完成一個(gè)rest api的形式
下面我們學(xué)下動(dòng)態(tài)SQL
官方地址如下
http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html
官方給我們的示例是以xml方式演示的 我們這節(jié)課依然使用注解的方式來(lái)實(shí)現(xiàn)
官方示例如下
可以看出動(dòng)態(tài)SQL就是在我們sql語(yǔ)句上加入if choose等條件語(yǔ)句
上面我們實(shí)現(xiàn)了查詢用戶所有列表的api
在UserMapper接口中打上了@Select注解 寫(xiě)入了sql語(yǔ)句
下面我們模擬一下以下需求(拼湊動(dòng)態(tài)SQL是很重要的)
比如我們之前訪問(wèn)localhost:8080/users 是訪問(wèn)用戶所有列表
有時(shí)候我們只要獲取用戶id在某范圍內(nèi)的(比如下面這個(gè)需求)
接下來(lái)我們寫(xiě)下代碼
有兩種寫(xiě)法
1从绘、字符串拼接方式(也就是跟官方很類似的寫(xiě)法 foreach寫(xiě)法)
官方示例如下
支持我們?cè)趨?shù)中傳入list 然后每一行就是item進(jìn)行循環(huán) index就是每次迭代的次數(shù)
首先我們?cè)赨serMapper中修改返回用戶列表接口
sql拼接時(shí)回行的話需要注解下一行前面要有空格 否則sql語(yǔ)句會(huì)報(bào)錯(cuò)
上面意思為循環(huán)傳入?yún)?shù)ids集合中的每一項(xiàng)
接下來(lái)在UsersController中修改如下
編譯發(fā)布下代碼
瀏覽器訪問(wèn)localhost:8080/users
結(jié)果如下
返回了用戶id為5和6的列表了
而我們數(shù)據(jù)庫(kù)表中數(shù)據(jù)如下
可以看出查詢出用戶id在某一范圍內(nèi)的用戶列表了
現(xiàn)在我們的參數(shù)是寫(xiě)死的 也就是說(shuō)我們必定會(huì)有一個(gè)list傳入 然后進(jìn)行sql語(yǔ)句的拼接
如果傳入是null或者空數(shù)組 那么這個(gè)sql語(yǔ)句就會(huì)報(bào)錯(cuò)
接下來(lái)我們?cè)赨sersController中在改下代碼
然后我們?cè)诨氐経serMapper接口中
其實(shí)上面在@Select注解中傳入的是一個(gè)String數(shù)組
所以還可以寫(xiě)成下面的格式 每行以逗號(hào)的形式 傳入數(shù)組 就不需要寫(xiě)很多加號(hào)進(jìn)行拼接
如下
因?yàn)槲覀円獙?duì)傳入?yún)?shù)做限制
所以還要改下sql語(yǔ)句
需要加入if語(yǔ)句
示例如下
我們代碼如下
接下來(lái)編譯下代碼
瀏覽器訪問(wèn)localhost:8080/users結(jié)果如下
沒(méi)傳參數(shù) 返回全部列表
傳入?yún)?shù)5,6返回如下
傳入?yún)?shù)3
以上就是我們學(xué)的動(dòng)態(tài)SQL配合我們的注解方式來(lái)搞定 下節(jié)課我們會(huì)使用xml配置文件方式來(lái)完成