package com.atguigu.mybatis.dao; import com.atguigu.mybatis.bean.Employee; /** * @Author 谢军帅 * @Date2019/11/11 16:16 * @Description */ public interface EmployeeMapper { /** * 根据id查员工 * @param id * @return */ public Employee getEmpById(Integer id); }
上一节的代码中,直接使用SqlSession对象在增删改查时,在传参时,是一个Object类型;传入的参数错误时,实现不了相应的功能。
接口是从数据库查询数据封装成对象,Sql映射文件也是查询数据库返回封装的对象;MyBatis实现接口与SQL映射文件动态绑定。
这时SQL映射文件的namespace就不能随便写了,要指定为接口的全类名。
接口中有一个根据id查询员工的方法,对应SQL映射文件中的SQL,将SQL的id改为方法的id(也就是方法名)。
接口的好处:
1.接口规定的方法拥有更强的类型检查。
2.有明确的返回值。
3.MyBatis使用代理实现接口的实现类的创建。
测试代码:
public class MyBatisTest { public SqlSessionFactory getSqlSessionFactory() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); return new SqlSessionFactoryBuilder().build(inputStream); } @Test public void test2() throws IOException { //1.获取SqlSessionFactory SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); //2.获取sqlSession对象 SqlSession sqlSession = sqlSessionFactory.openSession(); //3.之前是直接调用增删改查的API,现在接口和Sql有了绑定 //使用sqlSession对象得到接口的实现类对象 EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class); Employee employee = employeeMapper.getEmpById(1); System.out.println(employee.getClass()); System.out.println(employee); sqlSession.close(); } }