最近公司项目用到mybatis框架,刚入手,遇到不少坑,特在这里总结一下,方便自己查阅。
First:直接传param
Dao层代码:
Oem selectByNameAndId(Integer id,String name);
对应的Mapper.xml
<select id="selectByNameAndId" resultMap="xxx.Oem">
select *
from oem
where id = #{0} and name = #{1}
</select>
此处的#{0}代表的是第一个参数即为id,第二个参数用#{1},下脚标从0开始。
这里需要注意几点:
(1)用此种方法,只传递一个参数时,那在对应的xml文件中获取时,#{xxx},用什么都可以,没有具体限制,#{0},#{id},#{abc}当然开发中肯定要有一定的意义,不能太随便。
(2)当传递参数数量大于1时,可以用我上面列举的大括号里+下脚标。
(3)这里的xml中并没有配置parametertype这个参数,这是因为如果参数的类型不止一种时,可以省略不写。
Second:使用Map进行传param
service层调用代码:
Map mapparam =new HashMap();
mapparam.put("id","123");
mapparam.put("name",xiaoming);
OemProductOrder opo =new OemProductOrder();
opo.selectByMap(mapparam);
Dao层代码:
Oem selectByMap(Map mapparam);
对应的Mapper.xml:
<select id="selectByMap" parameterType="java.util.Map" resultMap="xxx.Oem">
select *
from oem
where id = #{id,jdbcType=INTEGER} and name = #{name,"jdbcType=VARCHAR"}
</select>
此处不能再直接使用下脚标了,而要使用map里面的key。
Third 使用参数注解:
为了简单这里直接使用上面的代码,稍加改动。
Mapper.xml:
<select id="selectByMap" parameterType="xxx.Oem" resultMap="xxx.Oem">
select *
from oem
where id = #{id,jdbcType=INTEGER} and name = #{name,"jdbcType=VARCHAR"}
</select>
Dao层代码:
Oem selectByMap(@Param("id")Integer ida,@Param("name")String namea);
service层调用代码:
OemProductOrder opo =new OemProductOrder();
opo.selectByMap(id,name);
这里使用的是@param注解传参,我特意在Dao层把行参的名字都改动了下(后面都加了个a),因为是注解里面写的仍然是id,name所以在mapper.xml中取值时,使用的也是id,name。也就是xml中要和注解里的名字保持一致。
至于其他的用对象的属性进行传值,也不外乎就上面三种情况,只是取值时在用.取属性的取值。