您的位置:首页 > 其它

mybatis -- HashMap 用法/实例:查找文章分类下文章的数目

2016-05-25 15:11 295 查看
有两张表,一张是文章分类表category,两个字段(id 分类编号,title 分类名称);

                  一张是文章表article,三个字段(id 文章编号,name 文章标题 ,content 文章内容,categoryid 所属文章分类)

需求: 利用sql查找出一个分类下文章的数目。

分析:常规 xml中  写 sql

SELECT tab1.id AS id,tab1.title AS title,nvl(tab2.count,0) AS COUNT
FROM CATEGORY tab1 LEFT JOIN
(SELECT COUNT(ID) AS COUNT,categoryid FROM ARTICLE ar GROUP BY ar.categoryid) tab2
ON tab1.id = tab2.categoryid
最终我们需要三个字段,分类id   分类名称name 和每个分类下的数目count,三个字段里两个字段是文章分类表里有的,而第三个没有,这时就不能直接返回分类表对应的实体类了。采用HashMap就可以很方便的解决这个问题。
mybatis  xml 文件中代码如下:

<select id="xxxxx" resultType="java.util.HashMap">
SELECT tab1.id AS id,tab1.title AS title,nvl(tab2.count,0) AS COUNT
FROM CATEGORY tab1 LEFT JOIN
(SELECT COUNT(ID) AS COUNT,categoryid FROM ARTICLE ar GROUP BY ar.categoryid) tab2
ON tab1.id = tab2.categoryid
</select>
返回值是HashMap类型,可以理解为动态的创建了一个HashMap集合,以键值对的形式保存从数据库里的返回值,map.put("ID",xxx);    map.put("NAME",xxx);    map.put("COUNT",xxx);

需要注意的有两点:

1.在Mapper.java里,返回类型应写成    List<Map<String,Object>>



2.map里的键全都是相应字段的大写字母:map.put("ID",xxx);    map.put("NAME",xxx);    map.put("COUNT",xxx);

这里贴一张数据库查看的结果方便理解:



补充:今天又遇到一个问题,如果title在数据库里的类型是clob类型,就取不到汉字了,需要对取出来的字段做类型处理,直接应用ResultMap将会更简单,下面直接上代码

xxxMapper.xml 代码:

<resultMap type="HashMap" id="categoryHashMap">
<result property="ID" column="id"/>
<result property="TITLE" column="title" javaType="String"/> <!-- 这里将clob类型直接转换为了String类型 -->
<result property="COUNT" column="count"/>
</resultMap>

<select id="xxxxx" resultMap="categoryHashMap">
SELECT tab1.id AS id,tab1.title AS title,nvl(tab2.count,0) AS COUNT
FROM CATEGORY tab1 LEFT JOIN
(SELECT COUNT(ID) AS COUNT,categoryid FROM ARTICLE ar GROUP BY ar.categoryid) tab2
ON tab1.id = tab2.categoryid
</select>
 -----   笔者水平有限,如有不严谨的地方,请指教必改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis HashMap用法