MyBatis Mapper映射与动态SQL实践
发布时间: 2023-12-26 19:24:03 阅读量: 22 订阅数: 21
# 1. MyBatis简介与Mapper映射原理
## 1.1 MyBatis框架概述
MyBatis是一个优秀的持久层框架,它在传统的JDBC的基础上进行了封装和扩展,简化了数据库操作的流程,提供了更加灵活的数据库访问方式。MyBatis支持多种数据库,具有良好的SQL编写和调试能力,可与各大主流Java框架无缝集成。
## 1.2 Mapper接口与Mapper映射文件的关系
在MyBatis中,Mapper映射文件是实现数据持久化操作的关键,它定义了SQL语句和映射规则。Mapper接口是Mapper映射文件的对应接口,在接口中定义了方法与SQL语句的映射关系。通过Mapper接口和Mapper映射文件的配合使用,可以实现简洁、灵活的数据库操作。
## 1.3 Mapper映射文件的基本结构
Mapper映射文件是一个XML文件,它包含了一系列的SQL语句定义和映射规则。一个完整的Mapper映射文件由<Mapper>标签包裹,其中包含了<resultMap>、<select>、<insert>、<update>、<delete>等标签,分别对应查询、插入、更新、删除等操作。
下面是一个简单的Mapper映射文件示例:
```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.dao.UserDao">
<resultMap id="userResultMap" type="com.example.entity.User">
<id column="id" property="id"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
</resultMap>
<select id="getUserById" resultMap="userResultMap">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insertUser" parameterType="com.example.entity.User">
INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>
<update id="updateUser" parameterType="com.example.entity.User">
UPDATE user SET username = #{username}, password = #{password} WHERE id = #{id}
</update>
<delete id="deleteUserById" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
```
以上是第一章的内容,介绍了MyBatis框架概述、Mapper接口与Mapper映射文件的关系,以及Mapper映射文件的基本结构。在后续章节中,我们将深入探讨Mapper映射配置、动态SQL等相关内容。
# 2. Mapper映射配置与CRUD操作实践
### 2.1 数据库表与实体类的映射
在使用MyBatis进行数据库操作时,首先需要将数据库表的结构与实体类进行映射。具体的映射方式通常有两种:注解方式和XML配置方式。这里我们选择XML配置方式进行映射。
首先,在项目的resources目录下创建一个Mapper映射配置文件,命名为`UserMapper.xml`。然后,在该文件中进行数据库表与实体类的映射配置:
```xml
<mapper namespace="com.example.mapper.UserMapper">
<!-- 配置数据库表与实体类的映射关系 -->
<resultMap id="userMap" type="com.example.entity.User">
<id property="id" column="user_id" />
<result property="name" column="user_name" />
<result property="age" column="user_age" />
<result property="gender" column="user_gender" />
</resultMap>
<!-- 配置SQL语句 -->
<select id="getUserById" resultMap="userMap">
SELECT * FROM user WHERE user_id = #{id}
</select>
<!-- 其他CRUD操作的映射配置 -->
...
</mapper>
```
在上面的配置中,我们首先定义了一个`<resultMap>`标签,用于配置数据库表与实体类的映射关系。其中,`id`属性指定了该映射的唯一标识,`type`属性指定了实体类的全限定类名,`<id>`和`<result>`标签分别配置了主键和普通字段的映射关系。
接下来,我们使用`<select>`标签配置了一个查询语句,该语句用于根据用户ID查询用户信息。`id`属性指定了该查询语句的唯一标识,`resultMap`属性指定了查询结果的映射关系,`${id}`是动态传入的参数。
其他CRUD操作的映射配置与此类似,可以根据实际情况进行配置。
### 2.2 Mapper映射配置实例解析
上一节我们已经完成了数据库表与实体类的映射配置,接下来我们将对Mapper映射配置文件进行解析,以便能够使用这些配置来进行数据库操作。
```java
package com.example.mapper;
import com.example.entity.User;
public interface UserMapper {
User getUserById(Long id);
// 其他CRUD操作的方法定义
}
```
在上面的示例代码中,我们定义了一个`UserMapper`接口,其中包含了一个根据用户ID查询用户信息的方法`getUserById`。该方法将返回一个`User`对象,用于封装查询结果。
### 2.3 实现基本的增删改查操作
在完成Mapper映射配置文件和Mapper接口的定义后,我们接下来需要实现这些方法的具体逻辑,以便能够进行数据库操作。具体的实现方式通常有两种:手动编写SQL语句和使用MyBatis提供的动态SQL语法。
这里我们以手动编写SQL语句的方式进行示例,以实现基本的增删改查操作为例:
```java
package com.example.mapper;
import com.example.entity.User;
import org.apache.ibatis.annotations.Param;
public interface UserMapper {
User getUserById(@Param("id") Long id);
int addUser(User user);
int updateUser(User user);
int deleteUser(@Param("id") Long id);
}
```
在上面的示例代码中,我们通过注解`@Param`指定了参数的名称,以便在Mapper映射配置文件中引用。接下来,我们可
0
0