MyBatis:简介与基础使用指南

引言

欢迎来到 MyBatis 的简介与基础使用指南!MyBatis 是一个备受欢迎的 Java 持久层框架,它在 Java 应用程序中实现了简单、灵活、高效的数据库访问。本文将引导您进入 MyBatis 的世界,从了解其基本概念到实际应用中的使用,帮助您轻松入门并开始使用这个强大的框架。

什么是 Mybatis

MyBatis(前身为 iBatis)是一个用于 Java 编程语言的持久层框架。它提供了一种将数据库操作与 Java 对象之间的映射关系定义在 XML 文件或注解中的方式,以简化数据库访问和操作。MyBatis 允许开发者通过配置文件或注解来定义 SQL 语句,并将查询结果映射到 Java 对象,从而实现了对象关系映射(ORM)。这种简洁而直观的方法使得开发者能够更轻松地与数据库交互,而无需编写复杂的 SQL 语句。

MyBatis 的历史与发展

MyBatis 最早由 Clinton Begin 创建,最初称为 iBATIS。它在 2002 年首次发布,随后迅速成为 Java 开发社区中备受欢迎的持久层框架。在 2010 年,iBATIS 的维护权交给了 Apache 软件基金会,随后框架改名为 MyBatis。自那以后,MyBatis 经过不断的改进和发展,已经成为了 Java 持久层框架中的佼佼者。

Mybatis 在 Java 开发的重要性

MyBatis 在 Java 开发中具有重要性,它为 Java 应用程序与数据库之间的数据访问提供了强大的工具和解决方案。Mybatis 在 Java 主要有以下几点重要性:

  1. 简化数据库访问:MyBatis 允许开发者将数据库查询和操作的细节抽象到配置文件中,使得数据库访问更加简单和直观。开发者不需要编写繁琐的 JDBC 代码,而是可以通过 XML 或注解来定义 SQL 语句和映射关系。
  2. 对象关系映射(ORM) :MyBatis 实现了对象关系映射,可以将数据库表的数据映射到 Java 对象,使得数据操作更加面向对象。这种方式让开发者可以使用 Java 对象来代表数据库中的数据,从而降低了数据访问的复杂性。
  3. 灵活性和可定制性:MyBatis 允许开发者编写自己的 SQL 语句,从而更好地控制数据库操作。这种灵活性使得 MyBatis 适用于各种不同的数据库操作需求,包括复杂的查询、存储过程调用等。
  4. 性能优化:MyBatis 提供了一些性能优化功能,包括缓存机制、批量操作支持等,可以帮助提高数据库访问的性能和效率。
  5. 事务管理:MyBatis 集成了事务管理,可以确保数据库操作的一致性。开发者可以轻松管理事务,包括提交、回滚等操作。
  6. 多数据库支持:MyBatis 具有多数据库支持,可以在不同的数据库供应商之间轻松切换。这使得开发者可以在不同的项目中使用相同的代码,而无需修改数据库访问逻辑。
  7. 社区支持:MyBatis 拥有庞大的开发者社区,提供了丰富的文档、教程和支持。这使得开发者可以快速解决问题,并获取有价值的建议。
  8. 与其他框架集成:MyBatis 可以与其他常见的 Java 框架(如 Spring)集成,从而更好地满足全栈开发的需求。

MyBatis 的优势

MyBatis作为一种Java持久层框架,具有多重优势,使其在数据库访问中备受欢迎。以下是MyBatis的主要优势:

  1. 灵活的 SQL 控制:MyBatis 允许您编写自定义 SQL 语句,从而更好地控制数据库操作。这对于需要执行复杂查询或优化 SQL 的应用程序非常有用。
  2. 零入侵:MyBatis 不强制您的数据对象继承特定的基类或实现特定的接口。这意味着您可以将 MyBatis 轻松集成到现有的数据模型中,而无需对现有代码进行大规模更改。
  3. 可读性:MyBatis 的 SQL 映射文件是纯文本的 XML,易于阅读和维护。您可以清晰地查看 SQL 语句,了解它们与 Java 对象之间的映射关系。
  4. 轻量级:MyBatis 是一个轻量级框架,不引入过多的复杂性或不必要的抽象。这使得它在性能上表现出色,并且适用于需要高性能的应用程序。
  5. ORM 和 SQL 的结合:MyBatis 融合了对象关系映射(ORM)和自定义 SQL 的优点。您可以使用对象映射,同时也可以根据需要编写自定义 SQL。
  6. 多数据库支持:MyBatis 支持多种数据库,因此您可以在不同的数据库供应商之间切换而无需更改代码。这对于跨平台项目非常有用。
  7. 事务管理:MyBatis 提供了内置的事务管理,可以轻松管理数据库操作的一致性。
  8. 社区支持:MyBatis 拥有庞大的开发者社区,提供了广泛的文档、教程和社区支持。这使得开发者可以快速解决问题,并从其他开发者的经验中受益。
  9. 与其他框架集成:MyBatis 可以与其他常见的 Java 框架(如 Spring)无缝集成,为全栈开发提供了便利。
  10. 开源和活跃:MyBatis 是一个开源项目,拥有活跃的维护团队,持续改进和适应新的技术和需求。

总的来说,MyBatis 的主要优势在于其灵活性、可读性、性能、轻量级特性以及与 SQL 和 ORM 的结合。这些优势使得 MyBatis 成为了 Java 开发中一个备受欢迎的持久层框架,适用于各种不同规模和类型的应用程序。选择 MyBatis 可以帮助开发者简化数据库访问并提高开发效率。但请注意,选择持久层框架通常还依赖于项目的具体需求和开发团队的偏好。

Mybatis 环境设置

Maven 下载与安装

下载 Maven

  1. 访问 Maven 官方网站:maven.apache.org/download.cg...
  2. 在 "Files" 部分,找到最新版本的 Apache Maven 的链接,并点击进入。
  3. 在下载页面中,找到 "Binary zip archive" 下载链接,通常是一个 ZIP 文件,点击下载。

具体操作如下图所示:

安装 Maven

解压 Maven

下载完成后,将 ZIP 文件解压到您选择的目录。可以选择将 Maven 解压到任何位置,例如 /opt(Linux/macOS)或 C:(Windows)。

解压后的目录结构应该如下所示:

Linux 配置环境变量
  1. 打开终端。
  2. 编辑 ~/.bashrc~/.zshrc 文件,具体取决于您使用的 shell。
  3. 在文件的末尾添加以下行,替换 /path/to/apache-maven-3.x.y 为您解压 Maven 的实际路径:
bash 复制代码
export M2_HOME=/path/to/apache-maven-3.x.y
export PATH=$M2_HOME/bin:$PATH
  1. 保存并关闭文件。
  2. 在终端中运行以下命令,使配置生效:
bash 复制代码
source ~/.bashrc  # 如果您使用的是bash shell,两者二选其一即可
source ~/.zshrc  # 如果您使用的是zsh shell
Windows 配置环境变量
  1. 右键点击 "计算机" 或 "此电脑",然后选择 "属性"。

  2. 在左侧面板中,选择 "高级系统设置"。

  3. 在系统属性窗口中,点击 "环境变量" 按钮。

  4. 在用户变量或系统变量部分,点击 "新建"。

  5. 输入以下信息:

    • 变量名:M2_HOME
    • 变量值:Maven 的安装路径(例如,C:\apache-maven-3.x.y
  6. 找到系统变量中的 Path,点击 "编辑"。

  7. 在编辑环境变量窗口中,点击 "新建",然后添加 %M2_HOME%\bin

  8. 点击 "确定" 以保存所有更改。

验证 Maven 是否安装成功

基于 Idea 创建 Maven 项目

www.cnblogs.com/giswhw/p/14...

Mybatis 依赖引入

xml 复制代码
<dependencies>
    <!-- MyBatis Core -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.x.y</version> <!-- 使用最新版本 -->
    </dependency>

    <!-- 数据库驱动,根据您的数据库选择 -->
    <dependency>
        <groupId>com.h2database</groupId> <!-- 示例:H2数据库 -->
        <artifactId>h2</artifactId>
        <version>1.4.200</version> <!-- 使用最新版本 -->
    </dependency>
        <!-- mysql驱动 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.28</version>
    </dependency>
    <!-- pg 驱动 -->
    <!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>42.2.27</version>
    </dependency>
</dependencies>

驱动请按照数据库版本进行对应dev.mysql.com/doc/relnote...

配置 MyBatis 配置文件

MyBatis 的配置文件是一个 XML 文件,通常命名为 mybatis-config.xml,它包含了MyBatis框架的全局配置信息。这个配置文件指导MyBatis如何工作,包括数据库连接、缓存、映射文件等各种设置。 下面是一个最基本的示例

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>
    <!-- 设置全局的配置信息 -->
    <settings>
        <!-- 设置实体类与数据库映射大小写 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <!-- 配置相关环境信息 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--//  mybatis内置了JNDI、POOLED、UNPOOLED三种类型的数据源,其中POOLED对应的实现为org.apache.ibatis.datasource.pooled.PooledDataSource,它是mybatis自带实现的一个同步、线程安全的数据库连接池 一般在生产中,我们会使用c3p0或者druid连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mydatabase" />
                <property name="username" value="your_username" />
                <property name="password" value="your_password" />
            </dataSource>
        </environment>
    </environments>
    <!-- 映射文件的配置 -->
    <mappers>
        <!--1.必须保证接口名(例如IUserDao)和xml名(IUserDao.xml)相同,还必须在同一个包中-->
        <package name="com.use.mapper"/>
        <!--2.不用保证同接口同包同名
         <mapper resource="com/mybatis/mappers/EmployeeMapper.xml"/>

        3.保证接口名(例如IUserDao)和xml名(IUserDao.xml)相同,还必须在同一个包中
        <mapper class="com.mybatis.dao.EmployeeMapper"/>
        -->
    </mappers>
</configuration>

经过上述配置,Mybatis 项目已经配置完毕。

Mybatis 基本使用

创建实体类 User

java 复制代码
public class User implements Serializable{

    private Long id ;
    private String userName ;
    private Date createTime;
    
    // get/set 方法省略
}

创建 User 的 Mapper 接口

java 复制代码
public interface UserMapper {

    User selectById(Integer id);
    
    // 插入 
    Integer insertUser(User user); 
    // 更新 
    Integer updateUser(User user); 
    // 删除 
    Integer deleteUser(Integer id);
}

创建 Mapper 接口对应的 Mapper 映射文件

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">
<mapper namespace="com.use.mapper.UserMapper">
    <!-- Mybatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式?-->
    <resultMap id="result" type="com.tuling.entity.User">
        <id column="id" jdbcType="BIGINT" property="id"/>
        <result column="user_name" jdbcType="VARCHAR" property="userName"/>
        <result column="create_time" jdbcType="DATE" property="createTime"/>
    </resultMap>
    <select id="selectById" resultMap="result"  >
        select id,user_name,create_time from t_user
        <where>
            <if test="id > 0">
                and id=#{id}
            </if>
        </where>
    </select>
</mapper>

编写 Mybatis 测试类

java 复制代码
public class MybatisTest {

  SqlSessionFactory sqlSessionFactory;
  @Before
  public void before(){
    // 从 XML 中构建 SqlSessionFactory
    String resource = "mybatis-config.xml";
    InputStream inputStream = null;
    try {
      inputStream = Resources.getResourceAsStream(resource);
    } catch (IOException e) {
      e.printStackTrace();
    }
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  }

  /**
   * 基于StatementId的方式去执行SQL
   *      <mapper resource="EmpMapper.xml"/>
   */
  @Test
  public void test() {
    try (SqlSession session = sqlSessionFactory.openSession()) {
      User user = (User) session.selectOne("cn.use.UserMapper.selectById", 1);
      System.out.println(user);
    }
  }
}

总结

总的来说,MyBatis 是一个强大的 Java 持久层框架,为 Java 开发者提供了一个灵活且强大的工具来管理数据库访问。通过本指南,我们学习了如何配置 MyBatis、编写 SQL 映射文件、执行 SQL 操作等操作。这些基础知识为进一步探索 MyBatis 的高级特性和用法奠定了坚实的基础。无论您是初学者还是有经验的开发者,MyBatis 都是一个值得学习和掌握的工具。

相关推荐
chuanauc8 分钟前
Kubernets K8s 学习
java·学习·kubernetes
一头生产的驴24 分钟前
java整合itext pdf实现自定义PDF文件格式导出
java·spring boot·pdf·itextpdf
YuTaoShao31 分钟前
【LeetCode 热题 100】73. 矩阵置零——(解法二)空间复杂度 O(1)
java·算法·leetcode·矩阵
zzywxc78734 分钟前
AI 正在深度重构软件开发的底层逻辑和全生命周期,从技术演进、流程重构和未来趋势三个维度进行系统性分析
java·大数据·开发语言·人工智能·spring
YuTaoShao3 小时前
【LeetCode 热题 100】56. 合并区间——排序+遍历
java·算法·leetcode·职场和发展
程序员张33 小时前
SpringBoot计时一次请求耗时
java·spring boot·后端
llwszx6 小时前
深入理解Java锁原理(一):偏向锁的设计原理与性能优化
java·spring··偏向锁
云泽野6 小时前
【Java|集合类】list遍历的6种方式
java·python·list
二进制person7 小时前
Java SE--方法的使用
java·开发语言·算法
小阳拱白菜8 小时前
java异常学习
java