引言
MyBatis 是一个优秀的持久层框架,它对JDBC的操作数据库过程进行了封装,让开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建连接、创建Statement、处理异常等JDBC相关的工作。本文将带您从入门到实战,详细了解 MyBatis 的使用。
MyBatis 简介
1.1 MyBatis 的发展历程
MyBatis 最初由原代码捐赠者 MyBatis 官方社区在 2009 年推出,此后经历了多个版本的迭代,功能不断完善,性能持续优化。
1.2 MyBatis 的核心特性
- 支持定制化 SQL、存储过程以及高级映射;
- 提供数据源支持以及事务管理;
- 与各种数据库兼容;
- 支持自定义数据库类型处理器和结果集处理器。
MyBatis 入门
2.1 环境搭建
要使用 MyBatis,首先需要在项目中引入相应的依赖。以下是 Maven 项目的依赖配置:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
</dependencies>
2.2 MyBatis 核心组件
MyBatis 的核心组件包括:
- SqlSessionFactoryBuilder:用于构建 SqlSessionFactory;
- SqlSessionFactory:用于创建 SqlSession;
- SqlSession:用于执行 SQL 语句;
- Executor:执行 SQL 语句的具体实现;
- MappedStatement:表示一个 SQL 语句以及其映射的参数和返回类型。
2.3 创建 MyBatis 应用
以下是创建 MyBatis 应用的基本步骤:
- 创建配置文件(mybatis-config.xml);
- 定义 SQL 映射文件(Mapper.xml);
- 创建 Mapper 接口;
- 在主程序中,使用 SqlSessionFactoryBuilder 构建 SqlSessionFactory;
- 使用 SqlSessionFactory 创建 SqlSession;
- 使用 SqlSession 执行 SQL 语句。
MyBatis 实战
3.1 CRUD 操作
以下是一个简单的 CRUD 操作示例:
Mapper 接口:
public interface UserMapper {
int insert(User user);
User selectById(int id);
int update(User user);
int deleteById(int id);
}
Mapper.xml:
<mapper namespace="com.example.mapper.UserMapper">
<insert id="insert" parameterType="User">
INSERT INTO users (name, age) VALUES (#{name}, #{age})
</insert>
<select id="selectById" resultType="User">
SELECT id, name, age FROM users WHERE id = #{id}
</select>
<update id="update" parameterType="User">
UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<delete id="deleteById" parameterType="int">
DELETE FROM users WHERE id = #{id}
</delete>
</mapper>
主程序:
public class Main {
public static void main(String[] args) throws Exception {
// 构建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(new InputStreamResource("mybatis-config.xml"));
// 创建 SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 创建 Mapper 接口实例
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 插入数据
User user = new User();
user.setName("张三");
user.setAge(20);
userMapper.insert(user);
// 查询数据
User userById = userMapper.selectById(1);
System.out.println(userById);
// 更新数据
userById.setName("李四");
userById.setAge(21);
userMapper.update(userById);
// 删除数据
userMapper.deleteById(1);
// 关闭 SqlSession
sqlSession.close();
}
}
3.2 动态 SQL
MyBatis 支持动态 SQL,可以方便地实现各种复杂的 SQL 操作。以下是一个动态 SQL 的示例:
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectUsersByAgeRange" resultType="User">
SELECT id, name, age
FROM users
WHERE age BETWEEN #{minAge} AND #{maxAge}
</select>
</mapper>
主程序:
public class Main {
public static void main(String[] args) throws Exception {
// 构建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(new InputStreamResource("mybatis-config.xml"));
// 创建 SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 创建 Mapper 接口实例
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 查询年龄在 18 到 25 之间的用户
List<User> users = userMapper.selectUsersByAgeRange(18, 25);
for (User user : users) {
System.out.println(user);
}
// 关闭 SqlSession
sqlSession.close();
}
}
总结
本文介绍了 MyBatis 开源框架,从入门到实战,让您轻松实现数据库操作。MyBatis 提供了丰富的功能,可以满足各种复杂的业务需求。希望本文能对您有所帮助!
