引言
MyBatis 是一个优秀的持久层框架,它消除了大部分 JDBC 代码和手动设置参数以及获取结果集的工作,使开发者能够将主要精力放在 SQL 本身上。本文将带您从 MyBatis 的入门开始,逐步深入到实战应用,并对 MyBatis 进行深度解析。
一、MyBatis 简介
1.1 MyBatis 的起源
MyBatis 本是 Apache 的一个开源项目 iBatis,2010 年由 Apache 转移到 Google Code,并更名为 MyBatis。2013 年 11 月迁移到 GitHub。
1.2 MyBatis 的特点
- 支持自定义 SQL、存储过程以及高级映射。
- 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。
- 使用简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO。
二、MyBatis 入门
2.1 环境搭建
- 创建 Maven 项目,并添加 MyBatis 依赖。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
- 创建 MyBatis 配置文件(mybatis-config.xml)。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
- 创建 Mapper 接口和 XML 映射文件。
public interface UserMapper {
User selectById(Integer id);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectById" resultType="com.example.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
- 编写测试代码。
public class MyBatisTest {
public static void main(String[] args) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.selectById(1);
System.out.println(user);
sqlSession.close();
}
}
2.2 MyBatis 核心概念
- SqlSessionFactory:MyBatis 的核心接口,用于创建 SqlSession。
- SqlSession:MyBatis 的核心对象,用于执行 SQL 语句。
- Mapper 接口:定义了 SQL 语句的方法。
- XML 映射文件:配置 SQL 语句和结果映射。
三、MyBatis 实战
3.1 增删改查
以下是一个简单的增删改查示例:
public interface UserMapper {
int insert(User user);
int deleteById(Integer id);
int update(User user);
User selectById(Integer id);
}
<insert id="insert" parameterType="User">
INSERT INTO user (name, age) VALUES (#{name}, #{age})
</insert>
<delete id="deleteById" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
<update id="update" parameterType="User">
UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<select id="selectById" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
3.2 动态 SQL
MyBatis 支持动态 SQL,可以灵活地构建 SQL 语句。
<select id="selectByCondition" parameterType="map" resultType="User">
SELECT * FROM user
<where>
<if test="name != null">
AND name = #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
3.3 关联映射
MyBatis 支持多表关联映射,可以方便地处理复杂的关系。
<resultMap id="userMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<association property="department" column="department_id" javaType="Department">
<id property="id" column="id"/>
<result property="name" column="name"/>
</association>
</resultMap>
四、MyBatis 深度解析
4.1 框架原理
MyBatis 的核心原理是通过 XML 或注解配置 SQL 语句和结果映射,将 Java 对象和数据库表进行映射。
4.2 优缺点
优点:
- 简化了 JDBC 开发,提高开发效率。
- 支持自定义 SQL 和动态 SQL,灵活性强。
- 支持多表关联映射,处理复杂的关系。
缺点:
- XML 配置较为繁琐,维护成本较高。
- 学习曲线较陡峭,需要一定的学习成本。
五、总结
MyBatis 是一款优秀的持久层框架,它简化了 JDBC 开发,提高了开发效率。通过本文的学习,相信您已经对 MyBatis 有了一定的了解。在实际项目中,您可以结合 MyBatis 的特点,灵活地构建应用程序。