MyBatis接口式编程 MyBatis使用接口连接数据库 1. 创建EmployeeMapper接口,定义sql方法 2. 将sql映射配置文件与接口绑定 3. 编写测试用例,连接数据库 创建接口没有实现也行吗? 总结

之前学习了如何传统的使用MyBatis连接数据库,今天学习如何使用更方便快捷的方式练级数据库。使用接口连接数据库

https://www.cnblogs.com/liziweiblog/p/11080470.html

1. 创建EmployeeMapper接口,定义sql方法

 1 package com.atguigu.mybatis.dao;
 2 
 3 import com.atguigu.mybatis.bean.Employee;
 4 
 5 /**
 6  * Employee数据库操作接口
 7  * @author Administrator
 8  *接口可以与配置文件动态绑定
 9  *namespace指定为接口的全类名,唯一标识指定为sql对应的方法名,返回值类型就是方法的返回值类型的全类名
10  */
11 public interface EmployeeMapper {
12     
13     public Employee getEmployeeById(Integer id);
14 
15 }

2. 将sql映射配置文件与接口绑定

  1. 将namespace配置为EmployeeMapper接口的全路径

  2. 将唯一标识id配置为方法名称

  3.将返回类型resultType设置为方法的返回值类型全路径

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 <mapper namespace="com.atguigu.mybatis.dao.EmployeeMapper">
 6  <!-- 
 7  namespace:名称空间
 8   id:唯一标识   #{id}表示从参数出取出id
 9   resultType:返回值类型
10  -->
11  <select id="getEmployeeById" resultType="com.atguigu.mybatis.bean.Employee">
12  select * from tbl_employee where id = #{id}
13  </select>
14 </mapper>

3. 编写测试用例,连接数据库

  1. 通过配置文件获取sqlSessionFactory对象

  2.通过sqlSessionFactory对象获取sqlSession对象

  3. 通过sqlSession对象获取接口的实现类对象employeeMapper

  4.调用employeeMapper对象的方法执行sql

  5.关闭sqlSession对象

 1 @Test
 2     public void test01() throws IOException {
 3         //1. 获取sqlSessionFactory对象
 4         String resource = "mybatis-config.xml";
 5         InputStream inputStream = Resources.getResourceAsStream(resource);
 6         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
 7         
 8         
 9         SqlSession sqlSession = null;
10         try {
11             //2得到sqlSession对象
12             sqlSession = sqlSessionFactory.openSession();
13             //通过EmployeeMapper接口获取mapper对象
14             EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
15             //调用EmployeeMapper中的方法查询
16             Employee employee = mapper.getEmployeeById(1);
17             System.out.println(employee);
18         }finally {
19             //关闭sqlSession对象
20             sqlSession.close();
21         }
22     }

结果:

没有报错,查询成功

Employee [id=1, last_Name=tom, email=tom@atgui, gender=0]

创建接口没有实现也行吗?

在以上的教程中我们只是创建了一个接口定义了一个空方法体的方法,直接在测试用例中通过getMapper(接口.class)获取EmployeeMapper对象。

这样也行吗?没有实现的接口也能实例化????

在测试类中

1 //通过EmployeeMapper接口获取mapper对象
2             EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
3             //查看mapper到底是什么
4             System.out.println(mapper.getClass());

输出结果:

class com.sun.proxy.$Proxy8

原来是代理对象。

MyBatis会为绑定sql映射配置文件的接口创建一个代理对象。通过代理对象调用方法。

可以看成配置文件xxxMapper.xml就是对接口的实现。

对于这个机制的原理我还不清楚,以后再深入学习。

总结

MyBatis中最重要的种配置文件

  1. 全局配置文件。配置了数据源,事务管理等全局信息

  2. sql映射配置文件。配置了每一个接口方法对应的sql语句

使用传统方法和使用接口方法都可以实现功能。但是推荐使用接口的方法。