✧ THE STORY BEGINS HERE
68
次阅读
前言
-
在讲解动态代理之前,我们可以先在mybatis环境下比不适用动态代理和使用动态代理的区别,以便我们更加深刻的理解动态代理到底为我们做了些什么.
-
dao层 StudentDao
package com.chuangmei.dao; public interface StudentDao { //查询 List<Student> selectAllStudents(); }
不使用mapper动态代理
-
在不使用mapper动态代理的情况下我们需要自己实现dao的接口,并且手动调用SqlSession中的方法完成sql语句的执行,如果是增删改的操作还需要手动提交事务
package com.chuangmei.dao; public class StudentDaoImpl implements IStudentDao { private SqlSession sqlSession; @Override public List<Student> selectAllStudents() { List<Student> students = null; try { //调用工具类获取sqlsession对象 sqlSession = SqlSession_Util.getSqlSession(); students = sqlSession.selectList("selectAllStudents"); //sqlSession.commit(); 查询可以不用提交 } finally { if (sqlSession!=null) { sqlSession.close(); //关闭事务 } } return students; } }
dao层使用Mybatis的动态代理
-
mapper动态代理的条件:
-
1. Dao层的方法名需要与mapper.xml的id相同
-
2. mapper.xml中的namespace需要是Dao接口的全限定类名
-
3. 接口传入参数需要与parameterType一致
-
4. 接口返回类型需要与resultType一致
-
-
使用动态代理的话Dao层的接口声明完成以后只需要在使用的时候通过SqlSession对象的getMapper方法获取对应Dao接口的代理对象,关键代码如下:
//3.获取SqlSession对象 SqlSession session = SqlSession_Util.getSqlSession(); //4.获取dao的代理对象 StudentDao dao = session.getMapper(StudentDao.class); //5.执行查询所有的方法 List<Student> students = dao.selectAllStudents();
动态代理底层原理
-
我也不是很清楚,以后弄明白了再来补充
— END —
感谢你,把时间留给这些文字。
文字之外,与你聊聊。
这里还很安静。
来留下第一句问候吧。