麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

Mybatis核心組成部分之SQL映射文件揭秘詳解

2024-07-14 08:42:48
字體:
來源:轉載
供稿:網友

前言

Mybatis真正強大的地方在于SQL映射語句,這也是它的魅力所在。

相對于它強大的功能,SQL映射文件的配置卻非常簡單,我上篇文章語句講了Mybatis的搭建以及核心配置的講解,接下來咱們就一起來看看Mybatis另一個重要的元素-SQL映射文件

首先先介紹一下SQL映射文件的幾個頂級元素配置

頂級元素配置

1、Mapper:映射文件的根元素節點,只有一個屬性namespace(命名空間),其作用如下

  • 用于區分不同的mapper,全局唯一
  • 綁定DAO接口,即面向接口編程。當namespace綁定某一接口之后,就可以不用寫該接口的實現類,Mybatis會通過接口的完整限定名查找到對應的mapper配置來執行SQL語句。因此namespace的命名必須要跟接口名同名

2、cache:配置給定命名空間引用緩存。

3、cache-ref:從其他命名空間引用緩存配置

4、resultMap:用來描述數據庫結果集和對象的對象關系(鍵值對)

5、sql:可以重用的sql塊,也可以被其他語句引用。

6、insert:映射插入的語句

7、update:映射更新的語句

8、delete:映射刪除的語句

9、select:映射查詢的語句

接下來我就逐一的為大家介紹

select:映射查詢語句

<!--根據用戶名稱查詢用戶列表(模糊查詢)--><select id="getUserListByUserName" resultType="User" parameterType="string">select * from user_info where userName like CONCAT('%',#{userName},'%')</select>

上面這段代碼是一個id為getUserListByUserName的映射語句,參數類型為string,返回結果的類型是User,注意參數的傳遞使用#{參數名},它告訴Mybatis生成PreparedStatement參數,對于JDBC,該參數會被標識為“?”,若采用JDBC來實現,那代碼就得換一下方式了

String sql="select * from user_info where userName like CONCAT('%',?,'%')";PreparedStatement ps=conn.preparedStatement(sql);ps.setString(1,userName);

從上面兩端代碼我相信大家都能看出區別,Mybatis節省了大量的代碼,我相信大家會喜歡上它的
接下來我來介紹一下select映射語句中的家庭成員吧!

  • id:命名空間中唯一的標識符,可以被用來引用這條語句
  • parameter:表示查詢語句傳遞參數的類型的完全限定名或別名。它支持基礎數據類型和復雜數據類型,就比如咱們上面用到的string就是一個基礎數據類型,當然你會發現這的string的s是小寫,其實它只是一個別名,還是代表String,只不過它屬于一個內建的類型別名,那么以此類推,對于普通的Java類型,也有許多的內建類型別名,并且它們對大小寫不明感,介意大家去閱讀以下Mybatis的幫助文檔。
  • resultType:查詢語句返回結果類型的完全限定名或別名,別名的使用方式與parameterType的使用方式是一致的

接下來我就用一個實例來向大家演示一下

首先我弄了一個以用戶名、用戶角色來查詢用戶列表的功能,咱們先創建UserMapper.java文件

public interface UserMapper {public List<User> getUserList(Map<String,String> userMap);}

從上面大家可以看到我用來一個集合來接受返回的結果集,并且傳遞的參數是一個user對象

下面再來編寫UserMapper.xml文件的主體內容

<!--查詢用戶列表(參數:對象入參)--><select id="getUserList" resultType="user" parameterType="Map">select u.*,r.roleName from smbms_user u,smbms_role rwhere u.userName like CONCAT('%',#{userName},'%')and u.userRole=#{userRole} and u.userRole=r.id</select>

上面便是咱們此次測試的查詢映射語句了,這和我在上面說的映射語句區別不大,唯一大點的區別就在于參數類型,這的參數類型我換成了一個Map集合。

接下來就可以去測試了。

@Testpublic void getUserList(){SqlSession sqlSession=null;List<User> userList=new ArrayList<User>();try{sqlSession=MyBatisUtil.createSqlSession();Map<String,String> userMap=new HashMap<String,String>();userMap.put("uName","趙");userMap.put("uRole","3");userList=sqlSession.getMapper(UserMapper.class).getUserListMap(userMap);}catch(Exception e){e.printStackTrace();}finally{MyBatisUtil,closeSqlSession(sqlSession);}for(User user:userList){logger.debug("testGetUserList userCode:"+user.getUserCode()+"and userName:"+user.getUserName());}}

resultMap

接下來說說resultMap,我們為什么要用resultMap呢?

用小編的話說:當我們要使用的查詢映射語句是需要關聯多表的時候,那么一個實體類的字段就不夠用了,比如User表中有一個部門ID,而部門ID又對應了部門表,我們想查詢部門名稱而不是查詢部門ID,這時候我們就要在User實體類中加入一個部門名稱屬性,且該屬性的類型為部門實體類,

到這我們就需要使用resultMap了

<select id="getUserList" resultMap="user" parameterType="Map">select u.*,r.roleName from smbms_user u,smbms_role rwhere u.userName like CONCAT('%',#{userName},'%')and u.userRole=#{userRole} and u.userRole=r.id</select><resultMap id="userList" type="User"><result property="userRole" column="roleName"/></resultMap> 

resultMap元素用來描述如何將結果集映射到java對象,此處使用resultMap對列表展示所需的必要字段來進行自由映射。接下來看看resultMap元素的屬性值和子節點吧

  • id屬性:唯一標識符,此id值用于select元素resultMap屬性的引用
  • type屬性:表示該result的映射結果類型
  • result子節點:用于標識一些簡單屬性,其中column屬性表示從數據庫中查詢的字段名,property則表示查詢出來的字段對應的值賦給實體對象的哪個屬性。

Mybatis中對查詢進行select映射的時候,返回類型可以用resultType,也可以用resultMap,那么resultType和resultMap到底有何關聯呢?接下里小編就做一下詳細的講解

resultType

resultType直接表示返回類型,包括基礎數據庫類型和復雜數據類型

resultMap

resultMap則是對外部resultMap定義的引用,對外部resultMap的ID,表示返回結果映射到哪一個resultMap上,它的應用場景一般是:數據庫字段信息與對象屬性不一致或者需要做復雜的聯合查詢以便自由控制映射結果。

resultType與resultMap的關聯

在Mybatis的select元素中,resultType和resultMap本質上是一樣的,都是Map數據結構,但需要明確的一點:resultType屬性和resultMap屬性絕對不能同時存在,只能二者選其一。

接下來說說使用Mybatis實現增刪改的操作,其實這幾個操作都大同小異(小編認為的)。

insert

<insert id="add" parameterType="User">INSERT INTO `smbms`.`smbms_user`(`userCode`, `userName`, `userPassword`, `gender`, `birthday`, `phone`, `address`, `userRole`, `createdBy`, `creationDate`)VALUES (#{userCode}, #{userName}, #{userPassword}, #{gender}, #{birthday}, #{phone}, #{address}, #{userRole}, #{createdBy}, #{creationDate})</insert>

update

<update id="modify" parameterType="User">update smbms_user set userCode=#{userCode} where id=#{uId}</update>

delete

<delete id="del" parameterType="User">delete from smbms_user where id=#{id}</delete>

從上面的操作中可以看出其實這三種操作都差不多,其中的屬性也都見過哈!那么小編在這就不多做介紹了,上面我所說的都是SQL映射文件最基礎的一些東西,后面還有動態SQL之類的我在這就不做介紹了,感興趣的童鞋可以去查查(我覺得闊以)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产伦精品一区二区三区 | 色悠悠久久久久 | 少妇一级淫片免费放正片 | 在线免费91 | 麻豆91精品91久久久 | 国产精品成人一区二区三区电影毛片 | 精品亚洲va在线va天堂资源站 | 中文字幕专区高清在线观看 | xxxx hd videos | 国产欧美在线观看不卡一 | 国产噜噜噜噜久久久久久久久 | 日本精品视频一区二区三区四区 | 一区视频 | 免费黄色在线观看网站 | 久久精品在线免费观看 | 一区二区三区视频在线 | 久久嗨| 久久人人人 | 久久一本日日摸夜夜添 | 成人毛片100部 | 色av综合在线 | 欧美日本免费一区二区三区 | 亚洲一区二区三区视频 | 亚洲第五色综合网 | 成人黄色网战 | 黄色视频a级毛片 | 亚洲第一综合 | www.91成人 | 国产一级午夜 | 久久国产精品一区 | 久久精品a一级国产免视看成人 | 一级国产航空美女毛片内谢 | 91av亚洲| 亚洲国产精品久久久久久久 | 日本欧美在线播放 | 久久17| 成人在线视频一区 | 巨乳毛片 | 欧美日韩精品一区二区三区不卡 | 国产精品久久久久久影视 | 国产成人高清成人av片在线看 |