引言
MyBatis 是一个优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
本文将带领读者从入门到精通,深入了解 MyBatis 框架,并通过实战案例展示如何在实际项目中应用 MyBatis。
MyBatis 入门
1.1 MyBatis 简介
MyBatis 是一个半自动化的持久层框架,它将 SQL 映射成 Java 对象,简化了数据库操作。MyBatis 的核心是 SQL 映射文件,它定义了 SQL 语句与 Java 对象的映射关系。
1.2 MyBatis 工作原理
MyBatis 的工作原理主要包括以下几个步骤:
- 配置 MyBatis 环境:配置数据源、事务管理器等。
- 编写 SQL 映射文件:定义 SQL 语句与 Java 对象的映射关系。
- 编写接口:定义接口,其中包含 SQL 映射文件中定义的方法。
- 实现接口:实现接口,调用 MyBatis 提供的
SqlSession对象执行 SQL 语句。
MyBatis 深度解析
2.1 MyBatis 核心组件
MyBatis 的核心组件包括:
- SqlSessionFactory:用于创建
SqlSession对象。 - SqlSession:用于执行 SQL 语句,管理事务。
- Executor:用于执行 SQL 语句。
- MappedStatement:用于存储 SQL 映射文件中的 SQL 语句和参数。
2.2 MyBatis 映射文件
MyBatis 映射文件是 MyBatis 的核心,它定义了 SQL 语句与 Java 对象的映射关系。映射文件中包含以下元素:
- select、update、insert、delete:定义 SQL 语句。
- parameterType:定义参数类型。
- resultType:定义返回类型。
- resultMap:定义复杂类型的映射关系。
2.3 MyBatis 动态 SQL
MyBatis 提供了动态 SQL 功能,可以方便地实现复杂的 SQL 语句。动态 SQL 主要包括以下元素:
、 :条件判断。、 、 :循环遍历集合。 、 :字符串拼接。、 、
MyBatis 实战案例
3.1 创建项目
首先,创建一个 Maven 项目,并添加 MyBatis 依赖。
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-redis</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.10</version>
</dependency>
</dependencies>
3.2 配置数据源
在 application.properties 文件中配置数据源。
# 数据库配置
jdbc.url=jdbc:mysql://localhost:3306/mybatis_example?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
jdbc.username=root
jdbc.password=root
3.3 编写实体类
创建实体类 User.java。
public class User {
private Integer id;
private String name;
private Integer age;
// getter 和 setter 方法
}
3.4 编写 SQL 映射文件
创建 UserMapper.xml 文件。
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectById" resultType="com.example.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insertUser" parameterType="com.example.entity.User">
INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>
<update id="updateUser" parameterType="com.example.entity.User">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
3.5 编写接口
创建 UserMapper.java 接口。
public interface UserMapper {
User selectById(Integer id);
void insertUser(User user);
void updateUser(User user);
void deleteUser(Integer id);
}
3.6 实现接口
创建 UserMapperImpl.java 类,实现 UserMapper 接口。
public class UserMapperImpl implements UserMapper {
private SqlSessionFactory sqlSessionFactory;
public UserMapperImpl(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
@Override
public User selectById(Integer id) {
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
return sqlSession.selectOne("com.example.mapper.UserMapper.selectById", id);
} finally {
sqlSession.close();
}
}
@Override
public void insertUser(User user) {
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
sqlSession.insert("com.example.mapper.UserMapper.insertUser", user);
sqlSession.commit();
} finally {
sqlSession.close();
}
}
@Override
public void updateUser(User user) {
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
sqlSession.update("com.example.mapper.UserMapper.updateUser", user);
sqlSession.commit();
} finally {
sqlSession.close();
}
}
@Override
public void deleteUser(Integer id) {
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
sqlSession.delete("com.example.mapper.UserMapper.deleteUser", id);
sqlSession.commit();
} finally {
sqlSession.close();
}
}
}
3.7 使用 MyBatis
在 Spring Boot 应用中,可以通过以下方式使用 MyBatis:
- 创建
SqlSessionFactory对象。 - 创建
SqlSession对象。 - 获取
UserMapper对象。 - 调用
UserMapper对象的方法。
public class Application {
public static void main(String[] args) {
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(new ClassPathResource("mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.selectById(1);
System.out.println(user.getName());
sqlSession.close();
}
}
总结
本文从入门到精通,详细介绍了 Java 开源框架 MyBatis。通过学习本文,读者可以了解到 MyBatis 的基本概念、工作原理、核心组件、映射文件、动态 SQL 以及实战案例。希望本文对读者学习 MyBatis 框架有所帮助。
