Mybatis从头到尾(一)--MyBatis简介及项目搭建

一、简介

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供其他缓存实现使用。

二、添加Maven依赖


    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

三、运行项目

3.1 准备数据库

  1. 本地创建一个mybatis的数据库;
  2. 创建一个country(国家)的表,添加3个字段“id”, "countryname"(名称), "countycode"(代码)。

3.2 Mybatis配置文件

使用XML形式进行配置,首先在src/main/resources下面创建mybatis-config.xml配置文件,然后输入如下内容。




    
        
    
    
        
    
    
        
            
                
            
            
                
                
                
                
            
        
    
    
        
    

3.3 创建对应实体和Mapper.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。




    

  • :XML的根元素,属性namespace定义了当前XML的命名空间。
  • id属性:定义了当前SELECT查询的唯一一个id。
  • resultType:定义了当前查询的返回值类型,此处就是指实体类Country,前面配置中提到的别名主要用于这里,如果没有设置别名,此处就需要写成resultType=”tk.mybatis.simple.model.Country”。
  • selectid,...:查询SQL语句。

3.4 配置Log4j 

在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过程中的详细信息,这个级别特别适合在开发时使用。

3.5 测试Mybatis核心代码

@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);
}

对上面这段代码做一个简单的说明,具体如下。

  1. 通过Resources工具类将mybatis-config.xml配置文件读入Reader。
  2. 再通过SqlSessionFactoryBuilder建造类使用Reader创建SqlSessionFactory工厂对象。在创建SqlSessionFactory对象的过程中,首先解析mybatis-config.xml配置文件,读取配置文件中的mappers配置后会读取全部的Mapper.xml进行具体方法的解析,在这些解析完成后,SqlSessionFactory就包含了所有的属性配置和执行SQL的信息。
  3. 使用时通过SqlSessionFactory工厂对象获取一个SqlSessiono。
  4. 通过SqlSession的selectList方法查找到CountryMapper.xml中id="selectAll"的方法,执行SQL查询。
  5. MyBatis底层使用JDBC执行SQL,获得查询结果集ResultSet后,根据resultType的配置将结果映射为Country类型的集合,返回查询结果。
  6. 这样就得到了最后的查询结果countryList,简单将结果输出到控制台。
  7. 最后一定不要忘记关闭SqlSession,否则会因为连接没有关闭导致数据库连接数过多,造成系统崩旗。

从日志中可以看到完整的SQL输出和结果输出,从日志对应的级别可以发现SQL、参数、结果数都是DEBUG级别,具体的查询结果列和数据都是TRACE级别。

 四、小结

在本章中,我们对MyBatis有了一个简单的认识,学习了如何创建一个使用Maven管理的项目,涉及了一些MyBatis的简单配置以及使用方法,井让一个简单的MyBatis项目跑了起来。在后面的章节中,我们会继续深入地学习MyBatis的各项配置以及各种常见的、复杂的用法。

@本系列文章参考《Mybatis入门到精通》-刘增辉-电子工业出版社-请支持正版图书,内容为自己整理,如有侵权请留言删除。

你可能感兴趣的:(MyBatis)