Mybatis-01-简介及入门

本文介绍了MyBatis框架的历史背景及其特点,详细讲解了MyBatis的运作流程和重要节点,包括配置文件、SqlSessionFactory接口、Executor接口以及MappedStatement类等核心概念。此外,还提供了MyBatis的简单使用教程,包括环境搭建、持久化类创建和映射文件配置等步骤。

一.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 configuration
PUBLIC "-//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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值