欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

02-Mybatis-03-Mapper动态代理

程序员文章站 2022-06-17 15:26:15
...

1. 更改映射的命名空间

<mapper namespace="com.huahua.dao.IStudentDao">

两点要求:

  • 1.1 首先,保证映射文件中的namespace和接口的限定名称(com.huahua.dao.IStudentDao)相同;
  • 1.2 其次,保证映射文件sql语句对应的id和接口中的方法名相同。

2. 通过getMapper()获取配置接口

	private IStudentDao dao;
	private SqlSession sqlSession;

	@Before
	public void before() {
		sqlSession = MyBatisUtils.getSqlSession();
		dao = sqlSession.getMapper(IStudentDao.class);
	}

3. 注意:

  • 因为是从接口中获取到的方法,所以,你在运行sql增删改时,事务并没有提交,需要手动添加sqlSession.commit()
	@Test
	public void testInsert() {
		Student student = new Student("张三",23,93.5);
		System.out.println("插入前:student = " + student);
		dao.insertStudent(student);
		System.out.println("插入后:student = " + student);
		sqlSession.commit();
	}
  • 事务提交后需要关闭,或者如果事务发生异常,或者可能需要回滚。此时,需要在程序中添加
	@After
	public void after() {
		if(sqlSession != null) {
			sqlSession.close();
		}
	}

4. 为什么叫Mapper动态代理

  • 因为在我们自定义Dao接口实现类时发现一个问题:Dao的实现类其实并没有干什么实质性的工作,它仅仅就是通过SqlSession的相关API定位到映射文件mapper中相应idSQL语句,真正对DB进行操作的工作其实是由框架通过mapper中的SQL完成的。
  • 所以,MyBatis框架就抛开了Dao的实现类,直接定位到映射文件mapper中的相应SQL语句,对DB进行操作。这种对Dao的实现方式称为Mapper的动态代理方式。
  • Mapper动态代理方式无需程序员实现Dao接口。接口是由MyBatis结合映射文件自动生成的动态代理实现的。
    02-Mybatis-03-Mapper动态代理
相关标签: SSM