Java教程

MyBatis资料入门教程:快速掌握MyBatis基础

本文主要是介绍MyBatis资料入门教程:快速掌握MyBatis基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
概述

本文详细介绍了MyBatis资料,包括MyBatis的基本概念、优点和应用场景,以及如何快速入门并搭建开发环境。文章还深入讲解了MyBatis的核心配置、映射器、动态SQL和高级特性,帮助读者全面掌握MyBatis的使用方法。

MyBatis入门教程:快速掌握MyBatis基础
MyBatis简介

MyBatis是什么

MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解进行配置和原始映射,将接口和 Java 的 POJO 传递给 SQL 语句。

MyBatis的优点和应用场景

MyBatis的优点包括:

  • 简化了 JDBC 代码:MyBatis 完全消除了 JDBC 代码的样板和重复性劳动。
  • 灵活性高:支持自定义 SQL 语句和存储过程。
  • 易于维护:SQL 语句与 Java 代码分离,便于维护和升级。
  • 高性能:与 Jdbc 相比,MyBatis 直接操作数据库,省去了 Jdbc 的大量封装。

MyBatis的应用场景包括:

  • 需要与数据库进行复杂交互的应用程序,如金融系统、物流系统等。
  • 需要频繁修改 SQL 语句的应用程序,如电子商务系统。
  • 需要高度定制化 SQL 语句的应用程序,如大数据分析系统。
MyBatis快速入门

环境搭建

要搭建 MyBatis 开发环境,需要引入 MyBatis 的依赖。以下是 Maven 配置中的依赖配置示例,确保项目中已经配置了 Maven。

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.23</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.13.3</version>
    </dependency>
    <!-- 其它依赖 -->
</dependencies>

接下来,需要配置 SqlMapConfig.xml,该文件用来配置数据库连接信息和其它核心配置。以下是完整的 SqlMapConfig.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="cacheEnabled" value="true"/>
    </settings>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>
``

### 第一个MyBatis程序

首先,创建数据库表 `user`,如下:

```sql
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(30) NOT NULL,
  `password` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
``

然后编写 `User` 类及其属性:

```java
public class User {
    private int id;
    private String username;
    private String password;

    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
``

接下来创建 `SqlMapConfig.xml` 配置文件,该文件用来配置数据库连接信息。

```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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>
``

接下来创建 `UserMapper.xml` 映射文件,该文件用来定义 SQL 语句。

```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.example.mapper.UserMapper">
    <select id="selectUserById" resultType="com.example.domain.User">
        SELECT id, username, password FROM user WHERE id = #{id}
    </select>
</mapper>

最后编写 Java 代码来测试以上配置是否有效:

public class Main {
    public static void main(String[] args) {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml"));
        SqlSession session = sqlSessionFactory.openSession();
        User user = session.selectOne("com.example.mapper.UserMapper.selectUserById", 1);
        System.out.println(user);
    }
}

通过以上步骤,MyBatis 第一个程序成功运行。

MyBatis核心配置

配置文件详解

MyBatis 的配置文件 SqlMapConfig.xml 是整个 MyBatis 运行的基础,它包含数据库连接信息、事务管理器类型、环境配置等。

以下是一些常用的配置标签:

<configuration>
    <!-- 环境配置 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!-- mappers配置,指定映射文件的路径 -->
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>

    <!-- 其它配置,如类型处理器、缓存配置等 -->
</configuration>

数据库连接配置

数据库连接配置主要在 <environment> 标签中的 <dataSource> 标签内进行。<dataSource> 标签有三种类型:UNPOOLED、POOLED 和 JNDI。POOLED 类型的连接池是 MyBatis 中比较常用的连接池。

<environment id="development">
    <transactionManager type="JDBC"/>
    <dataSource type="POOLED">
        <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </dataSource>
</environment>

以上配置中,<property> 标签用于设置数据源属性。

MyBatis映射器(Mapper)

映射文件编写

MyBatis 映射文件,通常以 .xml 为扩展名,用于定义 SQL 语句。映射文件中的根元素 <mapper> 应该有一个 namespace 属性,该属性用于映射文件中 SQL 语句的唯一命名空间。

<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectUserById" resultType="com.example.domain.User">
        SELECT id, username, password FROM user WHERE id = #{id}
    </select>
</mapper>

常用的SQL语句映射

MyBatis 支持多种 SQL 语句的映射,包括 selectinsertupdatedelete

select

<select id="selectUserById" resultType="com.example.domain.User">
    SELECT id, username, password FROM user WHERE id = #{id}
</select>

insert

<insert id="insertUser" parameterType="com.example.domain.User">
    INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>

update

<update id="updateUser" parameterType="com.example.domain.User">
    UPDATE user SET username = #{username}, password = #{password} WHERE id = #{id}
</update>

delete

<delete id="deleteUserById" parameterType="int">
    DELETE FROM user WHERE id = #{id}
</delete>
MyBatis动态SQL

if、choose、when、otherwise标签用法

MyBatis 支持使用 ifchoosewhenotherwise 标签来编写动态 SQL 语句。这些标签在 XML 映射文件中非常有用,可以实现条件分支和循环。

使用 if 标签:

<select id="selectUserByCondition" resultType="com.example.domain.User">
    SELECT id, username, password FROM user
    <where>
        <if test="username != null">
            AND username = #{username}
        </if>
        <if test="password != null">
            AND password = #{password}
        </if>
    </where>
</select>

使用 choosewhenotherwise 标签:

<select id="selectUserByCondition" resultType="com.example.domain.User">
    SELECT id, username, password FROM user
    <where>
        <choose>
            <when test="username != null">
                AND username = #{username}
            </when>
            <when test="password != null">
                AND password = #{password}
            </when>
            <otherwise>
                AND id = 1
            </otherwise>
        </choose>
    </where>
</select>

foreach标签用法

foreach 标签用于遍历列表或数组,常用于 SQL 的 IN 子句。

使用 foreach 标签:

<select id="selectUsersByIds" resultType="com.example.domain.User">
    SELECT id, username, password FROM user WHERE id IN
    <foreach item="item" index="index" collection="ids" open="(" separator="," close=")">
        #{item}
    </foreach>
</select>

其中,item 表示当前遍历的元素,index 表示当前元素的索引,collection 表示要遍历的集合,openclose 定义了遍历序列的起始和结束符号。

MyBatis高级特性

分页查询

MyBatis 的分页查询可以通过 RowBoundsPageHelper 插件来实现。

使用 RowBounds

public List<User> getUsers(RowBounds rowBounds) {
    return sqlSession.selectList("com.example.mapper.UserMapper.getUsers", null, rowBounds);
}

使用 PageHelper 插件:

首先,引入 PageHelper 依赖:

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.0.0</version>
</dependency>

配置 PageHelper 插件:

PageHelper.startPage(1, 5);
List<User> users = sqlSession.selectList("com.example.mapper.UserMapper.getUsers");

以下是 SqlMapConfig.xml 中启用 PageHelper 插件的完整配置示例:

<configuration>
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <property name="helperDialect" value="mysql"/>
            <property name="reasonable" value="true"/>
            <property name="params" value="count=countSql"/>
        </plugin>
    </plugins>
</configuration>

缓存机制

MyBatis 提供了一级缓存和二级缓存的机制,可以显著提高查询性能。

一级缓存:

一级缓存是 SqlSession 级别的缓存,同一个 SqlSession 中的相同 SQL 不会重复执行。

二级缓存:

二级缓存是 Mapper 级别的缓存,同一个命名空间的相同 SQL 在不同的 SqlSession 中也可以实现缓存。

<cache />

SqlMapConfig.xml 配置文件中添加 <cache> 标签即可启用二级缓存,具体配置如下:

<configuration>
    <cacheEnabled>true</cacheEnabled>
    <cache>
        <type>PERPETUAL</type>
        <flushInterval>60000</flushInterval>
        <size>512</size>
        <blocking>true</blocking>
    </cache>
</configuration>

通过以上介绍,你已经了解了 MyBatis 的基本概念、快速入门、核心配置、映射器、动态 SQL 和高级特性。通过这些内容,可以快速掌握 MyBatis 的使用方法,希望对你有所帮助。

这篇关于MyBatis资料入门教程:快速掌握MyBatis基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!