MyBatis 是一款优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
一、MyBatis 简介
1.1 MyBatis 概念
MyBatis 是一款优秀的持久层框架,它对JDBC操作数据库的过程进行了封装,简化了数据库操作流程,使开发者只需关注 SQL 语句和业务逻辑。
1.2 MyBatis 优势
- 简化数据库操作流程,提高开发效率;
- SQL 与代码分离,便于维护;
- 提供丰富的映射功能,支持复杂查询;
- 支持自定义 SQL、存储过程和高级映射。
二、MyBatis 入门
2.1 环境搭建
- 下载 MyBatis 官网提供的最新版本包。
- 在项目中添加 MyBatis 依赖。
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>版本号</version>
</dependency>
2.2 配置文件
- 创建
mybatis-config.xml文件,配置数据库连接信息、事务管理、映射文件位置等。
<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/database_name"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
- 创建 Mapper 接口,定义方法。
public interface UserMapper {
User getUserById(int id);
}
- 创建 Mapper 映射文件,编写 SQL 语句。
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" resultType="com.example.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
2.3 运行程序
- 创建 MyBatis 工具类,用于获取 SqlSessionFactory。
- 使用 SqlSessionFactory 创建 SqlSession。
- 使用 SqlSession 创建 Mapper 接口实例,调用方法。
public class MyBatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
// 创建 SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsInputStream("mybatis-config.xml"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
}
public class Main {
public static void main(String[] args) {
// 获取 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory();
// 创建 SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
// 创建 Mapper 接口实例
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 调用方法
User user = userMapper.getUserById(1);
// 打印结果
System.out.println(user);
// 关闭资源
sqlSession.close();
}
}
三、MyBatis 进阶
3.1 映射文件
<select>标签:用于执行查询操作。<insert>标签:用于执行插入操作。<update>标签:用于执行更新操作。<delete>标签:用于执行删除操作。
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" 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.2 动态 SQL
MyBatis 提供了丰富的动态 SQL 功能,可以实现复杂的 SQL 语句。
<if>标签:根据条件判断是否执行 SQL 语句。<choose>标签:类似于 Java 中的switch语句。<foreach>标签:用于循环遍历集合。
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserList" resultType="com.example.entity.User">
SELECT * FROM user
<where>
<if test="name != null">
AND name LIKE #{name}
</if>
<if test="age != null">
AND age = #{age}
</if>
</where>
</select>
</mapper>
3.3 缓存
MyBatis 提供了两种缓存机制:一级缓存和二级缓存。
- 一级缓存:会话级别的缓存,默认开启。
- 二级缓存:应用级别的缓存,需要手动开启。
<configuration>
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
</configuration>
四、MyBatis 项目实战案例分析
4.1 项目背景
某公司开发一个在线商城系统,系统包含商品管理、订单管理、用户管理等功能。
4.2 MyBatis 应用
- 定义实体类(Entity):如
Product、Order、User等。 - 定义 Mapper 接口:如
ProductMapper、OrderMapper、UserMapper等。 - 定义 Mapper 映射文件:编写 SQL 语句。
- 在控制器(Controller)中调用 Mapper 接口方法,实现业务逻辑。
4.3 案例分析
- 商品管理:使用 MyBatis 查询商品信息、添加商品、修改商品、删除商品等。
- 订单管理:使用 MyBatis 查询订单信息、添加订单、修改订单、删除订单等。
- 用户管理:使用 MyBatis 查询用户信息、注册用户、登录用户、修改用户信息等。
五、总结
MyBatis 是一款优秀的持久层框架,它简化了数据库操作流程,提高了开发效率。通过本文的介绍,相信你已经对 MyBatis 有了一定的了解。在实际项目中,合理运用 MyBatis,可以让你在数据库操作方面更加得心应手。
