前言
我們提供的服務(wù)有:成都做網(wǎng)站、網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、承德縣ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的承德縣網(wǎng)站制作公司
Mybatis真正強大的地方在于SQL映射語句,這也是它的魅力所在。
相對于它強大的功能,SQL映射文件的配置卻非常簡單,我上篇文章語句講了Mybatis的搭建以及核心配置的講解,接下來咱們就一起來看看Mybatis另一個重要的元素-SQL映射文件
首先先介紹一下SQL映射文件的幾個頂級元素配置
頂級元素配置
1、Mapper:映射文件的根元素節(jié)點,只有一個屬性namespace(命名空間),其作用如下
2、cache:配置給定命名空間引用緩存。
3、cache-ref:從其他命名空間引用緩存配置
4、resultMap:用來描述數(shù)據(jù)庫結(jié)果集和對象的對象關(guān)系(鍵值對)
5、sql:可以重用的sql塊,也可以被其他語句引用。
6、insert:映射插入的語句
7、update:映射更新的語句
8、delete:映射刪除的語句
9、select:映射查詢的語句
接下來我就逐一的為大家介紹
select:映射查詢語句
<!--根據(jù)用戶名稱查詢用戶列表(模糊查詢)--> <select id="getUserListByUserName" resultType="User" parameterType="string"> select * from user_info where userName like CONCAT('%',#{userName},'%') </select>
上面這段代碼是一個id為getUserListByUserName的映射語句,參數(shù)類型為string,返回結(jié)果的類型是User,注意參數(shù)的傳遞使用#{參數(shù)名},它告訴Mybatis生成PreparedStatement參數(shù),對于JDBC,該參數(shù)會被標(biāo)識為“?”,若采用JDBC來實現(xiàn),那代碼就得換一下方式了
String sql="select * from user_info where userName like CONCAT('%',?,'%')"; PreparedStatement ps=conn.preparedStatement(sql); ps.setString(1,userName);
從上面兩端代碼我相信大家都能看出區(qū)別,Mybatis節(jié)省了大量的代碼,我相信大家會喜歡上它的
接下來我來介紹一下select映射語句中的家庭成員吧!
接下來我就用一個實例來向大家演示一下
首先我弄了一個以用戶名、用戶角色來查詢用戶列表的功能,咱們先創(chuàng)建UserMapper.java文件
public interface UserMapper { public List<User> getUserList(Map<String,String> userMap); }
從上面大家可以看到我用來一個集合來接受返回的結(jié)果集,并且傳遞的參數(shù)是一個user對象
下面再來編寫UserMapper.xml文件的主體內(nèi)容
<!--查詢用戶列表(參數(shù):對象入?yún)ⅲ?-> <select id="getUserList" resultType="user" parameterType="Map"> select u.*,r.roleName from smbms_user u,smbms_role r where u.userName like CONCAT('%',#{userName},'%') and u.userRole=#{userRole} and u.userRole=r.id </select>
上面便是咱們此次測試的查詢映射語句了,這和我在上面說的映射語句區(qū)別不大,唯一大點的區(qū)別就在于參數(shù)類型,這的參數(shù)類型我換成了一個Map集合。
接下來就可以去測試了。
@Test public 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,我們?yōu)槭裁匆胷esultMap呢?
用小編的話說:當(dāng)我們要使用的查詢映射語句是需要關(guān)聯(lián)多表的時候,那么一個實體類的字段就不夠用了,比如User表中有一個部門ID,而部門ID又對應(yīng)了部門表,我們想查詢部門名稱而不是查詢部門ID,這時候我們就要在User實體類中加入一個部門名稱屬性,且該屬性的類型為部門實體類,
到這我們就需要使用resultMap了
<select id="getUserList" resultMap="user" parameterType="Map"> select u.*,r.roleName from smbms_user u,smbms_role r where 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元素用來描述如何將結(jié)果集映射到j(luò)ava對象,此處使用resultMap對列表展示所需的必要字段來進行自由映射。接下來看看resultMap元素的屬性值和子節(jié)點吧
Mybatis中對查詢進行select映射的時候,返回類型可以用resultType,也可以用resultMap,那么resultType和resultMap到底有何關(guān)聯(lián)呢?接下里小編就做一下詳細的講解
resultType
resultType直接表示返回類型,包括基礎(chǔ)數(shù)據(jù)庫類型和復(fù)雜數(shù)據(jù)類型
resultMap
resultMap則是對外部resultMap定義的引用,對外部resultMap的ID,表示返回結(jié)果映射到哪一個resultMap上,它的應(yīng)用場景一般是:數(shù)據(jù)庫字段信息與對象屬性不一致或者需要做復(fù)雜的聯(lián)合查詢以便自由控制映射結(jié)果。
resultType與resultMap的關(guān)聯(lián)
在Mybatis的select元素中,resultType和resultMap本質(zhì)上是一樣的,都是Map數(shù)據(jù)結(jié)構(gòu),但需要明確的一點:resultType屬性和resultMap屬性絕對不能同時存在,只能二者選其一。
接下來說說使用Mybatis實現(xiàn)增刪改的操作,其實這幾個操作都大同小異(小編認(rèn)為的)。
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映射文件最基礎(chǔ)的一些東西,后面還有動態(tài)SQL之類的我在這就不做介紹了,感興趣的童鞋可以去查查(我覺得闊以)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
網(wǎng)頁題目:Mybatis核心組成部分之SQL映射文件揭秘詳解
路徑分享:http://jinyejixie.com/article36/gcespg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、小程序開發(fā)、微信公眾號、建站公司、網(wǎng)站改版、虛擬主機
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)