MyBatis使用篇(一)—— 初始MyBatis

文章目录

  • 1、MyBatis介绍
  • 2、MyBatis整体架构
    • 2.1 数据源配置文件
    • 2.2 SQL映射配置文件
    • 2.3 会话工厂与会话
  • 3、MyBatis运行流程

1、MyBatis介绍

  MyBatis是Apache的一个Java开源项目,原名iBatis。MyBatis是一款支持动态SQL语句的持久层框架,支持目的是让开发人员将精力集中在SQL语句上。

  MyBatis可以将SQL语句配置在XML文件中,这避免了JDBC在Java类中添加SQL语句的硬编码问题;通过MyBatis提供的输入参数映射方式,将参数自由灵活地配置在SQL语句配置文件中,解决了JDBC中参数在Java类中手工配置问题;通过MyBatis的输出映射机制,将结果集的检索自动映射成相应的Java对象,避免了JDBC中对结果集的手工检索;同时MyBatis还可以创建自己的数据库连接池,使用XML配置文件的形式,对数据库连接数据进行管理,避免了JDBC的数据库连接参数的硬编码问题。

  综上所述,MyBatis的特点是,采用配置文件动态管理SQL语句,并含有输入映射、输出映射机制以及数据库连接池配置的持久层框架。

2、MyBatis整体架构

  MyBatis整体的构造由数据源配置文件、SQL映射配置文件、会话工厂、会话、执行器以及底层封装对象组成。接下来对这些核心对象进行逐一讲解。

2.1 数据源配置文件

  MyBatis框架对于数据库连接的配置信息,采用了配置“数据库连接池”的形式。所谓“数据库连接池”(又叫做“数据源”)就是让数据库的配置信息从外部的某种配置文件中读取,然后由一个独立处理数据库连接的程序来和数据库进行交互。这样一来,应用程序本身不必关系数据库的配置信息,数据库的配置交由独立的模块管理和配置。

  在MyBatis中,数据库的数据源是配置在SqlMapConfig.xml(文件名可以更改)配置文件中的, 其中配置了数据库驱动、数据库连接地址、数据库用户名和密码、事物管理等参数,如果对数据库连接池有性能的要求,还可以配置连接池的连接数和空闲时间等详细参数。

  在项目中,SqlMapConfig.xml配置文件的大致内容如下(最初级的配置):



<configuration>
	
	<environments default="onlineEM">
		<environment id="onlineEM">
			
			<transactionManager type="JDBC"/>
			
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			dataSource>
		environment>				
configuration>

  值得一提的是,在后期与Spring MVC框架的整合中,将会使用Spring MVC建立数据库连接池,此时就不用为MyBatis单独配置数据库连接池了。

  注意,不同的数据库拥有不同的数据库连接驱动,这里需要根据需要配置连接参数。

2.2 SQL映射配置文件

  在传统的JDBC开发模式中,SQL语句是硬编码在Java代码中的。而MyBatis框架将SQL配置在独立的配置文件Mapper.xml(文件名可更改)中,简称“Mapper配置文件”。在这个配置文件中可以配置任何类型的SQL语句,包括select、update、delete和insert语句。

  对于SQL语句执行所需要的参数,以及查询语句返回的结果集对象,都可以在Mapper.xml配置文件中配置。

  在输入参数方面,MyBatis框架会根据配置文件中的参数配置,将组装参数的Java对象或Map对象中相关字段与Mapper.xml中的参数配置做匹配,将相关数据绑定在需要执行的SQL语句上;

  在查询结果输出结果时,会根据Mapper.xml中配置的结果集信息,将从数据库取出的数据字段,一一映射到相应的Java对象或Map对象中。

  也就是说,Mapper.xml配置文件完成了对SQL语句以及输入输出参数的映射配置。

  在项目中,Mapper.xml配置文件的大致内容如下(部分配置):



<mapper namespace="test">
	<select id="findUserById" parameterType="int" resultType="cn.com.mybatis.model.User">
		SELECT * FROM USER WHERE id=#{id}
	select>
mapper>

  在上述配置信息中,可以在mapper标签对中配置很多SQL语句。其中的select标签对中包含了一段SQL查询语句,其中的parameterType指定了输入参数的类型,而resultType指定了输出结果映射的Java对象类型。可以看到其中的resultType的参数信息是一个JavaBean(Java基本信息分装类),也就是说,这段select的结果参数配置表示将单条记录映射成一个Java对象。

  Mapper.xml的文件路径,一般会配置在数据源配置文件SqlMapConfig.xml中,其会随着数据库配置参数一起被加载,即在SqlMapConfig.xml中配置如下代码:


<mappers>
	<mapper resource="com/ccff/dao/UserMapper.xml"/>
	<mapper resource="com/ccff/dao/GoodMapper.xml"/>
mappers>

  SQL映射配置文件在MyBatis框架中是十分重要的,使用MyBatis框架的开发人员,每天面对罪过的就是各种Mapper.xml配置文件。所以,后期将会紧紧围绕着SQL映射配置文件学习。

  MyBatis的核心就是基于SQL配置的Mapper映射文件,所有数据库的操作都会基于该映射文件和配置的SQL语句。

2.3 会话工厂与会话

  准备好了数据库连接池配置文件SqlMapConfig.xml,以及SQL映射配置文件Mapper.xml之后,需要相关的程序来读取并加载这些配置文件。而MyBatis中处理这些配置信息的核心对象就是“会话工厂”与“会话”。

  在MyBatis中,“会话工厂”即是SqlSessionFactory类。SqlSessionFactory类会根据Resource资源信息加载对象,获取开发人员在项目中配置的数据库连接池配置文件SqlMapConfig.xml的信息,从而产生一种可以与数据库交互的会话实例类——SqlSession。就好像一个卫星工厂一样,给厂商一个卫星的详细发射波长规则配置说明书,他们就能生产出能发射该种类型波长的卫星产品。SqlSessionFactory可以根据数据库配置文件信息产生出可以连接数据库并与其交互的SqlSession会话实例类。

  前面提到过,SQL映射配置文件Mapper.xml的路径是配置在SqlMapConfig.xml配置文件中的,所以SqlSessionFactory类同时也加载了SQL语句的配置信息。通过其产生的SqlSession会话实例类,可以依照Mapper配置文件中的SQL配置,对数据库执行增删改查的操作。

3、MyBatis运行流程

  MyBatis的整个运行流程,也是紧紧围绕着数据库连接池配置文件SqlMapConfig.xml以及SQL映射配置文件Mapper.xml而开展的。

  首先SqlSessionFactory会话工厂会通过Resource资源信息加载对象获取SqlMapConfig.xml配置文件信息,然后产生可以与数据库进行交互的会话实例类SqlSession。会话实例类SqlSession可以根据Mapper配置文件中的SQL配置,去执行相应的增删改查操作。而在SqlSession类内部,是通过执行器Executor(分为基本执行器和缓存执行器)对数据库进行操作的。执行器Executor与数据库交互,依靠的是底层封装对象Mappered Statement,它封装成了从Mapper文件中读取的信息(包括SQL语句、输入参数、输出结果类型)。通过执行器Executor与底层封装对象Mappered Statement的结合,MyBatis就实现了与数据进行交互的功能。

  MyBatis运行流程图如下所示,理解MyBatis的运行流程结构,对接下来学习MyBatis很有帮助。在接下来的学习过程中,可以反复观察MyBatis的运行流程结构图,了解每一个组件在整个架构中扮演的角色。
MyBatis使用篇(一)—— 初始MyBatis_第1张图片

你可能感兴趣的:(Java,数据库,MySql)