Java 中的 Mapper 语法
1. Mapper 的概述
- Mapper 用于在 Java 应用程序与数据库之间进行数据映射。
- 在 MyBatis 框架中,Mapper 是一个接口,用于定义与数据库交互的 SQL 操作。
2. 使用注解的 Mapper 语法
- MyBatis 支持使用注解来定义 SQL 语句,不需要使用 XML 配置。
- 常见注解:
@Select:查询操作@Insert:插入操作@Update:更新操作@Delete:删除操作
示例:
java
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.annotations.Delete;
public interface UserMapper {
// 使用注解定义查询
@Select("SELECT * FROM users WHERE id = #{id}")
User getUserById(int id);
// 插入数据
@Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")
void insertUser(User user);
// 更新数据
@Update("UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}")
void updateUser(User user);
// 删除数据
@Delete("DELETE FROM users WHERE id = #{id}")
void deleteUser(int id);
}3. 使用 XML 配置的 Mapper 语法
- 在 XML 配置中定义 SQL 语句,Java 接口中只定义方法。
- 每个 Mapper 对应一个 XML 文件,XML 文件中使用
<select>,<insert>,<update>,<delete>标签来定义 SQL 操作。
a. Java 接口:
java
public interface UserMapper {
User getUserById(int id);
void insertUser(User user);
void updateUser(User user);
void deleteUser(int id);
}b. Mapper XML 文件:
xml
<mapper namespace="com.example.UserMapper">
<!-- 查询用户 -->
<select id="getUserById" parameterType="int" resultType="com.example.User">
SELECT * FROM users WHERE id = #{id}
</select>
<!-- 插入用户 -->
<insert id="insertUser" parameterType="com.example.User">
INSERT INTO users(name, age) VALUES(#{name}, #{age})
</insert>
<!-- 更新用户 -->
<update id="updateUser" parameterType="com.example.User">
UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}
</update>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="int">
DELETE FROM users WHERE id = #{id}
</delete>
</mapper>4. 常用 Mapper 操作
- 查询操作 (
@Select,<select>):- 单条查询返回对象:
User getUserById(int id); - 多条查询返回列表:
List<User> getAllUsers();
- 单条查询返回对象:
- 插入操作 (
@Insert,<insert>):- 插入记录:
void insertUser(User user);
- 插入记录:
- 更新操作 (
@Update,<update>):- 更新记录:
void updateUser(User user);
- 更新记录:
- 删除操作 (
@Delete,<delete>):- 删除记录:
void deleteUser(int id);
- 删除记录:
5. 动态 SQL 支持
- MyBatis 提供了多种动态 SQL 标签,支持动态构建 SQL 查询。
- 常见标签:
<if>:条件判断<choose>:类似if-else语句<where>:自动添加WHERE关键字<set>:用于UPDATE语句中的动态字段更新
示例:动态查询
xml
<select id="getUsers" resultType="com.example.User">
SELECT * FROM users
<where>
<if test="name != null">AND name = #{name}</if>
<if test="age != null">AND age = #{age}</if>
</where>
</select>6. 注解与 XML 配置的比较
- 注解方式:适用于简单的 SQL 操作,代码简洁,不需要 XML 配置。
- XML 配置方式:适用于复杂的 SQL 操作,支持更多动态 SQL 特性,适合项目中 SQL 语句比较复杂的场景。
7. 参数和返回类型
parameterType:指定 SQL 语句的输入参数类型。resultType:指定 SQL 查询结果的返回类型。
8. 总结
- MyBatis 提供了灵活的方式来操作数据库,可以通过注解或者 XML 来定义 SQL 语句。
- 使用
Mapper可以有效地将 SQL 语句与 Java 方法绑定,简化数据库操作。