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 文件中加入以下依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Getter
@Setter
@ToString
public class User {

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

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

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

}

编写UserMapper 映射文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?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>

评论




Copyright 2019-2020 YANLIANG'S BLOG 载入天数...载入时分秒...