MyBatis 世界上流行最广泛的SQL 映射框架,由Clinton Begin 在2002 年创建,iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。其后,捐献给了Apache基金会,成立了iBatis 项目。2010 年5 月,将代码库迁致Google Code,并更名为MyBatis。(导包名:ibatis)
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs映射成数据库中的记录。(类似Hibernate)
问: org.apache.ibatis 和 org.mybatis 路径的日志都打印什么?
我们项目里是这么配的:
<!-- logback -->
<logger name="org.apache.ibatis" additivity="false" level="ERROR">
<appender-ref ref="LOGGER-INFO" />
</logger>
<logger name="org.mybatis" additivity="false" level="ERROR">
<appender-ref ref="LOGGER-INFO" />
</logger>
对比一下:
org.apache.ibatis 在 mybatis 包
org.mybatis 在 mybatis-spring 包
- ibatis 是单独的持久层, mybatis在ibatis基础上升级了一下,是半自动化的持久层, hibernate 是全自动化的持久层.
- ibatis 封装了绝大多数的 JDBC 样板代码,使得开发者只需关注 SQL 本身,而不需要花费精力去处理例如注册驱动,创建 Connection,以及确保关闭 Connection 这样繁杂的代码.
- mybatis在很多地方都借助于 JDK 的泛型和注解特性进行了简化,反射很强大.
- mybatis有很多优点: 对象和数据库orm字段映射, sql和代码分离,写在xml里统一管理, 支持动态sql. 使用的时候只需要配置 SqlSessionTemplate,sqlSessionFactory,MapperScannerConfigurer, 然后写接口和映射文件就可以了.
- 在 iBatis 中,namespace 不是必需的,且它的存在没有实际的意义。在 MyBatis 中,namespace 终于派上用场了,它使得映射文件与接口绑定变得非常自然.
- ibatis麻烦一些,原生写法(现在都不用了,就连mybatis各种配置被mybatis-spring-boot-starter集成起来,写法更简便了,还有阿里的durid封装了数据库连接池、插件化扩展框架和SQL解析器,还支持页面监控sql执行情况,技术的迭代不断解放劳动力):
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
try {
Employee employee = new Employee(null, "name", "1", "123@qq.com");
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
mapper.addEmp(employee);
session.commit();
} finally {
session.close();
}
所以
基本都是通过配置日志来实现的,比如配置我们最常用的 log4j.properties 或者 logback-spring.xml 来实现.
sql的日志由org.apache.ibatis 路径打印出来,
org.mybatisSql打印的是上层操作SessionTemplate等的日志.