使用Mapper对单表进行增删改查

发布时间:2021-06-23 11:49:34 作者:chen
来源:亿速云 阅读:170
# 使用Mapper对单表进行增删改查

## 一、前言

在Java企业级开发中,MyBatis作为一款优秀的持久层框架,通过Mapper接口与XML映射文件的结合,极大简化了数据库操作。本文将详细介绍如何使用MyBatis Mapper对数据库单表进行基础的CRUD(增删改查)操作。

## 二、环境准备

### 1. 依赖配置
```xml
<!-- MyBatis核心依赖 -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.6</version>
</dependency>

<!-- 数据库驱动(以MySQL为例) -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.28</version>
</dependency>

2. 数据表示例

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

三、Mapper接口定义

public interface UserMapper {
    // 插入数据
    int insert(User user);
    
    // 根据ID删除
    int deleteById(Integer id);
    
    // 更新数据
    int update(User user);
    
    // 根据ID查询
    User selectById(Integer id);
    
    // 查询全部
    List<User> selectAll();
}

四、XML映射文件配置

UserMapper.xml 文件示例:

<mapper namespace="com.example.mapper.UserMapper">
    <!-- 插入操作 -->
    <insert id="insert" parameterType="com.example.entity.User">
        INSERT INTO user(username, password, age)
        VALUES(#{username}, #{password}, #{age})
    </insert>

    <!-- 删除操作 -->
    <delete id="deleteById" parameterType="int">
        DELETE FROM user WHERE id = #{id}
    </delete>

    <!-- 更新操作 -->
    <update id="update" parameterType="com.example.entity.User">
        UPDATE user SET
        username = #{username},
        password = #{password},
        age = #{age}
        WHERE id = #{id}
    </update>

    <!-- 查询操作 -->
    <select id="selectById" parameterType="int" resultType="com.example.entity.User">
        SELECT * FROM user WHERE id = #{id}
    </select>

    <select id="selectAll" resultType="com.example.entity.User">
        SELECT * FROM user
    </select>
</mapper>

五、核心操作详解

1. 新增数据(Create)

User user = new User();
user.setUsername("test");
user.setPassword("123456");
user.setAge(25);

int rows = userMapper.insert(user);
System.out.println("影响行数:" + rows);

2. 删除数据(Delete)

int rows = userMapper.deleteById(1);
if(rows > 0){
    System.out.println("删除成功");
}

3. 修改数据(Update)

User user = userMapper.selectById(2);
user.setPassword("654321");
int rows = userMapper.update(user);

4. 查询数据(Retrieve)

// 单条查询
User user = userMapper.selectById(2);
System.out.println(user);

// 列表查询
List<User> users = userMapper.selectAll();
users.forEach(System.out::println);

六、高级技巧

1. 主键回填

<insert id="insert" parameterType="User" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO user(username, password, age)
    VALUES(#{username}, #{password}, #{age})
</insert>

2. 动态SQL

<update id="updateSelective" parameterType="User">
    UPDATE user
    <set>
        <if test="username != null">username = #{username},</if>
        <if test="password != null">password = #{password},</if>
        <if test="age != null">age = #{age}</if>
    </set>
    WHERE id = #{id}
</update>

七、常见问题

  1. 参数匹配问题:确保#{}中的名称与实体属性一致
  2. 结果映射异常:检查resultType是否配置正确
  3. SQL注入风险:始终使用#{}而非${}进行参数传递

八、总结

通过MyBatis Mapper操作单表,开发者可以: - 避免手动编写JDBC代码 - 通过XML实现SQL与Java代码解耦 - 灵活运用动态SQL处理复杂场景 - 提高数据库操作的安全性和可维护性

建议在实际开发中结合MyBatis-Plus等增强工具,可以进一步简化单表操作。 “`

推荐阅读:
  1. sybase使用bcp进行单表备份恢复
  2. 如何理解django模板及单表ORM增删改查

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mapper

上一篇:确保线程安全的单例模式怎么写

下一篇:Java设计模式中依赖倒置的原理

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》