Mybatis-01-简介及入门

来源:互联网 发布:中国网络第一主播 编辑:程序博客网 时间:2024/06/10 17:10

一.Mybatis简介

1.MyBatis 框架的历史

MyBatis 原本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月MyBatis 迁移到Github

2.MyBatis框架的特点

MyBatis是一个优秀的持久层框架,它对JDBC的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等JDBC繁杂的过程代码Mybatis通过xml或注解的方式配置各种statement(statement、preparedStatemnt、CallableStatement),并通过java对象和statement中的SQL 进行映射生成最终交给数据库执行的SQL 语句,最后由mybatis框架执行SQL 并将结果映射成java对象并返回

二.Mybatis框架运作流程图

这里写图片描述
这里写图片描述

三.Mybatis框架执行流程中的重要节点

1.配置文件

SqlMapConfig.xml:Mybatis的全局配置文件,配置了Mybatis的运行环境等信息
mapper.xml:SQL映射文件,文件中配置了操作数据库的SQL语句,此文件需要在SqlMapConfig.xml中加载。

2.SqlSessionFactory接口

通过Mybatis环境等配置信息构造SqlSessionFactory,即会话工厂,由会话工厂创建SqlSession即会话,操作数据库通过SqlSession进行。

3.Executor接口

Mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

4.MappedStatement类

MappedStatement类简介

MappedStatement是Mybatis一个底层封装类,它包装了Mybatis配置信息及SQL映射信息等。mapper.xml文件中一个SQL对应一个MappedStatement对象,SQL的id即是Mappedstatement对象的id

MappedStatement类功能作用

1.MappedStatement类对操作数据库的SQL语句的输入参数进行定义,包括HashMap、基本类型、pojo、Executor等种类的参数,通过MappedStatement在执行SQL前将输入的参数对象映射至SQL中,这个过程可以类比JDBC编程中使用preparedStatement对SQL语句设置参数
2.MappedStatement类对SQL语句执行数据库后的输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过MappedStatement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于JDBC编程中对结果的解析处理过程

四.Mybatis的简单使用

1.搭建环境

1.创建一个maven项目,在pom.xml文件中加入对mybatis的依赖

    <properties>        <mybatis.version>3.2.8</mybatis.version>        <mybatis.spring.version>1.2.2</mybatis.spring.version>        <mybatis.paginator.version>1.2.15</mybatis.paginator.version>    </properties>    <dependencies>        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis</artifactId>            <version>${mybatis.version}</version>        </dependency>        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis-spring</artifactId>            <version>${mybatis.spring.version}</version>        </dependency>        <dependency>            <groupId>com.github.miemiedev</groupId>            <artifactId>mybatis-paginator</artifactId>            <version>${mybatis.paginator.version}</version>        </dependency>   </dependencies>     

再加入数据库mysql和数据库链接池的依赖包

        <mysql.version>5.1.32</mysql.version>        <druid.version>1.0.9</druid.version>        <!-- MySql -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>${mysql.version}</version>        </dependency>        <dependency>            <groupId>com.github.pagehelper</groupId>            <artifactId>pagehelper</artifactId>            <version>${pagehelper.version}</version>        </dependency>        <!-- 连接池 -->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>${druid.version}</version>        </dependency>

2.创建一个数据库并准备一些数据

这里写图片描述

2.创建并配置项目的配置文件

这里写图片描述
项目结构如图所示

在resource目录下分别创建日志文件log4j.properties,写有数据库连接信息的文件jdbc.properties,和Mybatis的全局配置文件sqlMapConfig.xml

sqlMapConfig.xml全局配置文件的配置:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <!-- 1.将jdbc连接数据库的相关配置加载进配置文件    -->    <properties resource="jdbc.properties"/>    <!-- 2.设置Mybatis的运行环境    -->    <environments default="development">        <environment id="development">            <!-- 2.1使用jdbc事务管理 -->            <transactionManager type="JDBC" />            <!-- 2.2配置数据库连接池 -->            <dataSource type="POOLED">                <property name="driver" value="${jdbc.driver}" />                <property name="url"                    value="jdbc:mysql://localhost:3306/babasport?characterEncoding=utf-8" />                <property name="username" value="root" />                <property name="password" value="***" />            </dataSource>        </environment>    </environments>    <!-- 3.配置Mybatis映射文件的位置 -->    <mappers>        <mapper resource="BbsEmployeeMapper.xml"></mapper>    </mappers></configuration>

关于映射文件的位置信息:resource属性指的是项目的根目录,我的BbsEmployeeMapper.xml映射文件没有放在根目录下,而是放在com.sandking.mybatis.mapper包下,所以我将映射文件所在的目录设置为resource类型的目录
这里写图片描述

设置目录为resource类型的目录(即目录下的文件直接放在根目录下)

这里写图片描述

3.创建持久化类(BbsEmployee)和映射文件(BbsEmployeeMapper.xml)

3.1 持久化类BbsEmployee(省略了get,set方法)

public class BbsEmployee {    private String username;    private String password;    private String degree;    private String email;    private Boolean gender;    private String imgUrl;    private String phone;    private String realName;    private String school;    private Boolean isDel;    ......

3.2 配置映射文件

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><!-- 使用文件的全路径名作为命名空间--><mapper namespace="com.sandking.mybatis.mapper.BbsEmployeeMapper" >  <!-- 设置查询配置-->  <select id="queryTest" parameterType="String"          resultType="com.sandking.mybatis.pojo.BbsEmployee">    SELECT * FROM `bbs_employee` WHERE username  = #{username}  </select></mapper>

1.mapper.xml文件中一个SQL对应一个MappedStatement对象,SQL的id即是Mappedstatement对象的id
2.parameterType属性用来声明输入参数的类型
3.resultTypey属性用来声明输出结果的类型,如果是持久化类,则填写其全路径
4.#{ }是输入参数的占位符,相当于JDBC中的PreparedStatement类编程中的 ? 占位符

4.编写测试程序

public class BbsDao {    private SqlSessionFactory sqlSessionFactory = null;    //加载配置文件,在对数据库的查询操作执行前执行    @Before    public void init() throws IOException {        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();        InputStream inputStream = org.apache.ibatis.io.Resources.getResourceAsStream("SqlMapConfig.xml");        this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);    }    @Test    public void testQuery(){        SqlSession sqlSession = sqlSessionFactory.openSession();        //selectOne方法查询一条数据        //1.传入sql语句对应的id        //2.传入查询参数        BbsEmployee bbsEmployee = sqlSession.selectOne("queryTest","admin");        System.out.println(bbsEmployee.getUsername);        sqlSession.close();    }}

查询结果:

这里写图片描述

从控制台可以看到Mybatis的发出的SQL语句,查询参数,查询结果数量(Total:1)