论坛首页 Java企业应用论坛

初用Ibatis的一些疑惑

浏览 12160 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-11-22  
正在学习myibaits 感觉比以前的使用方便了很多
0 请登录后投票
   发表时间:2011-11-22  
用实体映射吧。
0 请登录后投票
   发表时间:2011-11-22  
<resultMap>元素不是必须的,在很多情况下你可以不使用或者使用resultClass代替,但并不是表示<resultMap>元素是多余的,个人认为<resultMap>元素一般是用来定义对象和数据库表之间的影射关系(字段同属性之间的影射关系),在字段名和对象属性名称不一致的情况下返回对象类型使用<resultMap>会很方便,当然通过<resultMap>元素同时指定了属性javaType,方便数据转换,应该可以提升性能
0 请登录后投票
   发表时间:2011-11-23  
用了一年的ibatis,竟然都没认真思考resultMap和resultClass的优劣场合,罪过啊!
0 请登录后投票
   发表时间:2012-03-20  
你用hashmap返回的话,要解开两层的hashMap
0 请登录后投票
   发表时间:2012-03-31   最后修改:2012-03-31
天下大同 写道

初用Ibatis有几点疑惑,欢迎指教。

在ibatis的配置文件中经常有这样的

 

<sqlMap namespace="xxx">

<typeAlias alias="xxx" type="xxxxxx" />  

<resultMap id="xxxMap">
........
</resultMap>

</sqlMap >
<select id="xx" resultMap= "xxxMap" parameterClass="java.util.HashMap">
select * from table
</select>

 

 如果是做单一查询,或者一对一的查询

 

<typeAlias alias="xxx" type="xxxxxx" />  

<resultMap id="xxxMap">
........
</resultMap>

 

 这些映射完全是多余的啊

 

如果将查询改成<select  resultClass="java.util.HashMap"></select>

 

这样返回的也是一个Map<String,Object>,用resultMap= "xxxMap" 也同样是一个map,这样的还要做一个<resultMap id="xxxMap">的映射

是不是又点多余。

 

当然这是在单表查询,和一对一查询的时候,而且查询结果很清晰的组装成了一个map,那么实体bean也可以不用了。在每次调用只需写

<select  resultClass="java.util.HashMap" parameterClass="java.util.HashMap">

select 。。。。。

</select>

这样就可以解决所有的了。

 

如果实现一对多查询,这样<resultMap id="xxxMap">的映射还是有必要,但是我在问我同事的时候,他的解释是在用Ibatis的时候最好

不要再配置文件中关联,而是在java代码中实现表之间的关联。

 

 

 

<typeAlias alias="xxx" type="xxxxxx" />  

<resultMap id="xxxMap">
........
</resultMap>
 这样的配置是不是只有在一对多,或者多对多的时候才又用呢?

 

 

初用Ibatis 欢迎赐教。

 

 

 

 

 如果你不是用 resultMap,请问你如何实现jdbc type转换成适当的 jdbc type?举个例子:oracle数据存储的是number,业务调用要是int型,请问你怎么做?当然你肯定会有个思路:我在dao层 根据key把这个值拿出来,然后按照要求转换。若到以后需求变了? 而且在dao层把list遍历然后根据key拿这个字段的值还有性能消耗。  建议你把《MyBatis-3-User-Guide》中关于resultMap部分过一下。

0 请登录后投票
   发表时间:2012-03-31  
qq123zhz 写道
你用hashmap返回的话,要解开两层的hashMap

 

我觉得是就一层,是list中含有map

 

结果集对应的对象是一个list,list里面放的是hashmp,hashmap的 key是mappers文件中[select]与[from]之间声明的列名,value是列名对应的值 。

0 请登录后投票
   发表时间:2012-03-31  
天下大同 写道

初用Ibatis有几点疑惑,欢迎指教。

在ibatis的配置文件中经常有这样的

 

<sqlMap namespace="xxx">

<typeAlias alias="xxx" type="xxxxxx" />  

<resultMap id="xxxMap">
........
</resultMap>

</sqlMap >
<select id="xx" resultMap= "xxxMap" parameterClass="java.util.HashMap">
select * from table
</select>

 

 如果是做单一查询,或者一对一的查询

 

<typeAlias alias="xxx" type="xxxxxx" />  

<resultMap id="xxxMap">
........
</resultMap>

 

 这些映射完全是多余的啊

 

如果将查询改成<select  resultClass="java.util.HashMap"></select>

 

这样返回的也是一个Map<String,Object>,用resultMap= "xxxMap" 也同样是一个map,这样的还要做一个<resultMap id="xxxMap">的映射

是不是又点多余。

 

当然这是在单表查询,和一对一查询的时候,而且查询结果很清晰的组装成了一个map,那么实体bean也可以不用了。在每次调用只需写

<select  resultClass="java.util.HashMap" parameterClass="java.util.HashMap">

select 。。。。。

</select>

这样就可以解决所有的了。

 

如果实现一对多查询,这样<resultMap id="xxxMap">的映射还是有必要,但是我在问我同事的时候,他的解释是在用Ibatis的时候最好

不要再配置文件中关联,而是在java代码中实现表之间的关联。

 

 

 

<typeAlias alias="xxx" type="xxxxxx" />  

<resultMap id="xxxMap">
........
</resultMap>
 这样的配置是不是只有在一对多,或者多对多的时候才又用呢?

 

 

初用Ibatis 欢迎赐教。

 

 

 

0 请登录后投票
   发表时间:2012-04-01  
resultMap我很少用,一般数据库和实体类字段对不上才用一下
0 请登录后投票
   发表时间:2012-09-12  
Jacarri_Chan 写道
qq123zhz 写道
你用hashmap返回的话,要解开两层的hashMap

 

我觉得是就一层,是list中含有map

 

结果集对应的对象是一个list,list里面放的是hashmp,hashmap的 key是mappers文件中[select]与[from]之间声明的列名,value是列名对应的值 。

同意。实际中也经常这么用,遍历list得到map,以字段或其别名作为key取value

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics