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 开发流程
这里写图片描述

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

2.2Hibernate 开发流程
这里写图片描述

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

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

2.3MyBatis 开发流程
这里写图片描述

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中添加如下依赖:

         <!-- MyBatis 的依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!-- 数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>
        <!-- log4j 的依赖,用于在控制台查看执行的 SQL 日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!-- junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

项目工程目录:
这里写图片描述

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 日志,在这里没有其他的作用

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<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

<?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>
    <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

<?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">
<!--
    namespace:名称空间
    id:唯一标识
    resultType:返回值类型,这里返回的是 Employee 对象
-->
<mapper namespace="com.jas.mybatis.helloworld.EmployeeMapper">
    <select id="getEmpById" resultType="com.jas.mybatis.helloworld.Employee">
        <!-- #{id} 表示要传进来的参数,类似于 JDBC SQL 语句中的 '?' -->
        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 的知识,请继续关注后续博文。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值