mybatis总结
mybatis
传统jdbc问题
-
数据库连接创建,释放频繁,造成系统资源浪费
-
sql语句硬编码
-
sql查询条件硬编码
-
结果集解析硬编码
mybatis对jdbc问题的解决方案:
-
使用连接池管理数据库链接(在SqlMapConfig.xml里面配置数据库连接池)
-
sql语句配置在xxxMapper.xml里面
-
mybatis自动将java对象映射到sql语句(通过statement中的parameterType定义传入的参数类型)
-
mybatis自动将返回结果映射到java对象(通过statement中的resultType定义传入的参数类型)
mybatis的架构分层
-
API接口层:提供给外部使用的api,接收调用请求并调用数据处理层
-
数据处理层:负责具体的sql查找,sql解析,sql执行和映射结果的处理,根据调用请求完成一次数据库操作
-
基础支持层: 负责最基础的功能支撑,包括连接管理,事务管理、配置加载和缓存处理,为上层的数据处理层提供最基础的支撑
mybatis的简单使用例子
- 通过配置文件得到SqlSessionFactory
- 通过SqlSessionFactory获取SqlSession
- 通过SqlSession进行crud和事务操作
- 关闭SqlSession
public class App {
public static void main(String[] args) {
String resource = "mybatis‐config.xml";
Reader reader;
try {
//将XML配置文件构建为Configuration配置类
reader = Resources.getResourceAsReader(resource);
// 通过加载配置文件流构建一个SqlSessionFactory DefaultSqlSessionFactory
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
// 数据源 执行器 DefaultSqlSession
SqlSession session = sqlMapper.openSession();
try {
// 执行查询 底层执行jdbc
User user = (User)session.selectOne("com.tuling.mapper.selectById", 1);
UserMapper mapper = session.getMapper(UserMapper.class);
System.out.println(mapper.getClass());
User user = mapper.selectById(1L);
System.out.println(user.getUserName());
} catch (Exception e) {
e.printStackTrace();
}finally {
session.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
mybatis的相关问题
- 请介绍mabatis的sql语句解析原理
- 请介绍mabatis缓存的原理
- 请介绍mybatis插件的原理
mybatis设计模式总结
链接: link
mybatis的二级缓存原理分析
链接: link
mybatis的设计模式总结
链接: link