真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Mybatis中輸入輸出映射與動(dòng)態(tài)Sql圖文詳解

一、輸入映射

創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、隰縣網(wǎng)絡(luò)推廣、小程序制作、隰縣網(wǎng)絡(luò)營(yíng)銷、隰縣企業(yè)策劃、隰縣品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供隰縣建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com

我們通過配置parameterType的值來指定輸入?yún)?shù)的類型,這些類型可以是簡(jiǎn)單數(shù)據(jù)類型、POJO、HashMap等數(shù)據(jù)類型

1、簡(jiǎn)單類型

Mybatis中輸入輸出映射與動(dòng)態(tài)Sql圖文詳解

2、POJO包裝類型

①這是單表查詢的時(shí)候傳入的POJO包裝類型,即可以直接傳入實(shí)體類,但是當(dāng)多表查詢的時(shí)候,就需要自定義POJO類型

Mybatis中輸入輸出映射與動(dòng)態(tài)Sql圖文詳解

②我們使用自定義POJO類型來具體的了解一下

先設(shè)計(jì) 包裝類型如下,其中UserPOJO是除了User本身之外的添加的其他跟User相關(guān)的屬性的包裝類,UserVo是用于視圖層面的包裝類型,同樣也是作為Mapper配置文件的輸入類型

Mybatis中輸入輸出映射與動(dòng)態(tài)Sql圖文詳解

其中User文件同上一篇Mybatis簡(jiǎn)單入門中的User,包括數(shù)據(jù)表部分也一樣。這里給出UserPoJO和UserVo文件

package cn.mybatis.po;

public class UserPoJo extends User{
 private User user;

 public void setUser(User user) {
 this.user = user;
 }

 public User getUser() {
 return user;
 }
}

UserPOJO
package cn.mybatis.po;

public class UserVo {
 private UserPoJo userPoJo;

 public UserPoJo getUserPoJo() {
 return userPoJo;
 }

 public void setUserPoJo(UserPoJo userPoJo) {
 this.userPoJo = userPoJo;
 }
}

UserVo

然后我們配置UserMapper.xml文件

Mybatis中輸入輸出映射與動(dòng)態(tài)Sql圖文詳解

然后在UserMapper接口文件中添加

//測(cè)試包裝類型的查詢
 public List findUserList(UserVo userVo) throws Exception;

使用Junit測(cè)試剛剛做的配置

@Test
 public void testFindUserList() throws Exception {
 SqlSession sqlSession = sqlSessionFactory.openSession();
 UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

 UserPoJo userPoJo = new UserPoJo();
 UserVo userVo = new UserVo();
 userPoJo.setSex("男");
 userPoJo.setUsername("u");
 userVo.setUserPoJo(userPoJo);

 List userPoJoList = userMapper.findUserList(userVo);

 System.out.println(userPoJoList);
 }

最后結(jié)果如下

Mybatis中輸入輸出映射與動(dòng)態(tài)Sql圖文詳解

二、輸出映射

1、resultType

①在使用resultType進(jìn)行映射的時(shí)候,只有查詢出來的列名和包裝類型中的屬性名一致的時(shí)候,才會(huì)映射成功

②當(dāng)使用簡(jiǎn)單類型作為輸出映射的時(shí)候,我們需要保證Sql查詢的結(jié)果只有一行一列,這樣就可以使用簡(jiǎn)單類型

如下所示示例

SELECT COUNT(*) FROM t_user

SELECT username FROM t_user WHERE id = 2

2、resultMap  

查詢出來的列名和包裝類型的屬性名不一致的時(shí)候,可以使用resultMap來進(jìn)行相應(yīng)的映射(具體在使用中來說就是:定義resultMap中和屬性的映射關(guān)系,然后將輸出結(jié)果設(shè)置為resultMap的類型)

下面我們使用一個(gè)例子來進(jìn)行具體的測(cè)試

①首先編寫mapper配置文件,其中需要加上resultMap的配置

<?xml version="1.0" encoding="UTF-8" ?>



 
 
 
 
 
 
 
 
 
 

 

②然后在Mapper接口中添加方法

 //測(cè)試resultMap
 public User findUserById_resultMap(int id) throws Exception;

③ 測(cè)試方法

@Test
 public void testFindUserById_resultMap() throws Exception {
 SqlSession sqlSession = sqlSessionFactory.openSession();
 UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

 User user = userMapper.findUserById_resultMap(2);

 System.out.println(user);
 }

④可以發(fā)現(xiàn),使用resultMap的方式跟直接查詢的結(jié)果是一致的

Mybatis中輸入輸出映射與動(dòng)態(tài)Sql圖文詳解

三、動(dòng)態(tài)Sql

1、if判斷

我們?cè)谏厦媸褂冒b類查詢的用例的時(shí)候,考慮到可能出現(xiàn)userPoJo會(huì)是null的情況,以及其相應(yīng)的屬性也可能是null的情況,這樣的話,如果我們直接在Sql中進(jìn)行拼接而不做判斷的話,可能會(huì)出現(xiàn)一些錯(cuò)誤,所以我們使用if來進(jìn)行動(dòng)態(tài)的拼接。

Mybatis中輸入輸出映射與動(dòng)態(tài)Sql圖文詳解

2.Sql片段

上面的例子中,我們可以將if判斷抽取出來作為一個(gè)Sql片段,這樣做的好處是,可能再進(jìn)行別的單表查詢User信息的時(shí)候可以重復(fù)使用這些Sql。


 
 
  
  AND sex = #{userPoJo.sex}
  
  
  AND username LIKE '%${userPoJo.username}%'
  
 
 

然后在別的Sql中將上面的Sql片段引入拼接即可

3.foreach

當(dāng)我們需要一種同樣的查詢方式只是參數(shù)不同的時(shí)候:SELECT * FROM t_user WHERE 1=1 AND (id = 1 OR id =2 OR id = 3),可以使用foreach來記性sql拼接


 
  
  
  id=#{item_id}
  
 
 

然后將上面的Sql片段加入響應(yīng)的statment中

 

測(cè)試結(jié)果如下

Mybatis中輸入輸出映射與動(dòng)態(tài)Sql圖文詳解

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。


分享名稱:Mybatis中輸入輸出映射與動(dòng)態(tài)Sql圖文詳解
當(dāng)前地址:http://weahome.cn/article/jcjpos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部