MyBatis 简单案例:
@Test
public void test() throws IOException {
//1、获取 sqlSessionFactory
SqlSessionFactory sqlSessionFactory = getsqlSessionFactory();
//2、获取 sqlSession 实例,能直接执行已经映射的 SQL 语句
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
//3、获取接口的实现类对象
/**
* 推荐使用
* 会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
*/
EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
System.out.println(employeeMapper);
System.out.println(employeeMapper.getClass());
Employee emp = employeeMapper.getEmpById(1);
System.out.println(emp);
} finally {
sqlSession.close();
}
}
实现流程:
(1)获取 sqlSessionFactory 对象
解析文件的每一个信息保存在Configuration中,返回包含Configuration的DefaultSqlSessionFactory
注意:MappedStatement:代表一个增删改查的详细信息
(2)获取 sqlSession 对象
返回一个DefaultSqlSession对象,包含Executor 和Configuration;这一步会创建Executor对象。
(3)获取接口的代理对象(MapperProxy)
getMapper,使用 MapperProxyFactory 创建一个MapperProxy的代理对象
代理对象里面包含了,DefaultSqlSession(Executor)
(4)执行增删改查方法;
总结:
(1)根据配置文件(包括全局,SQL映射)初始化Configuration对象
(2)创建一个DefaultSQLSession对象,它里面包含了Configuration以及Executor(根据全局配置文件中的 defaultExecutorType创建出对应的Executor)
(3)DefaultSQLSession.getMapper(),拿到 Mapper接口对应的MapperProxy
(4)MapperProxy 里面有(DefaultSqlSession)
(5)执行增删改查方法:
① 调用 DefaultSqlSession 的增删改查,Executor;
② 会创建一个 StatementHandler 对象,(同时也创建出ParameterHandler和 ResultSetHandler)
③ 调用 StatementHandler 的预编译参数及设置参数值;使用ParameterHandler来给SQL设置参数;
④ 调用 StatementHandler 的增删改查方法;
⑤ ResultSetHandler 封装结果;
注意:四大对象每个创建的时候都会有一个 interceptorChain.pluginAll(parameterHandler);
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?
2020-09-13 Java 面向对象(四)类的成员 之 方法
2020-09-13 Java 面向对象(三)类的成员 之 属性
2020-09-13 Java 面向对象(二)类与对象
2020-09-13 Java 面向对象(一)面向对象思想