小言_互联网的博客

Mybatis 框架(XML的基本使用 五 )

359人阅读  评论(0)

   通过观察,不难发现目前所列举的接口中方法的参数只有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中添加一个查询命令,代码如下:


  
  1. < select id= "selectByNameAndPass" resultMap= "userBean" parameterType= "map">
  2.          select id,name,pass from users where name= #{name} and pass=#{pass}
  3.     </ select>

 

这个查询命令中我们用到了两个参数。#{name}和#{pass}。

2、在users数据表的持久层中的UsersDao.java中添加如下的抽象方法。   

    List<Users> selectByNameAndPass(Map map);

3、进行测试,测试代码如下。


  
  1. package dc.com.test;
  2. import org.apache.ibatis.session.SqlSession;
  3. import dc.com.DBTools;
  4. import dc.com.mapper.UsersMapper;
  5. import dc.com.entity.Users;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Map;
  9. public class UsersTest {
  10.      public  static  void main(String[] args){
  11.          //获取会话SqlSession对象
  12.         SqlSession session= DBTools.getSqlSession();
  13.         UsersMapper usersMapper=session.getMapper(UsersMapper.class);
  14.          try {
  15.             Map<String,Object> map= new HashMap<String, Object>();
  16.             map.put( "name", "lisi");
  17.             map.put( "pass", "lisi");
  18.            List<Users> list=usersMapper.selectByNameAndPass(map);
  19.              if(list != null && list.size()> 0){
  20.                  for (Users user:list) {
  21.                     System.out.println( "id="+user.getId()+ ",name="+user.getName()+ ",pass="+user.getPass());
  22.                 }
  23.             } else {
  24.                 System.out.println( "没有找到用户");
  25.             }
  26.             } catch (Exception e){
  27.                  e.printStackTrace();
  28.             } finally {
  29.                 session.close();
  30.         }
  31.     }
  32. }

 

4、运行结果如下。

 

 

 

二、采用@Param 注解的方式进行查询操作。

1、首先在UsersMapper.xml中添加一个查询命令,代码如下:


  
  1. < select id= "selectByParam" resultMap= "userBean" >
  2.          select id,name,pass from users where name= #{name}
  3.     </ select>

这个查询命令中我们用到了一个参数#{name}。

2、在users数据表的持久层中的UsersDao.java中添加如下的抽象方法。   

List<Users> selectByParam(@Param("name")String name);

注:@Param("name")String name指出了该方法中的参数是字符类型,并与UsersMapper中命令参数name是对应的。

3、进行测试,测试代码如下。

 


  
  1. package dc.com.test;
  2. import org.apache.ibatis.session.SqlSession;
  3. import dc.com.DBTools;
  4. import dc.com.mapper.UsersMapper;
  5. import dc.com.entity.Users;dc
  6. import java.util.HashMap;
  7. import java.util.List;dc
  8. import java.util.Map;
  9. public class UsersTest {
  10.      public  static  void main(String[] args){
  11.          //获取会话SqlSession对象
  12.         SqlSession session= DBTools.getSqlSession();
  13.         UsersMapper usersMapper=session.getMapper(UsersMapper.class);
  14.          try
  15.            List<Users> list=usersMapper.selectByParam( "zhangsan");
  16.              if(list != null && list.size()> 0){
  17.                  for (Users user:list) {
  18.                     System.out.println( "id="+user.getId()+ ",name="+user.getName()+ ",pass="+user.getPass());
  19.                 }
  20.             } else {
  21.                 System.out.println( "没有找到用户");
  22.             }
  23.             } catch (Exception e){
  24.                  e.printStackTrace();
  25.             } finally {
  26.                 session.close();
  27.         }
  28.     }
  29. }

 

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场