MyBatis 是一个优秀的持久层框架,它消除了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
MyBatis 简介
MyBatis 遵循约定优于配置( Convention Over Configuration)的原则,通过 XML 或注解的方式配置 SQL 映射,使得开发人员能够更加专注于业务逻辑的实现。它支持自定义 SQL、存储过程以及高级映射功能。
环境搭建
1. 安装 Java 开发环境
首先,确保你的计算机上安装了 Java 开发环境(JDK)。你可以从 Oracle 官网下载并安装 JDK。
2. 创建 Maven 项目
使用 Maven 来管理项目依赖。在项目的 pom.xml 文件中添加以下依赖:
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
</dependencies>
3. 配置数据库
确保数据库已安装并启动。以下是创建一个名为 mybatis_example 的数据库的 SQL 语句:
CREATE DATABASE mybatis_example;
USE mybatis_example;
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50),
password VARCHAR(50)
);
MyBatis 基础使用
1. 创建 MyBatis 配置文件
在 src/main/resources 目录下创建一个名为 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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_example?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
2. 创建 Mapper 接口
在 com.example.mapper 包下创建一个名为 UserMapper 的接口:
package com.example.mapper;
public interface UserMapper {
List<User> findAll();
}
3. 创建 Mapper 映射文件
在 src/main/resources/com/example/mapper 目录下创建一个名为 UserMapper.xml 的文件,并添加以下内容:
<?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="findAll" resultType="com.example.entity.User">
SELECT * FROM user
</select>
</mapper>
4. 使用 MyBatis
在 com.example.service 包下创建一个名为 UserService 的类,并使用 MyBatis 执行查询操作:
package com.example.service;
import com.example.mapper.UserMapper;
import com.example.entity.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.util.List;
public class UserService {
private SqlSessionFactory sqlSessionFactory;
public UserService() {
try {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(
Resources.getResourceAsStream("mybatis-config.xml"));
} catch (IOException e) {
e.printStackTrace();
}
}
public List<User> findAll() {
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
return mapper.findAll();
}
}
}
MyBatis 高级特性
1. 动态 SQL
MyBatis 支持动态 SQL,你可以使用 <if>、<choose>、<when>、<otherwise> 等标签来构建动态 SQL。
<select id="findUsersByCondition" resultType="com.example.entity.User">
SELECT * FROM user
<where>
<if test="username != null">
AND username = #{username}
</if>
<if test="password != null">
AND password = #{password}
</if>
</where>
</select>
2. 关联映射
MyBatis 支持一对一、一对多以及多对多的关联映射。
<resultMap id="userResultMap" type="com.example.entity.User">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="password" column="password"/>
<collection property="orders" column="id" select="findOrdersByUserId"/>
</resultMap>
<select id="findUsers" resultMap="userResultMap">
SELECT * FROM user
</select>
<select id="findOrdersByUserId" resultType="com.example.entity.Order">
SELECT * FROM order WHERE user_id = #{id}
</select>
3. 缓存
MyBatis 支持一级缓存和二级缓存。一级缓存默认开启,二级缓存需要手动配置。
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
总结
本文从零开始,介绍了 MyBatis 的基本使用方法、高级特性和实战技巧。通过本文的学习,相信你已经对 MyBatis 有了一定的了解。在实际开发中,MyBatis 可以帮助你快速、高效地实现数据库操作,提高开发效率。祝你学习愉快!
