MyBatis 基础操作 - 增删改查
目录
1. 概述
MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 通过 XML 或注解的方式将 Java 对象与数据库中的记录进行映射,简化了数据库操作的开发工作。本文将详细讲解 MyBatis 的基础操作,包括增删改查(CRUD)操作,重点介绍 XML 和注解配置。
2. XML 配置
2.1 配置文件
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.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="your_password"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/demo/mapper/UserMapper.xml"/>
</mappers>
</configuration>
2.2 Mapper XML 文件
Mapper XML 文件用于定义 SQL 语句和映射关系。以下是一个包含增删改查操作的 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.demo.mapper.UserMapper">
<!-- 插入用户 -->
<insert id="insertUser" parameterType="com.example.demo.entity.User">
INSERT INTO user(name, email) VALUES(#{name}, #{email})
</insert>
<!-- 根据ID查询用户 -->
<select id="findUserById" parameterType="int" resultType="com.example.demo.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
<!-- 更新用户 -->
<update id="updateUser" parameterType="com.example.demo.entity.User">
UPDATE user SET name = #{name}, email = #{email} WHERE id = #{id}
</update>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
<!-- 查询所有用户 -->
<select id="findAllUsers" resultType="com.example.demo.entity.User">
SELECT * FROM user
</select>
</mapper>
3. 注解配置
MyBatis 也支持使用注解来定义 SQL 语句和映射关系,这种方式更加简洁,适用于简单的 SQL 操作。
3.1 Mapper 接口
以下是一个使用注解的 UserMapper
接口示例:
package com.example.demo.mapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface UserMapper {
@Insert("INSERT INTO user(name, email) VALUES(#{name}, #{email})")
@Options(useGeneratedKeys = true, keyProperty = "id")
void insertUser(User user);
@Select("SELECT * FROM user WHERE id = #{id}")
User findUserById(Integer id);
@Update("UPDATE user SET name = #{name}, email = #{email} WHERE id = #{id}")
void updateUser(User user);
@Delete("DELETE FROM user WHERE id = #{id}")
void deleteUser(Integer id);
@Select("SELECT * FROM user")
List<User> findAllUsers();
}
4. 增删改查操作
4.1 插入用户
使用 XML 配置:
<insert id="insertUser" parameterType="com.example.demo.entity.User">
INSERT INTO user(name, email) VALUES(#{name}, #{email})
</insert>
使用注解配置:
@Insert("INSERT INTO user(name, email) VALUES(#{name}, #{email})")
@Options(useGeneratedKeys = true, keyProperty = "id")
void insertUser(User user);
@Options(useGeneratedKeys = true, keyProperty = "id")
是 MyBatis 中的一个注解,用于在插入数据时获取数据库自动生成的主键值。具体来说,这个注解的作用如下:
-
useGeneratedKeys = true:这个属性告诉 MyBatis 使用数据库的自动生成键值功能。当插入一条记录时,数据库会自动生成一个主键值(例如,使用自增列),MyBatis 需要获取这个生成的键值。
-
keyProperty = “id”:这个属性指定将生成的键值赋值给 Java 对象的哪个属性。在这个例子中,
keyProperty = "id"
表示生成的键值将被赋值给 Java 对象的id
属性。
结合这两个属性,@Options(useGeneratedKeys = true, keyProperty = "id")
的作用是:在插入数据时,让 MyBatis 获取数据库自动生成的主键值,并将其赋值给传入的 Java 对象的 id
属性。
在这个示例中,假设 `User` 类有一个 `id` 属性:
```java
public class User {
private Integer id;
private String name;
private String email;
// Getters and Setters
}
当调用 insertUser
方法插入一条记录时,数据库会自动生成一个 id
值,MyBatis 会将这个生成的 id
值赋值给传入的 User
对象的 id
属性。这样,在插入操作完成后,User
对象的 id
属性就会被正确赋值。
例如:
User user = new User();
user.setName("John Doe");
user.setEmail("john.doe@example.com");
userMapper.insertUser(user);
// 现在 user.getId() 将包含数据库生成的 id 值
System.out.println(user.getId());
通过这种方式,MyBatis 简化了获取自动生成主键值的过程,使得代码更加简洁和直观。
4.2 查询用户
使用 XML 配置:
<select id="findUserById" parameterType="int" resultType="com.example.demo.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
使用注解配置:
@Select("SELECT * FROM user WHERE id = #{id}")
User findUserById(Integer id);
4.3 更新用户
使用 XML 配置:
<update id="updateUser" parameterType="com.example.demo.entity.User">
UPDATE user SET name = #{name}, email = #{email} WHERE id = #{id}
</update>
使用注解配置:
@Update("UPDATE user SET name = #{name}, email = #{email} WHERE id = #{id}")
void updateUser(User user);
4.4 删除用户
使用 XML 配置:
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
使用注解配置:
@Delete("DELETE FROM user WHERE id = #{id}")
void deleteUser(Integer id);
4.5 查询所有用户
使用 XML 配置:
<select id="findAllUsers" resultType="com.example.demo.entity.User">
SELECT * FROM user
</select>
使用注解配置:
@Select("SELECT * FROM user")
List<User> findAllUsers();
5. 总结
通过以上示例,我们详细讲解了 MyBatis 的基础操作,包括增删改查(CRUD)操作,重点介绍了 XML 和注解配置。MyBatis 提供了灵活的配置方式,可以根据项目需求选择合适的配置方式。希望这个教程能帮助你更好地理解和掌握 MyBatis 的基础操作。