Mybatis框架使用接口式编程(二)

上一篇写过mybatis的古老用法,在这:Mybatis框架的介绍与使用(一)看看现在大家都怎么用mybatis!

一、为什么要使用接口式编程?

理由如下图:
Mybatis框架使用接口式编程(二)_第1张图片

二、定义接口

接口中可以编写许多和增删改查的方法,这里是以员工的id号来查询员工,传入一个Interger类型参数。返回值为什么是Employee类型?

public interface EmployeeMapper {
	public Employee getEmployeeById(Integer id);
}
<?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.hr.dao.EmployeeMapper">
<select id="getEmployeeById" resultType="com.hr.bean.Employee">
select * from employee where id = #{id}
</select>
</mapper>

因为在sql映射配置文件中select标签的id(唯一标识)与接口中的方法(getEmployeeById)绑定了,SqlSession对象调用getMapper()方法会返回一个接口对象(mapper),这个接口对象实际上是一个代理类对象,使用该对象调用接口中的方法,就可以把我们规定的Interger类型的sql参数传进去,这样就可以实现人为控制参数类型,而不至于是Object类型,查询结束后需要返回一个Employee对象才能获取到查询的数据,所以接口中getEmployeeById()方法的返回值类型必须是Employee。

@Test
void test1() throws IOException {
	String resource = "mybatis_conf.xml";
	InputStream inputStream = Resources.getResourceAsStream(resource);
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	SqlSession openSession = sqlSessionFactory.openSession();
	try {
		EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
		Employee employee = mapper.getEmployeeById(1);
		System.out.println(employee);
		System.out.println(mapper.getClass());
	} catch (Exception e) {
		e.printStackTrace();
	}finally {
		openSession.close();
	}
}

这里需要注意两个绑定:

  • 接口和sql配置文件绑定:会为接口自动的创建一个代理对象,代理对象去执行增删改查方法。namespace就不能随意写了,而是要写需要绑定的接口。
  • select标签中的id(唯一标识)和接口中的方法绑定:代理类对象就可以拿到我们接口中传进去的参数,sql编写基本完成,剩下的都交给代理累对象完成。
    Mybatis框架使用接口式编程(二)_第2张图片
    SqlSession可以直接调用方法的id进行数据库操作,但是一般还是推荐使用SqlSession获取到Dao接口的代理类,执行代理对象的方法,可以更安全的进行类型检查操作。

总结:

  1. select标签中的id标识就是告诉SqlSession对象,sql参数在在哪里,可以直接传递,也可以通过接口传递。
  2. SqlSession代表和数据库的一次会话;用完必须关闭。
  3. SqlSession和connection一样都是线程不安全,不能共享该对象。
  4. 我们定义的EmployeeMapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。(将接口和xml进行绑定) EmployeeMapper mapper = sqlSession getMapper(EmployeeMapper.class);
  5. 两个重要的配置文件:
    mybatis的全局配置文件,包含数据库连接池信息,事务管理器信息等,系统运行环境信息。(不是一定需要的,还可以通过注解方式)。
    sq1映射文件:保存了每一个sq1语句的映射信息,这个文件是一定要的,把sql语句抽取出来,给开发人员编写。

你可能感兴趣的:(JAVA)