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 都是一个值得学习和掌握的工具。

相关推荐
对许2 分钟前
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“
java·log4j
鹿屿二向箔3 分钟前
基于SSM(Spring + Spring MVC + MyBatis)框架的咖啡馆管理系统
spring·mvc·mybatis
无尽的大道6 分钟前
Java字符串深度解析:String的实现、常量池与性能优化
java·开发语言·性能优化
小鑫记得努力15 分钟前
Java类和对象(下篇)
java
binishuaio19 分钟前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE21 分钟前
【Java SE】StringBuffer
java·开发语言
老友@21 分钟前
aspose如何获取PPT放映页“切换”的“持续时间”值
java·powerpoint·aspose
颜淡慕潇30 分钟前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
wrx繁星点点36 分钟前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
Upaaui39 分钟前
Aop+自定义注解实现数据字典映射
java