1. 程式人生 > >Mybatis查詢select操作

Mybatis查詢select操作

自動完成 分享 簡單 就是 映射 對象的引用 from 配置文件 相關

先看select標簽的屬性:

技術分享

說幾點:

resultType和resultMap都是用來表示結果集的類型的,resultType用於簡單的HashMap或者是簡單的pojo對象,而resultSet是用於比較復雜的對象映射。

現在來研究一下這個傳入參數:

這裏講傳入參數的兩種形式,一種是hashmap,一種是對象

看這個sql語句:

<select id="loginSelect" resultType="JikeUser"  parameterType=""hashmap>
    select * from JikeUser where userName=#{userName} and password=#{password}
</select>

這個sql語句的id是loginSelect,返回類型是對象JikeUser,傳入參數的類型是hashmap,但是可以看到,這裏明明要兩個參數啊,一個userName,一個password

然後我們來測試:(這裏也會看到,這個resultType的值沒有用完整的路徑名,這是采用了簡寫機制,就是為類起了個別名,這個操作在基本配置文件用typeAliases來標識)

HashMap<String,String> hm = new HashMap();
hm.put("userName","JIkeBen");
hm.put("password","1111");
JikeUser oneTemp 
= session.selectOne("loginSelect",hm);

這裏兩個元素,一個鍵是userName,一個鍵是password,同時也是我們參數的名稱,就是sql#{userName},而hashmap裏的值就是我們要傳入sql語句的相關信息。

也就是說,傳入一個hashmap後sql會自己找到相應的鍵,傳入相應的值。

parameterType還可以設置為對象,當傳入一個對象的時候,mybatis會自動完成對象的屬性到sql語句參數的自動匹配,只有在一致的情況下,它才可以自動的匹配。 然後返回的對象也可以設置為對象,這裏也需要一個匹配的過程,也就是從數據庫表的 列名 到 對象屬性的匹配。 如果列名和對象的屬性不一致的話,有兩種方法,一種是采用resultMap的形式,很靈活;另一種是為sql語句中的列名起一個別名,這個別名和對象屬性一致就行了。

剛剛我們都只是獲得一個結果,那麽如果是多個結果,獲得多個對象呢?

如果返回多行記錄的話,Mybatis會自動把它封裝成一個list

<select id="selectJiKeUserList" resultType="JiKeUser">
    select * from JiKeUser
</select>
List<JiKeUser> ap  = session.selectList("selectJiKeUserList");

下面講一下resultMap,這也是一個返回操作的設定,但這個和resultType只能有一個成立。

resultMap可以解決一些比較復雜的映射關系,比如對象當中含有另一個對象的引用,首先要使用的話要設定一個resultMap標簽

<resultMap id="JiKeUserMap" type="JiKeUser">

    //指定對象的屬性,到列名之間的關系關系,下面幾個也都是
    <id property="id" colum="id"/>
   <result property="userName" colum="userName"/>
    <result property="password" colum-"password"/>
</resultMap>

這裏我麽的類名和屬性名是一致的,如果不一致,也可以在map當中設定這樣的一個匹配關系。

然後再使用的時候,要在sql語句中說明resultMap是哪一個

<select id="selectUsers" resultMap="JiKeUserMap">
    select id,userName,password from JiKeUser
</select>

Mybatis查詢select操作