Mybatis查詢select操作
先看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操作