Java教程

MyBatis教程:新手快速入门指南

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

MyBatis教程介绍了MyBatis框架的基本概念、特点和优势,涵盖了环境搭建、基本CRUD操作及动态SQL等内容,帮助读者快速掌握MyBatis的使用方法。

MyBatis教程:新手快速入门指南
MyBatis简介

MyBatis是什么

MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 可以通过简单的 XML 或注解进行配置,将 Java 对象映射到数据库表列。

MyBatis的特点和优势

  • 简化开发流程:MyBatis 通过 XML 或注解的方式,将 SQL 语句与 Java 代码分离,使得 SQL 语句的维护更加方便,同时简化了开发流程。
  • 强大的映射功能:MyBatis 提供了灵活的结果集映射功能,可以将查询结果映射到 Java 对象的任意属性上。
  • 支持自定义 SQL 语句:MyB endpointsBatis 允许开发者编写自定义的 SQL 语句,并通过 XML 或注解的方式进行配置,使得 SQL 语句的灵活性大大提高。
  • 易于维护:由于 SQL 语句的配置与 Java 代码分离,使得维护变得更加方便,同时也提高了代码的可读性和可维护性。

MyBatis与Hibernate等ORM框架的区别

  • SQL 语句的编写:MyBatis 需要手动编写 SQL 语句,而 Hibernate 则使用 JPA 规范,可以自动生成 SQL 语句。
  • 映射方式:MyBatis 使用 XML 或注解的方式进行映射配置,而 Hibernate 使用注解或 XML 方式进行映射配置。
  • 灵活性:MyBatis 提供了更多的自定义 SQL 语句支持,使得灵活度更高,而 Hibernate 更侧重于提供一种统一的 ORM 规范。
  • 性能:MyBatis 由于提供了直接操作 SQL 的方式,因此在某些场景下性能更优,而 Hibernate 则由于其自动化的机制,在某些情况下可能性能稍差。
MyBatis环境搭建

开发环境准备

开发 MyBatis 应用程序需要准备以下几个环境:

  • JDK 1.8 或以上版本
  • Apache Maven 或其他构建工具
  • MySQL 数据库

添加MyBatis依赖

在 Maven 项目中,需要在 pom.xml 文件中添加 MyBatis 的依赖。

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.23</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

创建第一个MyBatis应用程序

为了创建一个简单的 MyBatis 应用程序,我们需要以下几个步骤:

  1. 配置数据库连接信息:编写 mybatis-config.xml 文件,并设置数据库连接信息。
  2. 编写实体类:创建一个表示数据库表的 Java 类。
  3. 编写映射文件:编写映射文件(Mapper XML 文件)以定义 SQL 语句。
  4. 编写测试代码:编写 Java 类来使用 MyBatis 进行数据库操作。

配置数据库连接信息

mybatis-config.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/test"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

编写实体类

创建一个表示 User 表的 Java 类:

package com.example.entity;

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

    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;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

编写映射文件

创建 UserMapper.xml 文件,定义 SQL 语句:

<?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.entity.User">
        SELECT id, username, password FROM user WHERE id = #{id}
    </select>
</mapper>

编写测试代码

编写测试代码来使用 MyBatis 进行数据库操作:

package com.example.test;

import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MyBatisTest {
    public static void main(String[] args) throws IOException {
        // 读取配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 创建 SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 创建 SqlSession
        try (SqlSession session = sqlSessionFactory.openSession()) {
            // 获取 Mapper 接口
            UserMapper mapper = session.getMapper(UserMapper.class);
            // 调用方法
            User user = mapper.selectUserById(1);
            System.out.println(user);
        }
    }
}
MyBatis核心概念

SqlSessionFactory和SqlSession

  • SqlSessionFactory:SqlSessionFactory 是创建 SqlSession 的工厂类。创建 SqlSessionFactory 的实例需要一个配置文件(XML 或注解)作为输入。
  • SqlSession:SqlSession 是执行数据库操作的接口。SqlSession 用于执行持久层的 CRUD 操作,如增删改查等。

映射文件(Mapper XML)

映射文件(Mapper XML)用于定义 SQL 语句和结果集的映射关系。映射文件通常位于 src/main/resources 目录下,并且命名方式为 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.example.mapper.UserMapper">
    <select id="selectUserById" resultType="com.example.entity.User">
        SELECT id, username, password FROM user WHERE id = #{id}
    </select>
</mapper>

实体类和结果集映射

实体类用于表示数据库表中的数据。在 MyBatis 中,可以通过配置文件将数据库中的列映射到实体类的属性上。

示例

创建一个实体类 User

package com.example.entity;

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

    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;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}
基本CRUD操作

查询操作(select)

查询操作使用 <select> 标签来定义 SQL 语句,并通过 resultType 属性来指定返回值类型。

示例

定义一个查询用户的方法:

<select id="selectAllUsers" resultType="com.example.entity.User">
    SELECT id, username, password FROM user
</select>

在 Java 代码中调用:

UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.selectAllUsers();
for (User user : users) {
    System.out.println(user);
}

插入操作(insert)

插入操作使用 <insert> 标签来定义 SQL 语句,并通过 useGeneratedKeys 属性来获取自增主键。

示例

定义一个插入用户的方法:

<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>

在 Java 代码中调用:

User user = new User();
user.setUsername("test");
user.setPassword("123456");
int rows = mapper.insertUser(user);
System.out.println("Rows inserted: " + rows);

更新操作(update)

更新操作使用 <update> 标签来定义 SQL 语句。

示例

定义一个更新用户的方法:

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

在 Java 代码中调用:

User user = new User();
user.setId(1);
user.setUsername("testupdate");
user.setPassword("newpassword");
int rows = mapper.updateUser(user);
System.out.println("Rows updated: " + rows);

删除操作(delete)

删除操作使用 <delete> 标签来定义 SQL 语句。

示例

定义一个删除用户的方法:

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

在 Java 代码中调用:

int rows = mapper.deleteUserById(1);
System.out.println("Rows deleted: " + rows);
动态SQL

if条件语句

if 条件语句用于根据参数的存在与否来决定是否包含 SQL 语句中的某些部分。

示例

定义一个查询用户的方法,根据参数是否存在来决定是否包含过滤条件:

<select id="selectUserByParams" resultType="com.example.entity.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>

在 Java 代码中调用:

UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.selectUserByParams("test", null);
for (User user : users) {
    System.out.println(user);
}

choose, when, otherwise选择语句

choosewhenotherwise 语句用于选择一个分支执行。

示例

定义一个查询用户的方法,根据参数的不同来选择不同的 SQL 语句:

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

在 Java 代码中调用:

UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.selectUserByParam(null, null, "123456");
for (User user : users) {
    System.out.println(user);
}

foreach循环语句

foreach 循环语句用于遍历一个集合或数组,并将结果应用到 SQL 语句中。

示例

定义一个插入多条用户记录的方法:

<insert id="insertUsers" parameterType="java.util.List">
    INSERT INTO user (username, password) VALUES
    <foreach item="item" index="index" collection="list" open="(" separator="),(" close=")">
        #{item.username}, #{item.password}
    </foreach>
</insert>

在 Java 代码中调用:

List<User> users = new ArrayList<>();
User user1 = new User();
user1.setUsername("test1");
user1.setPassword("123456");
User user2 = new User();
user2.setUsername("test2");
user2.setPassword("654321");
users.add(user1);
users.add(user2);
mapper.insertUsers(users);
MyBatis配置详解

MyBatis配置文件的结构

MyBatis 配置文件通常命名为 mybatis-config.xml,其结构包括以下几个部分:

  • <configuration> 根标签
  • <environments> 环境配置
  • <mappers> 映射文件配置
  • <properties> 属性配置
  • <settings> 设置配置
  • <typeAliases> 类型别名配置

示例配置文件结构

<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/test"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
    <properties>
        <property name="jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="jdbc.url" value="jdbc:mysql://localhost:3306/test"/>
        <property name="jdbc.username" value="root"/>
        <property name="jdbc.password" value="root"/>
    </properties>
    <settings>
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>
    <typeAliases>
        <typeAlias alias="User" type="com.example.entity.User"/>
    </typeAliases>
</configuration>

数据源配置

数据源配置用于配置数据库连接信息。在 <environments> 标签中设置数据源属性。

示例

<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/test"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </dataSource>
    </environment>
</environments>

映射文件配置

映射文件配置用于指定 MyBatis 映射文件的位置。

示例

<mappers>
    <mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>

设置和类型别名

设置配置用于配置 MyBatis 的运行时行为,类型别名配置用于简化 Java 类型的书写。

示例

设置配置:

<settings>
    <setting name="lazyLoadingEnabled" value="true"/>
</settings>

类型别名配置:

<typeAliases>
    <typeAlias alias="User" type="com.example.entity.User"/>
</typeAliases>

以上是 MyBatis 基本的配置和使用方法,希望能够帮助你快速入门并掌握 MyBatis 的核心概念和使用技巧。如果你需要更深入的学习,可以参考 MyBatis 的官方文档或者参加一些在线课程,例如 慕课网 提供的 MyBatis 课程。

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