MyBatis核心

文章目录

  • [1. MyBatis 简介](#1. MyBatis 简介)
  • [2. 增删改查(CRUD)实现](#2. 增删改查(CRUD)实现)
  • [3. 日志配置](#3. 日志配置)

1. MyBatis 简介

MyBatis 是一个开源的 Java 持久层框架,用于简化数据库操作。它不是全自动的 ORM(对象关系映射),而是半自动框架,允许开发者直接编写 SQL,提供灵活的映射机制。主要特点:

  • SQL 与代码分离:SQL 语句写在 XML 或注解中,避免硬编码。
  • 动态 SQL:支持条件判断、循环等动态生成 SQL。
  • 轻量级:无侵入性,易于集成到 Spring 等框架。
  • 高性能:通过缓存和批处理优化性能。

核心组件:

  • SqlSessionFactory:创建 SqlSession 的工厂,基于配置文件构建。
  • SqlSession:执行 SQL 操作的核心接口。
  • Mapper:定义数据库操作的接口(XML 或注解实现)。

2. 增删改查(CRUD)实现

以下基于 MyBatis 的 XML 映射方式实现 CRUD。假设有一个 User 实体类:

java 复制代码
public class User {
    private Long id;
    private String name;
    private String email;
    // 省略 getter/setter
}
  1. 创建(Insert)
  • Mapper 接口 :

    java 复制代码
    public interface UserMapper {
        void insertUser(User user);
    }
  • XML 映射文件(UserMapper.xml) :

    xml 复制代码
    <insert id="insertUser" parameterType="User">
        INSERT INTO users (name, email) 
        VALUES (#{name}, #{email})
    </insert>
  • 使用示例 :

    java 复制代码
    SqlSession session = sqlSessionFactory.openSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    User user = new User(null, "Alice", "alice@example.com");
    mapper.insertUser(user);
    session.commit(); // 提交事务
    session.close();
  1. 读取(Select)
  • Mapper 接口 :

    java 复制代码
    public interface UserMapper {
        User selectUserById(Long id);
        List<User> selectAllUsers();
    }
  • XML 映射文件 :

    xml 复制代码
    <select id="selectUserById" resultType="User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <select id="selectAllUsers" resultType="User">
        SELECT * FROM users
    </select>
  • 使用示例 :

    java 复制代码
    User user = mapper.selectUserById(1L);
    List<User> users = mapper.selectAllUsers();
  1. 更新(Update)
  • Mapper 接口 :

    java 复制代码
    public interface UserMapper {
        void updateUser(User user);
    }
  • XML 映射文件 :

    xml 复制代码
    <update id="updateUser" parameterType="User">
        UPDATE users 
        SET name = #{name}, email = #{email}
        WHERE id = #{id}
    </update>
  • 使用示例 :

    java 复制代码
    User user = mapper.selectUserById(1L);
    user.setName("Bob");
    mapper.updateUser(user);
    session.commit();
  1. 删除(Delete)
  • Mapper 接口 :

    java 复制代码
    public interface UserMapper {
        void deleteUser(Long id);
    }
  • XML 映射文件 :

    xml 复制代码
    <delete id="deleteUser" parameterType="Long">
        DELETE FROM users WHERE id = #{id}
    </delete>
  • 使用示例 :

    java 复制代码
    mapper.deleteUser(1L);
    session.commit();

3. 日志配置

MyBatis 使用 SLF4J 作为日志门面,支持 Log4j、Logback 等实现。配置日志可监控 SQL 执行细节,便于调试。

步骤:

  1. 添加日志依赖 (以 Log4j2 为例,在 Maven 的 pom.xml 中):

    xml 复制代码
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.17.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.17.1</version>
    </dependency>
  2. 创建 Log4j2 配置文件(log4j2.xml):

    xml 复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration>
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
            </Console>
        </Appenders>
        <Loggers>
            <!-- 设置 MyBatis 的日志级别为 DEBUG -->
            <Logger name="org.mybatis" level="DEBUG" additivity="false">
                <AppenderRef ref="Console"/>
            </Logger>
            <Root level="ERROR">
                <AppenderRef ref="Console"/>
            </Root>
        </Loggers>
    </Configuration>
  3. 在 MyBatis 配置文件中启用日志(mybatis-config.xml):

    xml 复制代码
    <configuration>
        <settings>
            <!-- 设置日志实现为 SLF4J -->
            <setting name="logImpl" value="SLF4J"/>
        </settings>
    </configuration>

日志输出示例:

执行 SQL 时,控制台会打印:

复制代码
14:30:22 [main] DEBUG org.mybatis.example.UserMapper.selectUserById - ==>  Preparing: SELECT * FROM users WHERE id = ? 
14:30:22 [main] DEBUG org.mybatis.example.UserMapper.selectUserById - ==> Parameters: 1(Long)
14:30:22 [main] DEBUG org.mybatis.example.UserMapper.selectUserById - <==      Total: 1

相关推荐
data analyse 45612 分钟前
页面卸载时埋点上报总丢失?sendBeacon 上报与补偿方案
大数据·运维·服务器·前端·数据库·人工智能·数据分析
企查查数据服务13 分钟前
充电桩集采准入:用企业数据做供应商失信批量核验
大数据·数据库·人工智能
敲上瘾21 分钟前
分布式系统——Redis哨兵:自动故障转移与选举原理
linux·数据库·redis·分布式·缓存·微服务
2501_933923251 小时前
MySQL CRUD 详解:表数据插入、更新与删除,附生产避坑指南
数据库·mysql
爱喝水的鱼丶3 小时前
SAP-ABAP:S/4 HANA ABAP 新特性入门:与 ECC ABAP 的核心差异、架构优势与学习路径规划
运维·数据库·性能优化·sap·abap·hana·开发交流
余槐i10 小时前
PostgreSQL 函数索引报错 must be immutable:3种绕法与代价
数据库·后端·sql·postgresql·性能优化
数据库小学妹10 小时前
PostgreSQL表膨胀怎么办?autovacuum清不动的根因与排查命令
数据库·postgresql·表膨胀·mvcc·数据库运维
mister_guo10 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
骇客野人11 小时前
在麒麟操作系统上 分别安装 jdk1.8, 达梦数据库,redis ,memcache 的操作实施方案和步骤
数据库·redis·memcached
美狐美颜SDK开放平台12 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk