文章目录
- [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