MyBatis 是一款优秀的基于 ORM 的半自动轻量级持久层框架。它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的POJO(Plain Old Java Objects,普通老式Java 对象)为数据库的记录。

MyBatis 原本是Apache 的一个开源项目IBatis,2010年6月这个项目由 Apache Software Foundation 迁移到了 Google Code,随后更名为 MyBatis

iBatis 一词来源于 “internet” 和 “abatis” 的组合,是一个基于Java的持久层框架。

上面简单介绍了一下 MyBatis ,下面我们来看下MyBatis 的优势

MyBatis 的优势&劣势

优势

我认为 MyBatis 有以下几点优势

  • 简单易学 MyBatis 本身体积较小且没有第三方依赖,使用起来简单容易上手。源码也比较容易看懂
  • 边界清晰 MyBatis 是一个半自动化的持久层框架,Sql 和 Java代码分开,功能边界较为清晰。一个专注业务,一个专注数据。
  • 代码量相对较少 因为MyBatis核心是对JDBC代码的封装,避免开发人员写大量重复的代码。

劣势

  • 依赖SQL 要求开发人员有一定的SQL 功底
  • SQL 语句的编写工作量大(表多,表结构复杂时)
  • 数据库移植性差(针对不同的数据库SQL 有差异)

MyBatis 基本应用

开发步骤

如果要在工程中使用MyBatis 基本流程如下:

  1. 在pom 文件中添加Mybatis 的依赖
  2. 创建表结构
  3. 编写表结构所对应的实体类 xxx.java
  4. 编写对应实体类的映射文件 xxxMapper.xml
  5. 编写MyBatis 的核心配置文件 SqlMapConfig.xml
  6. 编写测试类

下面我们通过使用MyBatis 对一个User 实体进行CRUD 操作。

引入相关依赖

在工程所在的 pom 文件中加入以下依赖

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencies>
        <!--mybatis 依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <!--mysql 依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
            <scope>runtime</scope>
        </dependency>
        <!-- 单元测试依赖 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

创建User 表结构

在数据库中建立一个简单的User 表结构

字段名 字段类型 长度
id int 11
username varchar 50
password varchar 50

编写User 实体

这里为了减少代码量,引入了 lombok

@Getter
@Setter
@ToString
public class User {

    /** 用户Id */
    private int id;

    /** 用户名 */
    private String username;

    /** 用户密码 */
    private String password;

}

编写UserMapper 映射文件

<?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.yanliang.mockTest.dao.IUserDao">

    <!-- 查询所有 -->
    <select id="selectList" resultType="com.yanliang.mockTest.User">
        select * from user
    </select>

    <!-- 查询单个对象 -->
    <select id="selectOne" resultType="com.yanliang.mockTest.User" paramterType="com.yanliang.mockTest.User">
        select * from user where id = #{id} and username = #{username}
    </select>

    <!--    插入-->
    <insert id="insert" parameterType="com.yanliang.mockTest.User">
        insert into user
        values ( #{id}, #{username} )
    </insert>

    <!--    删除-->
    <delete id="delete" parameterType="java.lang.Integer">
        delete from user where id = #{id}
    </delete>

    <!--    更新-->
    <update id="update" parameterType="com.yanliang.mockTest.User">
        update user set username = #{username}
        where id = #{id}
    </update>

</mapper>

评论