6.1 Mapper接口开发介绍
在上面的Mybatis案例中,
通过SqlSession
对象调用方法进行增删改查操作时,
方法中需要传入的第一个参数是一个字符串值,
该值对应的内容为:
(Mapper文件中的) namespace + id, 通过这种方式, 找到Mapper文件中映射的SQL语句并执行!!
这种方式由于传入的是字符串值,
很容易发生字符串拼写错误且编译时期不会提示。
这里我们将会讲解比上面更加简单的方式,
也是我们企业开发中最常用的方式,
即使用mapper接口开发。
使用mapper接口开发需要注意以下几点:
1、创建一个接口,接口的全路径名和mapper文件的namespace值要
相同
2、mapper文件中每条要执行的SQL语句,在接口中要添加一个对应的方法,
并且接口中的方法名和SQL标签上的id值
相同
3、Mapper接口中方法接收的参数类型,和mapper.xml中定义的sql的接收的参数类型要
相同
4、接口中方法的返回值类型和SQL标签上的resultType即返回值类型
相同
(
如果方法返回值是集合,
resultType只需要指定集合中的泛型
)
6.2 Mapper接口开发实现
下面将使用mapper接口开发的方式,实现根据id查询指定的员工信息
1、创建com.tedu.dao.EmpMapper接口
由于接口的全路径名(com.tedu.dao.EmpMapper
)要和EmpMapper.xml
的namespace
值保持一致,
因此, 这里将namespace
的值改为com.tedu.dao.EmpMapper
:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.tedu.dao.EmpMapper">
</mapper>
2、在接口中提供findById方法
/** * 根据id查询员工信息 * @param id * @return Emp */
public Emp findById(Integer id);
注意:方法的名字要和映射的sql标签的id值保持一致
方法的返回值类型和resultType的类型要一致
<!-- 1.查询:查询Emp表中指定id的员工信息 -->
<select id="findById" resultType="com.tedu.pojo.Emp">
select * from emp where id=#{id}
</select>
3、提供实现类,测试Emp接口中的根据id查询员工的方法
(1)创建com.tedu.test.TestMybatisInf类, 并提供testFindById方法
public class TestMybatisInf {
@Test
public void testFindById() throws Exception{}
}
4、 实现testFindById方法并测试
@Test
public void testFindById() throws Exception{
......
//3.获取Mapper接口对象
EmpMapper map = session.getMapper(EmpMapper.class);
//4.调用接口对象的方法进行查询
Emp e = map.findById(2);
//5.输出结果
System.out.println(e);
}
5、在接口中提供findAll方法
/** * 查询所有的员工信息 * @return List<Emp> */
public List<Emp> findAll();
注意:方法的名字要和映射的sql标签的id值保持一致
方法的返回值类型和resultType的类型要一致, 例如:
<!-- 2.查询Emp表中所有员工的信息 -->
<select id="findAll" resultType="com.tedu.pojo.Emp">
select * from emp
</select>
6、提供实现类,测试Emp接口中的查询所有员工的方法
(1)创建com.tedu.test.TestMybatisInf类, 并提供testFindAll方法
public class TestMybatisInf {
......
@Test
public void testFindAll () throws Exception{}
}
实现testFindAll方法并测试
@Test
public void testFindAll() throws Exception{
......
//3.获取Mapper接口对象
EmpMapper map = session.getMapper(EmpMapper.class);
//4.调用接口对象的方法进行查询
List<Emp> list = map.findAll();
//5.输出结果
for (Emp e : list) {
System.out.println(e);
}
}