详解MyBatis增删改查SQL案例实战

 更新时间:2026年03月20日 09:14:38   作者:一个差不多的先生  
本文通过具体的SQL案例,详细介绍了MyBatis的增删改查操作,通过灵活的Mapper接口和XML配置,MyBatis能够实现高效的数据操作,同时支持动态SQL和批量操作,极大地提升了开发效率,感兴趣的可以了解一下

在Java开发中,MyBatis是一款非常流行的持久层框架,它通过灵活的SQL操作和强大的映射功能,极大地简化了数据库开发。本文将通过具体的SQL案例,详细讲解MyBatis的增删改查(CRUD)操作。

一、环境准备

假设我们有一个User表,表结构如下:

字段名数据类型描述
idINT主键
usernameVARCHAR用户名
passwordVARCHAR密码
emailVARCHAR邮箱

对应的实体类User如下:

public class User {
    private Integer id;
    private String username;
    private String password;
    private String email;

    // Getter和Setter方法
}

二、增删改查操作

1. 插入操作(Insert)

Mapper接口方法

int insertUser(User user);

Mapper XML配置

<insert id="insertUser" parameterType="User">
    INSERT INTO user (username, password, email)
    VALUES (#{username}, #{password}, #{email})
</insert>

调用示例

User user = new User();
user.setUsername("testUser");
user.setPassword("123456");
user.setEmail("test@example.com");

int result = userMapper.insertUser(user);
System.out.println("插入结果:" + result); // 影响的行数

2. 查询操作(Select)

Mapper接口方法

User getUserById(Integer id);

Mapper XML配置

<select id="getUserById" parameterType="int" resultType="User">
    SELECT * FROM user WHERE id = #{id}
</select>

调用示例

User user = userMapper.getUserById(1);
System.out.println("查询结果:" + user.getUsername());

3. 更新操作(Update)

Mapper接口方法

int updateUser(User user);

Mapper XML配置

<update id="updateUser" parameterType="User">
    UPDATE user
    SET username = #{username},
        password = #{password},
        email = #{email}
    WHERE id = #{id}
</update>

调用示例

User user = new User();
user.setId(1);
user.setUsername("updatedUser");
user.setPassword("newPassword");
user.setEmail("updated@example.com");

int result = userMapper.updateUser(user);
System.out.println("更新结果:" + result); // 影响的行数

4. 删除操作(Delete)

Mapper接口方法

int deleteUserById(Integer id);

Mapper XML配置

<delete id="deleteUserById" parameterType="int">
    DELETE FROM user WHERE id = #{id}
</delete>

调用示例

int result = userMapper.deleteUserById(1);
System.out.println("删除结果:" + result); // 影响的行数

三、动态SQL与批量操作

1. 动态SQL

MyBatis支持动态SQL,可以根据条件动态拼接SQL语句。例如,实现一个模糊查询:

Mapper接口方法

List<User> searchUsers(@Param("keyword") String keyword);

Mapper XML配置

<select id="searchUsers" resultType="User">
    SELECT * FROM user
    WHERE username LIKE CONCAT('%', #{keyword}, '%')
</select>

调用示例

List<User> users = userMapper.searchUsers("test");
users.forEach(user -> System.out.println(user.getUsername()));

2. 批量操作

MyBatis也支持批量操作,例如批量插入:

Mapper接口方法

int insertBatch(List<User> users);

Mapper XML配置

<insert id="insertBatch" parameterType="list">
    INSERT INTO user (username, password, email)
    VALUES
    <foreach collection="list" item="user" separator=",">
        (#{user.username}, #{user.password}, #{user.email})
    </foreach>
</insert>

调用示例

List<User> users = new ArrayList<>();
users.add(new User("user1", "123", "user1@example.com"));
users.add(new User("user2", "456", "user2@example.com"));

int result = userMapper.insertBatch(users);
System.out.println("批量插入结果:" + result);

四、总结

本文通过具体的SQL案例,详细介绍了MyBatis的增删改查操作。通过灵活的Mapper接口和XML配置,MyBatis能够实现高效的数据操作,同时支持动态SQL和批量操作,极大地提升了开发效率。希望本文能帮助你更好地掌握MyBatis的核心功能,提升开发能力。

到此这篇关于详解MyBatis增删改查SQL案例实战的文章就介绍到这了,更多相关MyBatis增删改查SQL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot与Redis的缓存一致性问题解决

    Spring Boot与Redis的缓存一致性问题解决

    在使用缓存时,缓存一致性问题是一个常见的挑战,本文主要介绍了Spring Boot与Redis的缓存一致性问题,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • springboot整合quartz实例demo

    springboot整合quartz实例demo

    Quartz是一个开源的任务调度框架。基于定时、定期的策略来执行任务是它的核心功能,比如x年x月的每个星期五上午8点到9点,每隔10分钟执行1次,本文重点给大家介绍springboot整合quartz的实例代码,感兴趣的朋友一起看看吧
    2022-02-02
  • 一文详解如何排查定位Java中的死锁

    一文详解如何排查定位Java中的死锁

    在当今数字化时代,微服务架构凭借其高可扩展性、灵活性和易于维护等优势,成为了众多企业构建大型应用系统的首选架构模式,当我们将微服务部署在 Linux 服务器上时,有时会遭遇令人头疼的死锁问题,本位给大家介绍了如何排查定位Java中的死锁,需要的朋友可以参考下
    2025-02-02
  • springboot根据启动文件关闭定时任务的解决方法

    springboot根据启动文件关闭定时任务的解决方法

    本文给大家介绍springboot根据启动文件关闭定时任务的解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-08-08
  • java与scala数组及集合的基本操作对比

    java与scala数组及集合的基本操作对比

    这篇文章主要介绍了java与scala数组及集合的基本操作对比,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • IKAnalyzer结合Lucene实现中文分词(示例讲解)

    IKAnalyzer结合Lucene实现中文分词(示例讲解)

    下面小编就为大家带来一篇IKAnalyzer结合Lucene实现中文分词(示例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • java字符串与格式化输出的深入分析

    java字符串与格式化输出的深入分析

    本篇文章是对java字符串与格式化输出进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 浅谈Java中ThreadLocal内存泄露的原因及处理方式

    浅谈Java中ThreadLocal内存泄露的原因及处理方式

    内存泄漏就是我们申请了内存,但是该内存一直无法释放,就会导致内存溢出问题,本文详细的介绍了ThreadLocal内存泄露的原因及处理方式,感兴趣的可以了解一下
    2023-05-05
  • MyBatis常用动态sql大总结

    MyBatis常用动态sql大总结

    这篇文章主要给大家介绍了关于MyBatis常用动态sql的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Java如何打印完整的堆栈信息

    Java如何打印完整的堆栈信息

    这篇文章主要为大家介绍了Java如何打印完整的堆栈信息示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05

最新评论