这片文章是对自己学习的总结。
闲话不多说,直接看方法。
select标签中,parameterType的值是一个普通类型时,sql语句可以直接用#{}读取。看下面例子,我们先定义一个持久层接口,里面有个方法是根据id查找User对象,那么参数就应该是传入id,类型是int。
package com.itheima.Dao;
public interface UserDao {
public User findUserById(int id);
}
那么对应的UserDao.xml就应该是
注意其中的sql语句,我们可以直接用#{id}来表示传进来的参数。因为接口定义的参数名就是id,所以#{}里填写id,即用#{id}来表示传进来的参数id的值。
我们还可以是用#{0}来表示参数id的值。用0来表示第一个传进来的参数的值。但不推荐这样做
对Mybatis的学习,我们知道,如果持久层方法有参数要传进来,
上面的例子我们修改一些,改成根据id的List集合返回对应的Userlist。
package com.itheima.Dao;
public interface UserDao {
public List findUsersByIds(List idList);
}
那UserDao.xml的就应该这样写。
其中涉及到
如果传进来的参数不是普通类型,是封装好的类,只要大家理解#{}的含义,那也不难解决这个问题。了解#{}详细细节还是要看
MyBatis学习笔记:映射器中的标签。
以上是参数是List类型,如果是Map类型,那就parameterType的值改一下,然后sql中#{}的大括号内要写key的值才能取到对应的value。我们再把例子改一下,变成根据用户的id和name找到对应的User并返回
package com.itheima.Dao;
public interface UserDao {
public User findUser(Map id);
}
String name = "user1";
int id = 1;
Map map = new Map();
map.put("name", name);
map.put("id", id);
User user = roleMaper.findUser(map);
对应的map中有两个键值对,name和id,我们在UserDao.xml中可以使用#{id}和#{key}取到对应的value值
如果Map中是一个封装类,我们要取封装类中的某个变量,那我们要写成#{item.id}这样的形式。
如果传进来的是一个User类,User类中有id和name两个成员变量,我们要获取到类中的id,那么只需要直接写成员变量名就好#{id}。
我们可以不用xml来表明参数,转而使用注解,这种比较方便。
还是上面那个例子,根据用户的id和name找到对应的User并返回。接口添加注解,代码如下。
package com.itheima.Dao;
import org.apache.ibatis.annotations.Param;
public interface UserDao {
public User findUser(@Param("userName") String name, @Param("userId") int id);
}
在接口这里在参数前添加注解@Param,里面只有一个参数就是一个字符串。例子中第一个参数的注解参数是userName,那么在UserDao.xml中就可以使用#{userName}得到第一个参数的值,注意是userName而不是name。
在UserDao.xml中,