MyBatis的前身是iBATIS,是ClintonBegin在2001年发起的一个开源项目,最初侧重于密码软件的开发,后来发展成为一款基于Java的持久层框架。2004年,Clinton将iBATIS的名字和源码捐赠给了Apache软件基金会,接下来的6年中,开源软件世界发生了巨大的变化,一切开发实践、基础设施、许可,甚至数据库技术都彻底改变了。2010年,核心开发团队决定离开Apache软件基金会,井且将iBATIS改名为MyBatis。
MyBatis是一款优秀的支持自定义SQL查询、存储过程和高级映射的持久层框架,消除了几乎所有的JDBC代码和参数的手动设置以及结果集的检索。MyBatis可以使用XML或注解进行配置和映射,MyBatis通过将参数映射到配置的SQL形成最终执行的SQL语句,最后将执行SQL的结果映射成Java对象返回。
与其他的ORM(对象关系映射)框架不同,MyBatis并没有将Java对象与数据库表关联起来,而是将Java方法与SQL语句关联。MyBatis允许用户充分利用数据库的各种功能,例如存储过程、视图、各种复杂的查询以及某数据库的专有特性。如果要对遗留数据库、不规范的数据库进行操作,或者要完全控制SQL的执行,MyBatis将会是一个不错的选择。
与JDBC相比,MyBatis简化了相关代码,SQL语句在一行代码中就能执行。MyBatis提供了一个映射引擎,声明式地将SQL语句的执行结果与对象树映射起来。通过使用一种内建的类XML表达式语言,SQL语句可以被动态生成。MyBatis支持声明式数据缓存(declarativedatacaching)。当一条SQL语句被标记为“可缓存”后,首次执行它时从数据库获取的所有数据会被存储在高速缓存中,后面再执行这条语句时就会从高速缓存中读取结果,而不是再次命中数据库。MyBatis提供了默认情况下基于JavaHashMap的缓存实现,以及用于与OSCache、Ehcache、Hazeleast和Memcached连接的默认连接器,同时还提供了API供其他缓存实现使用。
junit
junit
4.12
test
org.mybatis
mybatis
3.5.2
mysql
mysql-connector-java
5.1.38
org.slf4j
slf4j-api
1.7.12
org.slf4j
slf4j-log4j12
1.7.12
log4j
log4j
1.2.17
使用XML形式进行配置,首先在src/main/resources下面创建mybatis-config.xml配置文件,然后输入如下内容。
MyBatis是一个结果映射框架,这里创建的实体类实际上是一个数据值对象(DataValueObject),在实际应用中,一个表一般会对应一个实体,用于INSERT、UPDATE、DELETE和简单的SELECT操作,所以姑且称这个简单的对象为实体类。
关于Mapper的命名方式:在MyBatis中,根据MyBatis官方的习惯,一般用Mapper作为XML和接口类名的后缀,这里的Mapper和我们常用的DAO后缀类似,只是一种习惯而已,本书中全部使用Mapper后缀。通常称XML为Mapper.xml文件,称接口为Mapper接口,在实际应用中可以根据自己的需要来定义命名方式。
创建一个Country的Java Bean,包括属性id,countryname,countrycode。
在src/main/resources中添加log4j.properties配置文件,输入如下内容。
#全局配置
log4j.rootLogger=ERROR,stdout
#MyBatis日志配直
log4j.logger.tk.mybatis.simple.mapper=TRACE
#控制台输出配置
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
用过Log4j日志组件的人可能都会知道,配置中的log4j.logger.tk.mybatis.simple.mapper对应的是tk.mybatis.simple.mapper包,但是在这个例子中,Java目录下并没有这个包名,只在资源目录下有mapper目录。
在MyBatis的日志实现中,所谓的包名实际上是XML配直中的口amespace属性值的一部分。后面章节中介绍结合接口使用的相关内容时,由于namespace属性值必须和接口全限定类名相同,因此才会真正对应到Java中的包。当使用纯注解方式时,使用的就是纯粹的包名。
MyBatis日志的最低级别是TRACE,在这个日志级别下,MyBatis会输出执行SQL过程中的详细信息,这个级别特别适合在开发时使用。
@Test
public void testSelectAll() {
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
List countryList = sqlSession.selectList("selectAll");
System.out.println(countryList);
}
对上面这段代码做一个简单的说明,具体如下。
从日志中可以看到完整的SQL输出和结果输出,从日志对应的级别可以发现SQL、参数、结果数都是DEBUG级别,具体的查询结果列和数据都是TRACE级别。
在本章中,我们对MyBatis有了一个简单的认识,学习了如何创建一个使用Maven管理的项目,涉及了一些MyBatis的简单配置以及使用方法,井让一个简单的MyBatis项目跑了起来。在后面的章节中,我们会继续深入地学习MyBatis的各项配置以及各种常见的、复杂的用法。
@本系列文章参考《Mybatis入门到精通》-刘增辉-电子工业出版社-请支持正版图书,内容为自己整理,如有侵权请留言删除。