Mybatis中返回Map

在Mybatis中,我們通常會像下邊這樣用:

  • 返回一個結果
User selectOne(User user);
<select id="selectOne"  parameterType="cn.lyn4ever.entity.User"  resultType="cn.lyn4ever.entity.User">
       select id,username,telphone from user where telphone=#{telphone} and password = #{password}
    </select>
  • 返回多個結果(其實這個和上邊一樣,只不過是查詢條件的控制而已)
List<User> selectList(User user);
<select id="selectOne"  parameterType="cn.lyn4ever.entity.User"  resultType="cn.lyn4ever.entity.User">
       select id,username,telphone from user
    </select>

我們只要將上邊的resultType改爲java.util.HashMap,這會有生成下邊這樣

Map selectList(User user);
<select id="selectOne"  parameterType="cn.lyn4ever.entity.User"  parameterType="cn.lyn4ever.entity.User"   resultType="java.util.HashMap">
       select id,username,telphone from user where telphone=#{telphone} and password = #{password}
    </select>

上這結果就是說,以User類的屬性名爲key,屬性值爲value。

當然,也可以查出來多條記錄,將這個Map放進List中

List<Map> selectList(User user);
<select id="selectOne"  parameterType="cn.lyn4ever.entity.User"  resultType="java.util.HashMap">
       select id,username,telphone from user
    </select>

但是有時候我們想要這種結果,怎麼辦呢?

{
	"01":{
		username:"zhangsan",
		telphone:"13000000000"
	}
}

也就是我們要自定義一個Map<String,User>,這樣的話,有以下兩種解決方法:

1.使用註解

@MapKey("id")
Map<String,User> getUserInMap();
<!--xml和之前寫法一樣-->
<select id="getUserInMap" parameterType="cn.lyn4ever.entity.User"   resultType="User">
   select id,username,telphone from user where telphone=#{telphone} and password = #{password}
</select>

這個@MapKey的value寫的就是User對象的一個屬性

2.在xml文件中寫上

 HashMap<String,Object> getUserInMap();
<select id="getUserInMap" parameterType="cn.lyn4ever.entity.User"   resultType="java.util.HashMap">
SELECT id as 'key', * as 'value', id,username,telphone from user where telphone=#{telphone} and password = #{password}
</select>

當然以上這兩種方法,如果查出來是多條的話也會是List的形式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章