MyBatis CURD操作深度解析

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
简介: MyBatis提供了<insert>、<update>和<delete>等元素来执行插入、更新和删除操作。以下是一个简单的插入操作的例子

MyBatis作为一款优秀的Java持久层框架,提供了强大的CURD(Create, Update, Read, Delete)操作支持。在本文中,我们将深入探讨如何在MyBatis中执行简单的查询,以及如何进行插入、更新和删除操作。同时,我们还将详细解释MyBatis中的selectKey元素的作用。

a98088ccf6878df7718adc1252dc6722_18edc9bf2e7247e799822098cc611266.png


简单查询操作

在MyBatis中执行简单的查询操作通常涉及到使用<select>元素。以下是一个简单的例子:

<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <select id="getUserById" resultType="User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>


在这个例子中,我们定义了一个名为getUserById的查询操作,通过#{id}引用参数。resultType="User"表示我们期望的查询结果将映射到User对象。


接下来,我们可以在Java代码中调用这个查询操作:


// UserDao.java
public interface UserDao {
    User getUserById(int id);
}


// UserDaoImpl.java
public class UserDaoImpl implements UserDao {
    private SqlSessionFactory sqlSessionFactory;
    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }
    @Override
    public User getUserById(int id) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            return sqlSession.selectOne("com.example.UserMapper.getUserById", id);
        }
    }
}


在这里,我们使用SqlSession的selectOne方法执行查询操作,指定了查询的命名空间和操作ID。这样,我们就能够根据用户ID获取对应的用户信息。


插入、更新和删除操作

MyBatis提供了<insert>、<update>和<delete>等元素来执行插入、更新和删除操作。以下是一个简单的插入操作的例子:


<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <insert id="insertUser" parameterType="User">
        INSERT INTO users (username, email) VALUES (#{username}, #{email})
    </insert>
</mapper>


在这个例子中,我们定义了一个名为insertUser的插入操作,使用#{username}和#{email}引用User对象的属性。


类似地,更新和删除操作可以通过<update>和<delete>元素进行定义。


<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <update id="updateUser" parameterType="User">
        UPDATE users SET username = #{username}, email = #{email} WHERE id = #{id}
    </update>
    <delete id="deleteUserById" parameterType="int">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>


在Java代码中,我们可以分别调用SqlSession的insert、update和delete方法来执行这些操作。

// UserDao.java
public interface UserDao {
    void insertUser(User user);
    void updateUser(User user);
    void deleteUserById(int id);
}


// UserDaoImpl.java
public class UserDaoImpl implements UserDao {
    private SqlSessionFactory sqlSessionFactory;
    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }
    @Override
    public void insertUser(User user) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            sqlSession.insert("com.example.UserMapper.insertUser", user);
            sqlSession.commit();
        }
    }
    @Override
    public void updateUser(User user) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            sqlSession.update("com.example.UserMapper.updateUser", user);
            sqlSession.commit();
        }
    }
    @Override
    public void deleteUserById(int id) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            sqlSession.delete("com.example.UserMapper.deleteUserById", id);
            sqlSession.commit();



在这里,我们分别实现了插入、更新和删除操作。需要注意的是,我们在每个操作执行后都调用了commit方法提交事务。

selectKey元素的作用

selectKey元素是MyBatis中一个比较特殊且强大的元素,它通常用于在执行插入操作后获取生成的主键值。以下是一个使用selectKey元素的例子:


<!-- UserMapper.xml -->
<mapper namespace="com.example.UserMapper">
    <insert id="insertUser" parameterType="User">
        <selectKey keyProperty="id" resultType="int" order="AFTER">
            SELECT LAST_INSERT_ID()
        </selectKey>
        INSERT INTO users (username, email) VALUES (#{username}, #{email})
    </insert>
</mapper>


在这个例子中,selectKey元素的作用是在插入操作后执行SELECT LAST_INSERT_ID()语句,获取生成的主键值,并将其设置到User对象的id属性中。


// UserDao.java
public interface UserDao {
    void insertUser(User user);
}
1
2
3
4
// UserDaoImpl.java
public class UserDaoImpl implements UserDao {
    private SqlSessionFactory sqlSessionFactory;
    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }
    @Override
    public void insertUser(User user) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            sqlSession.insert("com.example.UserMapper.insertUser", user);
            sqlSession.commit();
            System.out.println("Generated ID after insertion: " + user.getId());
        }
    }
}


在Java代码中,我们仍然只需要调用insertUser方法,而不用手动设置主键值。


结语

MyBatis提供了丰富而强大的CURD操作支持,通过简单的配置和映射文件,我们能够轻松地实现对数据库的增、删、改、查。同时,selectKey元素的灵活运用使得获取生成的主键值变得非常方便。在实际项目中,对这些CURD操作的熟练运用将对数据持久层的开发产生积极的影响。

相关文章
|
5月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
227 1
|
4月前
|
SQL Java 数据库连接
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
157 0
|
7月前
|
SQL 存储 Java
Mybatis源码解析:详述初始化过程
以上就是MyBatis的初始化过程,这个过程主要包括SqlSessionFactory的创建、配置文件的解析和加载、映射文件的加载、SqlSession的创建、SQL的执行和SqlSession的关闭。这个过程涉及到了MyBatis的核心类和接口,包括SqlSessionFactory、SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、Configuration、SqlSession和Executor等。通过这个过程,我们可以看出MyBatis的灵活性和强大性,它可以很好地支持定制化SQL、存储过程以及高级映射,同时也避免了几
139 20
|
8月前
|
Java 关系型数据库 数据库连接
Javaweb之Mybatis入门程序的详细解析
本文详细介绍了一个MyBatis入门程序的创建过程,从环境准备、Maven项目创建、MyBatis配置、实体类和Mapper接口的定义,到工具类和测试类的编写。通过这个示例,读者可以了解MyBatis的基本使用方法,并在实际项目中应用这些知识。
207 11
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
SQL 安全 数据库
Ruby on Rails 数据库迁移操作深度解析
【7月更文挑战第19天】Rails 的数据库迁移功能是一个强大的工具,它帮助开发者以版本控制的方式管理数据库结构的变更。通过遵循最佳实践,并合理利用 Rails 提供的迁移命令和方法,我们可以更加高效、安全地管理数据库结构,确保应用的稳定性和可扩展性。
|
存储 算法 搜索推荐
深入解析String数组的操作与性能优化策略
深入解析String数组的操作与性能优化策略
|
SQL 缓存 Java
使用MyBatis优化Java持久层操作
使用MyBatis优化Java持久层操作
|
存储 数据管理 数据库
CRUD操作实战:从理论到代码实现的全面解析
【7月更文挑战第4天】在软件开发领域,CRUD代表了数据管理的四个基本操作:创建(Create)、读取(Read)、更新(Update)和删除(Delete)。这四个操作构成了大多数应用程序数据交互的核心。本文将深入讲解CRUD概念,并通过一个简单的代码示例,展示如何在实际项目中实现这些操作。我们将使用Python语言结合SQLite数据库来演示,因为它们的轻量级特性和易用性非常适合教学目的。
1396 2

推荐镜像

更多
  • DNS