在 Java 开发中,MyBatis 是一个功能强大的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs 映射成数据库中的记录。本文将通过实战案例,详细展示如何使用 MyBatis 集成 MySQL,实现对数据库的增删改查操作。
在开始编写代码之前,确保你已经安装并配置好了以下环境:
Java 开发环境:安装 JDK 11 及以上版本,并配置好环境变量。
MySQL 数据库:安装 MySQL 数据库,并创建一个名为 mybatis_demo
的数据库。
集成开发环境:推荐使用 IntelliJ IDEA 或 Eclipse。
MyBatis 和 MySQL 驱动依赖:在项目中添加 MyBatis 和 MySQL 驱动的依赖。
以下是一个典型的 MyBatis 项目结构:
src
├── main
│ ├── java
│ │ └── com.example.mybatis
│ │ ├── Employee.java
│ │ ├── EmployeeMapper.java
│ │ └── Main.java
│ └── resources
│ ├── mybatis-config.xml
│ └── EmployeeMapper.xml
首先,在 MySQL 数据库中创建一个名为 employee
的表:
CREATE DATABASE mybatis_demo;
USE mybatis_demo;
CREATE TABLE employee (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT NOT NULL
);
在 pom.xml
文件中添加以下依赖:
org.mybatis
mybatis
3.5.9
mysql
mysql-connector-java
8.0.23
创建一个 Employee
类,用于表示数据库中的 employee
表:
package com.example.mybatis;
public class Employee {
private int id;
private String name;
private int age;
// Getter 和 Setter 方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
创建一个 mybatis-config.xml
文件,用于配置 MyBatis:
创建一个 EmployeeMapper.java
接口,定义数据库操作方法:
package com.example.mybatis;
public interface EmployeeMapper {
void insertEmployee(Employee employee);
Employee getEmployeeById(int id);
void updateEmployee(Employee employee);
void deleteEmployee(int id);
}
创建一个 EmployeeMapper.xml
文件,映射 SQL 语句到接口方法:
INSERT INTO employee (name, age) VALUES (#{name}, #{age})
UPDATE employee SET name = #{name}, age = #{age} WHERE id = #{id}
DELETE FROM employee WHERE id = #{id}
创建一个 MyBatisUtil.java
类,用于管理 MyBatis 的会话:
package com.example.mybatis;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class MyBatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSession getSession() {
return sqlSessionFactory.openSession();
}
}
创建一个 Main.java
类,测试 MyBatis 的功能:
package com.example.mybatis;
import org.apache.ibatis.session.SqlSession;
public class Main {
public static void main(String[] args) {
// 插入数据
Employee employee = new Employee();
employee.setName("John Doe");
employee.setAge(30);
try (SqlSession session = MyBatisUtil.getSession()) {
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
mapper.insertEmployee(employee);
session.commit();
}
// 查询数据
try (SqlSession session = MyBatisUtil.getSession()) {
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
Employee emp = mapper.getEmployeeById(1);
System.out.println(emp);
}
// 更新数据
Employee updatedEmployee = new Employee();
updatedEmployee.setId(1);
updatedEmployee.setName("Jane Doe");
updatedEmployee.setAge(31);
try (SqlSession session = MyBatisUtil.getSession()) {
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
mapper.updateEmployee(updatedEmployee);
session.commit();
}
// 删除数据
try (SqlSession session = MyBatisUtil.getSession()) {
EmployeeMapper mapper = session.getMapper(EmployeeMapper.class);
mapper.deleteEmployee(1);
session.commit();
}
}
}
运行 Main.java
后,控制台输出如下:
Employee [id=1, name=John Doe, age=30]
数据库中的数据将按照以下顺序操作:
插入一条新记录:John Doe, 30
查询该记录并打印到控制台
更新该记录为:Jane Doe, 31
删除该记录
通过以上步骤,我们成功地使用 MyBatis 集成 MySQL,实现了对数据库的增删改查操作。MyBatis 提供了灵活的配置和强大的功能,使得数据库操作变得简单而高效。在实际开发中,可以根据项目需求进一步扩展和优化代码。