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中相应id的SQL语句,真正对DB进行操作的工作其实是由框架通过mapper中的SQL完成的。
- 所以,MyBatis框架就抛开了Dao的实现类,直接定位到映射文件mapper中的相应SQL语句,对DB进行操作。这种对Dao的实现方式称为Mapper的动态代理方式。
-
Mapper动态代理方式无需程序员实现Dao接口。接口是由MyBatis结合映射文件自动生成的动态代理实现的。