文章目录
- [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
}
        - 创建(Insert)
 
- 
Mapper 接口 :
javapublic interface UserMapper { void insertUser(User user); } - 
XML 映射文件(UserMapper.xml) :
xml<insert id="insertUser" parameterType="User"> INSERT INTO users (name, email) VALUES (#{name}, #{email}) </insert> - 
使用示例 :
javaSqlSession 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(); 
- 读取(Select)
 
- 
Mapper 接口 :
javapublic 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> - 
使用示例 :
javaUser user = mapper.selectUserById(1L); List<User> users = mapper.selectAllUsers(); 
- 更新(Update)
 
- 
Mapper 接口 :
javapublic interface UserMapper { void updateUser(User user); } - 
XML 映射文件 :
xml<update id="updateUser" parameterType="User"> UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id} </update> - 
使用示例 :
javaUser user = mapper.selectUserById(1L); user.setName("Bob"); mapper.updateUser(user); session.commit(); 
- 删除(Delete)
 
- 
Mapper 接口 :
javapublic interface UserMapper { void deleteUser(Long id); } - 
XML 映射文件 :
xml<delete id="deleteUser" parameterType="Long"> DELETE FROM users WHERE id = #{id} </delete> - 
使用示例 :
javamapper.deleteUser(1L); session.commit(); 
3. 日志配置
MyBatis 使用 SLF4J 作为日志门面,支持 Log4j、Logback 等实现。配置日志可监控 SQL 执行细节,便于调试。
步骤:
- 
添加日志依赖 (以 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> - 
创建 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> - 
在 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