MyBtis快速入门

一、MyBatis 介绍

1.1 简单介绍

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

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO 映射成数据库中的记录。

GitHub 地址:https://github.com/mybatis/mybatis-3
官方文档:http://www.mybatis.org/mybatis-3/zh/getting-started.html

1.2 主要特点

  • 简单易学,没有任何第三方依赖,最简单安装+配置几个 SQL 映射文件即可进行开发。
  • 易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。官方文档提供中文翻译。
  • 灵活,MyBatis 不会对应用程序或者数据库的现有设计强加任何影响。
  • 解除 SQL 与程序代码的耦合,SQL 和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的 orm 字段关系映射。
  • 提供对象关系映射标签,支持对象关系组建维护。
  • 提供 XML 标签,支持编写动态 SQL。

以上内容主要来自百度百科,介绍的还挺详细的。

二、为什么要使用 MyBatis

2.1 传统的 JDBC 开发流程
MyBtis快速入门_第1张图片

在传统的 JDBC 开发项目的过程中,SQL 语句夹杂在代码块里,导致代码之间的耦合度高,硬编码现象普遍存在。这样就导致后期代码不易维护。

2.2Hibernate 开发流程
MyBtis快速入门_第2张图片

Hibernate 意在消除 SQL,所以在使用 Hibernate 的时候所有的执行流程都由框架处理,包括 SQL 语句的编写,这些操作对用户都是不可见的。这样做是很方便,简化了程序人员的开发,但是由于 SQL 语句由框架生成,这样就导致很难对 SQL 语句进行优化,造成数据库的性能下降,并且对于非常复杂的 SQL 语句,Hibernate 处理起来也不太容易。

当然 Hibernate 也提供了 HQL 技术,把编写 SQL 语句的任务交给程序开发人员,这样就导致学习成本变高。

2.3MyBatis 开发流程
MyBtis快速入门_第3张图片

MyBatis 把编写 SQL 的任务单独提取出来交由程序人员实现,从而使 SQL 与 Java 代码分开,不仅降低了代码之间的耦合,并且在进行 SQL 优化的时候也很容易。所以说 MyBatis 功能边界划分的很清晰,这也是为什么它那么受欢迎的原因。

三、编写 MyBatis 的 Hello World

3.1 开发流程

  1. 编写全局配置文件,用于创建SqlSessionFactory 对象和封装 SQL 映射文件,以及做一些其他设置。
  2. 在 SQL 映射文件内编写对应的 SQL 语句,以及封装规则。
  3. 将 SQL 映射文件映射在 XML 全局配置文件中。
  4. 编写代码。
        1)、创建SqlSessionFactory 对象。
        2)、通过SqlSessionFactory 对象获得SqlSession对象,用该对象来执行对数据库的操作。
        3)、使用 SQL 的唯一标识来告诉SqlSession对象来执行哪条 SQL 语句。
        4)、关闭SqlSession对象。

3.2 环境准备

博主使用的开发工具是 IDEA,并使用了 Maven 项目管理工具。

数据库表结构:

DROP TABLE IF EXISTS `t_employee`;
CREATE TABLE `t_employee` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) DEFAULT NULL,
  `gender` char(1) DEFAULT NULL,
  `email` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

pom.xml中添加如下依赖:

         
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
            <version>3.4.5version>
        dependency>
        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>5.1.39version>
        dependency>
        
        <dependency>
            <groupId>log4jgroupId>
            <artifactId>log4jartifactId>
            <version>1.2.17version>
        dependency>
        
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>4.12version>
        dependency>

项目工程目录:
MyBtis快速入门_第4张图片

3.3 搭建 Hello World

员工类Employee

public class Employee {
    private Integer id;
    private String username;
    private Character gender;
    private String email;

    /** 省略 get 、set 与 toString 方法 */
}

log4j.xml,只用来在控制台输出 SQL 日志,在这里没有其他的作用




<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" />
        layout>
    appender>
    <logger name="java.sql">
        <level value="debug" />
    logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    root>
log4j:configuration>

全局配置文件mybatis-config.xml




<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis-study"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            dataSource>
        environment>
    environments>
configuration>

SQL 映射文件EmployeeMapper.xml




<mapper namespace="com.jas.mybatis.helloworld.EmployeeMapper">
    <select id="getEmpById" resultType="com.jas.mybatis.helloworld.Employee">
        
        select * from t_employee where id = #{id}
    select>
mapper>

在全局配置文件mybatis-config.xml中注册 SQL 映射文件EmployeeMapper.xml

    <mappers>
        <mapper resource="EmployeeMapper.xml"/>
    mappers>

编写测试代码

public class MybtisTest {

    @Test
    public void helloWorld() throws Exception{
        String resource = "mybatis-config.xml";
        InputStream is = Resources.getResourceAsStream(resource);
        // 创建 SqlSessionFactory 对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        // 创建 SqlSession 对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 用 SqlSession 对象操作数据库
        // 第一个参数表示在 SQL 映射文件中的唯一标识,最好加上名称空间的名字
        // 第二个参数表示执行 SQL 时传入的参数
        Employee employee = sqlSession.selectOne("com.jas.mybatis.helloworld.EmployeeMapper.getEmpById", 1);
        // 关闭 sqlSession 对象
        sqlSession.close();
        System.out.println(employee);
    }

}

执行结果
这里写图片描述
到这里基于 MyBatis 的一个 Hello World 就算完成了。MyBatis 通过配置文件的形式将 SQL 语句封装起来,对外提供一个唯一标识调用。这样一来,SQL 语句的编写完全与代码分离开来,降低了代码之间的耦合度,在进行 SQL 语句优化的时候,只需要到对应 SQL 映射文件中进行优化即可。

四、总结

这篇博文主要介绍了 MyBatis 的概念,具有的相对优势,并通过一个简单的 Hello World 快速体验 MyBatis,希望可以为读者提供帮助。如果你想了解更多关于 MyBatis 的知识,请继续关注后续博文。

你可能感兴趣的:(MyBatis)