温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

mybatis 使用Map封装查询的结果

发布时间:2020-07-02 10:49:40 来源:网络 阅读:1951 作者:诗和_远方 栏目:开发技术

有时我们厌倦了为每个查询写一个Entity类,这时Map开始发挥它的功效。

对于要返回“学号,班级,姓名”结果的查询,可以这样写Mapper:

<select id="selectStudent">

    select s.code as sNo , s.name as sName, c.name as cName

    from xStudent s, xClass c

    where s.cID = c.ID

</select>


如下声明我们的dao方法:

public List<Map<String, Object>> selectStudent(Map<String, Object> parameter) {

    return getSqlSession().selectList(getStatement("selectStudent"), parameter);

}

如果要将该查询结果转为JSON字符串返回,那么我们就可以直接将List<Map<String, Object>转为JSON,逻辑层不需要任何代码。

如果返回的结果集需要按select中的字段顺序返回,那么将resultType="java.util.HashMap" 换为resultType="java.util.LinkedHashMap"

------------------------------华丽分割线-----------------------------

使用Map封装查询结果时注意数据的类型映射

对于如下的Mapper

<select id="selectStudent">

    select s.code as sNo , concat(s.firstName, s.lastName) as sName

    from xStudent s

</select>


Mybatis会傻傻的将sName的数据类型映射为byte[], 因为我们没有提供entity,mybatis也不知道我们想要什么类型,而sName是计算出来的值,mybatis也没有办法从数据库中获取字段的值,所以它就将其封装为byte[],解决办法很简单,加一个cast 函数

<select id="selectStudent">

select s.code as sNo , cast(concat(s.firstName, s.lastName) AS CHAR) as sName

from xStudent s

</select>

------------------------------------华丽分割线--------------------------------

之前讲到了orcale的字符串与日期等类型的转换,现在我们来看看MySQL是怎么转换的。比起orcale,MySQL相比之下就简单得多了,只需要一个Cast()函数就能搞定。其语法为:Cast(字段名 as 转换的类型 ),其中类型可以为:

CHAR[(N)] 字符型 
DATE  日期型
DATETIME  日期和时间型
DECIMAL  float型
SIGNED  int
TIME  时间型

例如表table1

date

2015-11-03 15:31:26

select cast(date as signed) as date from  table1;

结果如下:

date

20151103153126


select cast(date as char) as date from  table1;

结果如下:

date

2015-11-03 15:31:26



select cast(date as datetime) as date from  table1;

结果如下:

date


2015-11-03 15:31:26


select cast(date as date) as date from  table1;

结果如下:

date


2015-11-03


select cast(date as time) as date from  table1;

结果如下:

date

15:31:26

这里date对应日期,time对应时间



向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI