【Java】小白友好的MyBatis基础XML开发学习笔记

目录

MyBatis简介

MyBatis使用流程

配置文件(mybatis-config.xml)

映射文件(UserMapper.xml)

[DAO 接口(UserMapper.java)](#DAO 接口(UserMapper.java))

[使用 MyBatis](#使用 MyBatis)

Mapper代理

MyBatis核心配置文件

MyBatis参数类型和传递

单个参数:

多个参数:

建议:

CURD操作

查询操作

添加操作

修改操作

删除操作


MyBatis简介

MyBatis 是一个开源的持久化框架,用于简化数据库操作的开发。它提供了一种将 SQL 查询、插入、更新和删除等操作与 Java 对象之间的映射关系的方式,从而方便地进行数据持久化操作。

MyBatis 的核心理念是将 SQL 语句与 Java 代码解耦,通过 XML 或注解的配置方式,将 SQL 语句独立于代码之外,并通过映射文件或注解将查询结果映射到对应的 Java 对象上。

MyBatis使用流程

MyBatis 的使用流程一般包括以下几个步骤:

  1. 配置 MyBatis:首先需要配置 MyBatis,包括数据库连接信息、映射文件的路径等。可以通过 XML 配置文件或 Java 代码进行配置。

  2. 创建 SqlSessionFactory:根据配置信息创建一个 SqlSessionFactory 对象,SqlSessionFactory 是 MyBatis 的核心对象,用于创建 SqlSession。

  3. 定义映射文件:创建一个或多个映射文件,映射文件中定义了 SQL 语句与 Java 对象的映射关系,以及其他配置信息。

  4. 创建 SqlSession:通过 SqlSessionFactory 创建一个 SqlSession 对象,SqlSession 提供了操作数据库的方法,包括查询、插入、更新和删除等。

  5. 执行 SQL 操作:使用 SqlSession 调用相应的方法执行 SQL 操作。可以直接调用方法,也可以通过映射文件中定义的 SQL 语句进行操作。

  6. 处理结果:根据 SQL 操作的返回结果,进行相应的处理。MyBatis 会将查询结果映射为 Java 对象,通过对象返回给调用方。

  7. 关闭资源:在完成数据库操作后,需要关闭 SqlSession,释放相关资源。

示例:

配置文件(mybatis-config.xml)

复制代码
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/>
        <property name="username" value="root"/>
        <property name="password" value="password"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/example/mapper/UserMapper.xml"/>
  </mappers>
</configuration>

映射文件(UserMapper.xml)

复制代码
<mapper namespace="com.example.mapper.UserMapper">
  <select id="getUserById" resultType="com.example.model.User">
    SELECT * FROM user WHERE id = #{id}
  </select>
</mapper>

DAO 接口(UserMapper.java)

复制代码
package com.example.mapper;

import com.example.model.User;

public interface UserMapper {
    User getUserById(int id);
}

使用 MyBatis

复制代码
import com.example.mapper.UserMapper;
import com.example.model.User;
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 MyBatisExample {
    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        try (InputStream inputStream = Resources.getResourceAsStream(resource)) {
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            try (SqlSession session = sqlSessionFactory.openSession()) {
                UserMapper userMapper = session.getMapper(UserMapper.class);
                User user = userMapper.getUserById(1);
                System.out.println(user);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Mapper代理

Mapper 代理开发是 MyBatis 中一种便捷的数据库操作方式,它通过动态代理技术自动生成 DAO(Data Access Object)接口的实现类。开发人员只需编写接口,并在 XML 配置文件中定义 SQL 映射关系,无需编写具体的实现类,就可以直接调用 DAO 接口中定义的方法进行数据库操作。

具体使用:

1.定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下

2.设置SQL映射文件的namespace属性为Mapper接口全限定名

3.在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

4.编码:①通过SqlSession的getMapper方法获取Mapper接口的代理对象 ②调用对应方法完成sql的执行

MyBatis核心配置文件

MyBatis 核心配置文件是 MyBatis 的配置中心,用于定义 MyBatis 的全局配置信息、数据源信息、映射器、插件等。它是一个 XML 文件,通常命名为 mybatis-config.xml

MyBatis 核心配置文件包括以下几个部分:

  1. configuration:MyBatis 根元素,包含了所有的配置信息。

  2. settings:MyBatis 的全局配置项,包括缓存配置、日志配置、延迟加载配置、默认语句超时时间等。

  3. typeAliases:类型别名配置,用于定义别名以便在映射文件中使用。

  4. typeHandlers:类型处理器配置,用于将数据库中的数据类型转换为 Java 类型。

  5. environments:环境配置,可以定义多个环境,每个环境包含一个数据源和一个事务管理器。

  6. environment:单个环境定义,包含一个数据源和一个事务管理器。

  7. transactionManager:事务管理器配置,用于控制事务。

  8. dataSource:数据源配置,包含一些必须的属性,例如驱动类、连接 URL、用户名和密码等。

  9. mappers:映射器配置,用于定义映射器的位置和加载方式。

  10. mapper:单个映射器定义,可以通过 resource、url 或 class 属性指定映射器的位置或类文件。

MyBatis参数类型和传递

单个参数:

1.POJO类型:直接使用,实体类属性名和参数占位符名称一致

2.Map集合:直接使用,键名和参数占位符名称一致

3.Collection:封装为Map集合

map.put("collection",collection集合);

map.put("arg0",collection集合);

4.List:封装为Map集合

map.put("collection",list集合);

map.put("list",list集合);

map.put("arg0",list集合);

5.Array:封装为Map集合

map.put("array",数组);

map.put("arg0",数组);

6.其他类型:直接使用

多个参数:

封装为Map集合

map.put("arg0",参数值1);

map.put("param1",参数值1);

map.put("arg1",参数值2);

map.put("param2",参数值2);

建议:

使用@Param注解来修改Map集合中默认的键名,并使用修改后的名称来获取值,这样代码可读性更高。

CURD操作

查询操作

在 MyBatis 中进行查询操作主要涉及以下几个方面

  1. 查询所有 & 结果映射:

    • 首先,在映射文件(Mapper.xml)中定义 SQL 语句,如 SELECT * FROM table_name。
    • 在映射文件中配置结果映射,将查询结果映射为 Java 对象。可以使用 resultType 或 resultMap 进行结果映射配置。
  2. 单项查询:

    • 在映射文件中定义具体的 SQL 查询语句,可使用 WHERE 子句和条件参数进行筛选。
    • 使用 selectOne 方法执行查询,并传入查询参数。
  3. 条件查询:

    • 在映射文件中定义带有条件的 SQL 查询语句,例如 SELECT * FROM table_name WHERE column = #{value}。
    • 使用 selectList 方法执行查询,并传入查询参数。
  4. 动态条件查询:

    • 在映射文件中使用 <where> 元素和 <if> 元素实现动态条件查询。
    • <where> 元素用于包裹查询条件,可以根据条件动态拼接 WHERE 子句。
    • <if> 元素用于判断条件是否满足,如果满足则拼接对应的查询条件。
    • 可以结合使用 <choose> 元素、<when> 元素和 <otherwise> 元素实现多条件判断。

注意结果映射中:

resultMap 中,columnproperty 是用于指定查询结果的列名和 Java 对象的属性名之间的映射关系。

  • column:表示数据库表中的列名。它指定了查询结果集中的列,用于与 Java 对象的属性进行对应。
  • property:表示 Java 对象的属性名。它指定了将查询结果中的列值映射到 Java 对象中的哪个属性上。

通过在 resultMap 中定义多个 <result> 元素,可以实现对查询结果的不同列和 Java 对象属性之间的映射。

举例:

复制代码
<resultMap id="userResultMap" type="com.example.model.User">
  <id property="id" column="user_id"/>
  <result property="name" column="user_name"/>
  <result property="age" column="user_age"/>
  <result property="email" column="user_email"/>
</resultMap>

添加操作

在 MyBatis 中进行增加操作,通常通过 SQL 映射文件(Mapper XML)和 DAO 接口的配合来实现。

举例:

SQL 映射文件(UserMapper.xml)中定义插入操作的 SQL 语句

复制代码
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
  <insert id="insertUser" parameterType="com.example.model.User">
    INSERT INTO user (name, age, email) VALUES (#{name}, #{age}, #{email})
  </insert>
</mapper>

DAO 接口(UserMapper.java)定义插入操作的方法

复制代码
package com.example.mapper;

import com.example.model.User;

public interface UserMapper {
    void insertUser(User user);
}

在应用程序中调用 DAO 接口的插入方法

复制代码
User user = new User();
user.setName("John");
user.setAge(25);
user.setEmail("john@example.com");

userMapper.insertUser(user);

修改操作

在 MyBatis 中进行修改操作与增加操作类似,同样需要使用 SQL 映射文件(Mapper XML)和 DAO 接口的配合来实现。

举例:

SQL 映射文件(UserMapper.xml)中定义更新操作的 SQL 语句

复制代码
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
  <update id="updateUser" parameterType="com.example.model.User">
    UPDATE user SET name = #{name}, age = #{age}, email = #{email} WHERE id = #{id}
  </update>
</mapper>

DAO 接口(UserMapper.java)定义更新操作的方法

复制代码
package com.example.mapper;

import com.example.model.User;

public interface UserMapper {
    void updateUser(User user);
}

在应用程序中调用 DAO 接口的更新方法

复制代码
User user = new User();
user.setId(1); // 根据需要更新的用户ID设置
user.setName("John Doe");
user.setAge(30);
user.setEmail("newemail@example.com");

userMapper.updateUser(user);

删除操作

在 MyBatis 中进行删除操作也需要使用 SQL 映射文件(Mapper XML)和 DAO 接口的配合来实现。

举例:

SQL 映射文件(UserMapper.xml)中定义删除操作的 SQL 语句

复制代码
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
  <delete id="deleteUser" parameterType="int">
    DELETE FROM user WHERE id = #{id}
  </delete>
</mapper>

DAO 接口(UserMapper.java)定义删除操作的方法

复制代码
package com.example.mapper;

public interface UserMapper {
    void deleteUser(int id);
}

在应用程序中调用 DAO 接口的删除方法

复制代码
int userId = 1; // 根据需要删除的用户ID设置

userMapper.deleteUser(userId);
相关推荐
小猿姐24 分钟前
实测对比:哪款开源 Kubernetes MySQL Operator 最值得用?(2026 深度评测)
数据库·mysql·云原生
一灯架构2 小时前
90%的人答错!一文带你彻底搞懂ArrayList
java·后端
倔强的石头_2 小时前
从 “存得下” 到 “算得快”:工业物联网需要新一代时序数据平台
数据库
Y4090013 小时前
【多线程】线程安全(1)
java·开发语言·jvm
TDengine (老段)3 小时前
TDengine IDMP 可视化 —— 分享
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据·时序数据
布局呆星4 小时前
SpringBoot 基础入门
java·spring boot·spring
风吹迎面入袖凉4 小时前
【Redis】Redisson的可重入锁原理
java·redis
GottdesKrieges4 小时前
OceanBase数据库备份配置
数据库·oceanbase
w6100104664 小时前
cka-2026-ConfigMap
java·linux·cka·configmap