MyBatis 是一款优秀的基于 ORM 的半自动轻量级持久层框架。它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的POJO(Plain Old Java Objects,普通老式Java 对象)为数据库的记录。
MyBatis 原本是Apache 的一个开源项目IBatis,2010年6月这个项目由 Apache Software Foundation 迁移到了 Google Code,随后更名为
iBatis 一词来源于 “internet” 和 “abatis” 的组合,是一个基于Java的持久层框架。
上面简单介绍了一下 MyBatis ,下面我们来看下MyBatis 的优势
MyBatis 的优势&劣势
优势
我认为 MyBatis 有以下几点优势
- 简单易学 MyBatis 本身体积较小且没有第三方依赖,使用起来简单容易上手。源码也比较容易看懂
- 边界清晰 MyBatis 是一个半自动化的持久层框架,Sql 和 Java代码分开,功能边界较为清晰。一个专注业务,一个专注数据。
- 代码量相对较少 因为MyBatis核心是对JDBC代码的封装,避免开发人员写大量重复的代码。
劣势
- 依赖SQL 要求开发人员有一定的SQL 功底
- SQL 语句的编写工作量大(表多,表结构复杂时)
- 数据库移植性差(针对不同的数据库SQL 有差异)
MyBatis 基本应用
开发步骤
如果要在工程中使用MyBatis 基本流程如下:
- 在pom 文件中添加Mybatis 的依赖
- 创建表结构
- 编写表结构所对应的实体类 xxx.java
- 编写对应实体类的映射文件 xxxMapper.xml
- 编写MyBatis 的核心配置文件 SqlMapConfig.xml
- 编写测试类
下面我们通过使用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>