02-Mybatis-03-Mapper动态代理

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结合映射文件自动生成的动态代理实现的。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值