mybatis简单用法

1、resultType 和 resultMap

引言:

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。
在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。
①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。
②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。

实例:

<select id="selectUid" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
distinct uid
from aimo_bloger_account
</select>

刚开始的时候只是想查询出uid的一个list,但存储在List<Integer> uIds = new ArrayList<Integer>();中后,发现无法用for(Integer uId:uIds)遍历

报错语句:cannot be cast to java.lang.Integer

接下来我将 uIds  也就是这个list用toString打印了出来,发现打印出的list里面存的是对象而不是uid,最后找出是resultMap的问题

修改后:

<select id="selectUid" resultType="INTEGER" parameterType="java.lang.Integer" >
select
distinct uid
from aimo_bloger_account
</select>

这样就可以用for(Integer uId:uIds)遍历了。

2、insertSelective 和 insert

在mybatis自动生成的XML文件中会出现insertSelective 和 insert这两个方法,这两个方法区别在于用insert插入数据时不能有字段为空,而用insertSelective 插入数据时字段可以为空;同样的在update中也有这样的情况。

3、foreach用法

在查询数据时经常会用到where in这种语句,就是指输入的参数可能是一个list。同样的mybatis也有对应的<foreach>标签

实例:

<select id="selectBySource" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select uid
from aimo_qd_data
where qd_num in
<foreach collection="list" index="index" item="item" open="("
separator="," close=")">
#{item}
</foreach>
</select>

foreach元素的属性主要有 item,index,collection,open,separator,close。

item表示集合中每一个元素进行迭代时的别名.

index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置.

open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符.

close表示以什么结束.

posted @ 2017-01-24 13:24  半马  阅读(285)  评论(0编辑  收藏  举报