通过观察,不难发现目前所列举的接口中方法的参数只有1个,参数的类型可以分为两种:一种是基本类型,另一种是 JavaBean。
当参数是一个基本类型的时候,它在 XML 文件中对应的 SQL 语句只会使用 个参数,例delete 方法。当参数是一个 JavaBean 类型的时候,它在 XML 文件中对应的 SQL 语句会有多个参数,例如 insert update 方法。
在实际应用中经常会遇到使用多个参数的情况 前面几节的例子中,我们将多个参数合并 在一个JavaBean 中,并使用这个 JavaBean 作为接口方法的参数。这种方法用起来很方便,但并不适合全部的情况,因为不能只为了两三个参数去创建新的 Java ea 类,因此对于参数比较少的情况 ,还有两种方式可以采用:使用 Map 类型作为参数或使用@Param 注解。
使用 Map 类型作为参数的方法,就是在 Map 中通过 key 来映射 XML SQL 使用的参数值名字, alue 用来存放参数值,需要多个参数时,通过 Mapkey-valu 方式传递参数值 ,由于这种方式还需要自己手动创建 Map 以及对参数进行赋值
一、采用Map方式进行多个接口参数进行查询
如下面我们Map传递参数name和pass来进行查询。
1、首先在UsersMapper.xml中添加一个查询命令,代码如下:
-
<
select id=
"selectByNameAndPass" resultMap=
"userBean" parameterType=
"map">
-
-
select id,name,pass
from users
where name=
#{name} and pass=#{pass}
-
-
</
select>
这个查询命令中我们用到了两个参数。#{name}和#{pass}。
2、在users数据表的持久层中的UsersDao.java中添加如下的抽象方法。
List<Users> selectByNameAndPass(Map map);
3、进行测试,测试代码如下。
-
package dc.com.test;
-
-
-
import org.apache.ibatis.session.SqlSession;
-
-
import dc.com.DBTools;
-
-
import dc.com.mapper.UsersMapper;
-
-
import dc.com.entity.Users;
-
-
-
import java.util.HashMap;
-
-
import java.util.List;
-
-
import java.util.Map;
-
-
-
public
class UsersTest {
-
-
public static void main(String[] args){
-
-
//获取会话SqlSession对象
-
-
SqlSession session= DBTools.getSqlSession();
-
-
UsersMapper usersMapper=session.getMapper(UsersMapper.class);
-
-
try {
-
-
Map<String,Object> map=
new HashMap<String, Object>();
-
-
map.put(
"name",
"lisi");
-
-
map.put(
"pass",
"lisi");
-
-
List<Users> list=usersMapper.selectByNameAndPass(map);
-
-
if(list !=
null && list.size()>
0){
-
-
for (Users user:list) {
-
-
System.out.println(
"id="+user.getId()+
",name="+user.getName()+
",pass="+user.getPass());
-
-
}
-
-
}
else {
-
-
System.out.println(
"没有找到用户");
-
-
}
-
-
}
catch (Exception e){
-
-
e.printStackTrace();
-
-
}
finally {
-
-
session.close();
-
}
-
}
-
}
4、运行结果如下。
二、采用@Param 注解的方式进行查询操作。
1、首先在UsersMapper.xml中添加一个查询命令,代码如下:
-
<
select id=
"selectByParam" resultMap=
"userBean" >
-
-
select id,name,pass
from users
where name=
#{name}
-
-
</
select>
这个查询命令中我们用到了一个参数#{name}。
2、在users数据表的持久层中的UsersDao.java中添加如下的抽象方法。
List<Users> selectByParam(@Param("name")String name);
注:@Param("name")String name指出了该方法中的参数是字符类型,并与UsersMapper中命令参数name是对应的。
3、进行测试,测试代码如下。
-
package dc.com.test;
-
-
-
-
import org.apache.ibatis.session.SqlSession;
-
-
import dc.com.DBTools;
-
-
import dc.com.mapper.UsersMapper;
-
-
import dc.com.entity.Users;dc
-
-
-
import java.util.HashMap;
-
-
import java.util.List;dc
-
-
import java.util.Map;
-
-
-
public
class UsersTest {
-
-
public static void main(String[] args){
-
-
//获取会话SqlSession对象
-
-
SqlSession session= DBTools.getSqlSession();
-
-
UsersMapper usersMapper=session.getMapper(UsersMapper.class);
-
-
try {
-
-
List<Users> list=usersMapper.selectByParam(
"zhangsan");
-
-
if(list !=
null && list.size()>
0){
-
-
for (Users user:list) {
-
-
System.out.println(
"id="+user.getId()+
",name="+user.getName()+
",pass="+user.getPass());
-
-
}
-
-
}
else {
-
-
System.out.println(
"没有找到用户");
-
-
}
-
-
}
catch (Exception e){
-
-
e.printStackTrace();
-
-
}
finally {
-
-
session.close();
-
}
-
}
-
}
4、运行结果如下。
总结:
1. 在mybatis的配置中加入 <mappers> <package name="dc.com.mapper"/> </mappers>。配置会自动寻找xml资源,进行相应的解析。
2. 查询有返回值,更新插入没有
3. parameterType=“ ” 传入值的类型 :分两种 :javabean类型 和 基本类型(long,int) 参数都是只有一个。
4. 两种参数赋值 :
map(用map当参数 ,用put(key,value)设值进去) ,
@Param(“ ”)String name 在接口方法参数中接收
转载:https://blog.csdn.net/qq_42421212/article/details/105561694