MyBatis 是一个支持自定义 SQL、存储过程以及高级映射的优秀的持久层框架。
一、MyBatis 的特点
-
灵活性高
- 允许开发者编写自定义 SQL 语句,能够精确地控制数据库操作,满足复杂的业务需求。
- 可以根据不同的数据库进行 SQL 优化,提高性能。
-
易于维护
- SQL 语句与 Java 代码分离,使得数据库层的维护更加容易。
- 当数据库结构发生变化时,只需修改相应的 SQL 映射文件,而不需要修改大量的 Java 代码。
-
与 Spring 等框架集成方便
- 可以很容易地与 Spring 框架集成,实现依赖注入和事务管理等功能。
二、代码样例
- 首先创建一个 Maven 项目,并在
pom.xml
文件中添加 MyBatis 的依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
- 创建数据库表和实体类
- 假设我们有一个名为
user
的表,包含id
、name
和age
字段。创建对应的实体类User
:
- 假设我们有一个名为
public class User {
private int id;
private String name;
private int age;
// 构造函数、getter 和 setter 方法
}
- 创建 Mapper 接口
- 创建一个
UserMapper
接口,用于定义数据库操作方法:
- 创建一个
import java.util.List;
public interface UserMapper {
List<User> getAllUsers();
User getUserById(int id);
void insertUser(User user);
void updateUser(User user);
void deleteUser(int id);
}
- 配置 MyBatis
- 创建一个
mybatis-config.xml
配置文件,用于配置数据库连接和 Mapper 文件路径等信息:
- 创建一个
<?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/mydb"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
- 创建 Mapper XML 文件
- 创建一个
UserMapper.xml
文件,用于实现 Mapper 接口中的方法:
- 创建一个
<?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.UserMapper">
<select id="getAllUsers" resultType="User">
SELECT * FROM user;
</select>
<select id="getUserById" parameterType="int" resultType="User">
SELECT * FROM user WHERE id = #{id};
</select>
<insert id="insertUser" parameterType="User">
INSERT INTO user (name, age) VALUES (#{name}, #{age});
</insert>
<update id="updateUser" parameterType="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>
- 使用 MyBatis
- 创建一个测试类来测试 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.IOException;
import java.io.InputStream;
import java.util.List;
public class MyBatisTest {
public static void main(String[] args) {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
// 查询所有用户
List<User> users = sqlSession.selectList("com.example.UserMapper.getAllUsers");
for (User user : users) {
System.out.println(user.getId() + ", " + user.getName() + ", " + user.getAge());
}
// 查询单个用户
User user = sqlSession.selectOne("com.example.UserMapper.getUserById", 1);
System.out.println(user.getId() + ", " + user.getName() + ", " + user.getAge());
// 插入用户
User newUser = new User();
newUser.setName("New User");
newUser.setAge(25);
sqlSession.insert("com.example.UserMapper.insertUser", newUser);
sqlSession.commit();
// 更新用户
user.setName("Updated User");
user.setAge(30);
sqlSession.update("com.example.UserMapper.updateUser", user);
sqlSession.commit();
// 删除用户
sqlSession.delete("com.example.UserMapper.deleteUser", user.getId());
sqlSession.commit();
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
通过以上步骤,你可以使用 MyBatis 进行数据库操作。MyBatis 提供了强大的功能和灵活性,使得 Java 应用程序与数据库的交互更加方便和高效。