新手学myBatis,
请问用myBatis一定要写实体类吗?比如一些多表查询关联报表查询都是临时性的或者说都是多变,能不能不写实体类以jdbc结果集的型式展现呢?
多个结果集他会给你放入一个List,你在javacode中用selectList这样的代码返回的是list,当然这个list中可能是实体类也可能是hashmap
每张表都要对应一个实体 这样才能映射嘛 多表联合查询的结果可以返回一个hashmap处理 时情况而定
http://limingnihao.iteye.com/blog/781878
灵活处理,不一定非要使用实体类。关联查询,返回一个map的例子你可以看一下原来ibatis的,这个没怎么变。
如果你是多表联合查询,然后你又觉得返回方式用map很麻烦的话,你可以自己建立个实体类,这个实力类中包含有你所要查询的多表中的字段,然后在mybatis中用typeAlias指定一下,到时候,就能像用一般的实体类那样使用就好。
本身取出来就是结果集。
[code="xml"]
select
ID,
AD_ID,
AD_URL,
AD_PATH
from
ad_attachment
1=1
and AD_ID=#{ad_id}
and ID=#{id}
[/code]
定义一个resultMap接就可以了
我没像你那样做过,resultMap你可以指定他的类型为实体类,但是既然这样你为何要用reslutmap而不是直接就用实体类呢。搞这个你可以直接返回一个reslutMap,他的类型直接是一个hashmap就可以。
基本的过程是这样:首先查询得到返回结果集,这时为Map,如果有reslutType则将key_value通过get_set方式建立一个对象,如果直接用reslutMap 则省去转换的一步,当然,你又指定resultMap的type的话,他也一样会转换成一个实体类来处理。不知道明白了没
[code="java"]
public List select_adatt(HashMap paramMap) {
if(paramMap!=null){
if(paramMap.containsKey("offset")&¶mMap.containsKey("limit")){
return this.getSqlSessionTemplate().selectList("com.cepri.spicss.systemad.dao.ADDao.select_adatt", paramMap,new RowBounds(Integer.parseInt((String)paramMap.get("offset")), Integer.parseInt((String)paramMap.get("limit"))));
}else{
return this.getSqlSessionTemplate().selectList("com.cepri.spicss.systemad.dao.ADDao.select_adatt", paramMap);
}
}
else{
return this.getSqlSessionTemplate().selectList("com.cepri.spicss.systemad.dao.ADDao.select_adatt", paramMap);
}
}
[/code]
[code="xml"]
select
ID,
AD_ID,
AD_URL,
AD_PATH
from
ad_attachment
11=1
and AD_ID=#{ad_id}
and ID=#{id}
[/code]
[code="java"] <!-- 调用存储过程 -->
statementType="CALLABLE"
parameterMap="ParaMap_test"
resultMap="mpGoods"
>
{#{result} = call sp_getGoods()}
[/code]
这个里面的 parameterMap="ParaMap_test" 不要,还有你的传入参数是一个空的map?你的代码应该没问题,如果list有值的话,直接map.get("key")就可以了
[code="java"]
[/code]就是这里定义的这些
上面的数据已经有了。。。单个转换成map什么的都可以。
你说的:
但我看网上的另一方法是把要输出的结果集放入了参数变量中(如上),然后从这个参数hashMap中取得这个"result",再转成list输出,传参应该是传一个空hashMap呀,为什么没有返回值呢?
不太明白,不是已经有了返回值了么??这个返回结果的过程很好理解,你如果熟悉jdbc操作,应该对resultSet不陌生
你得有in....至少你的指定一下in吧,既然你要传入一些参数来执行这个存储,那就指定in吧,你给的链接就是个好例子,码上去试试
既然不需要传参数。。。自然输入为null....你觉得结果应该如何??存储有out才行。。不知道你的有没有,他这样的就是存储有in有out....
好吧。。。那是我没看到。。。那你认为他是直接out出去了?那指定resultMap做什么。。。。模仿他的做一下。。莫非你出不来?