Mybatis注解方式操作Oracle数据库详解

Mybatis注解方式操作Oracle数据库详解

1. 前言

Mybatis 是一种优秀的持久化框架,可以使数据访问层代码变得简洁而有扩展性。在Mybatis中,有两种配置方式(xml映射和注解映射),其中注解配置方式简单,直观,快速,特别适合针对简单的语句进行编程。

本文主要介绍在Oracle数据库中使用 Mybatis 注解方式的详细步骤。

2. 添加依赖

在 pom.xml 文件中添加以下依赖:

<!--Mybatis-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.5</version>
</dependency>

<!--Oracle数据库-->
<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc10</artifactId>
    <version>19.7.0.0</version>
</dependency>

3. 创建数据库连接配置文件

在 src/main/resources 目录下创建 mybatis-config.xml 配置文件,用于配置 Mybatis 的一些全局属性以及数据库连接信息。示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.driver.OracleDriver" />
                <property name="url" value="jdbc:oracle:thin:@localhost:1521:ORCL" />
                <property name="username" value="scott" />
                <property name="password" value="tiger" />
            </dataSource>
        </environment>
    </environments>
</configuration>

注:其中的数据库连接信息需要替换成自己的实际配置信息。

4. 创建实体类

创建与数据库表对应的实体类,要求实体类中属性的名称与数据库中字段名保持一致。示例:

public class User {
    private Long id;
    private String name;
    private Integer age;

    // getter 和 setter ...
}

5. 创建映射文件

在 src/main/resources 目录下创建对应表的映射文件 UserMapper.xml,同时在 mybatis-config.xml 文件中添加映射文件的引用。

示例 UserMapper.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatisdemo.mapper.UserMapper">
    <select id="selectAll" resultType="com.example.mybatisdemo.entity.User">
        SELECT * FROM user;
    </select>
    <select id="selectById" resultType="com.example.mybatisdemo.entity.User">
        SELECT * FROM user WHERE id = #{id};
    </select>
    <insert id="insert" parameterType="com.example.mybatisdemo.entity.User">
        INSERT INTO user VALUES(seq_user.nextval, #{name}, #{age})
    </insert>
    <update id="update" parameterType="com.example.mybatisdemo.entity.User">
        UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
    </update>
    <delete id="deleteById" parameterType="Long">
        DELETE FROM user WHERE id = #{id}
    </delete>
</mapper>

注:其中语句中的表名、序列名、字段名需要替换成自己实际的配置。

6. 创建Mapper接口

在 Java 代码中创建 Mapper 接口,在接口中定义需要操作的 SQL 语句。Mybatis 会通过接口及其对应的 XML 映射文件为我们自动生成对应的实现类。

示例 UserMapper.java:

public interface UserMapper {
    List<User> selectAll();
    User selectById(Long id);
    void insert(User user);
    void update(User user);
    void deleteById(Long id);
}

7. 注解方式配置Mapper

在 Mapper 接口的方法上使用对应的注解,指定其对应的 SQL 语句。

注解 说明
@Select 查询语句
@Insert 插入语句
@Update 更新语句
@Delete 删除语句

示例:

public interface UserMapper {
    @Select("SELECT * FROM user")
    List<User> selectAll();

    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectById(Long id);

    @Insert("INSERT INTO user VALUES(seq_user.nextval, #{name}, #{age})")
    void insert(User user);

    @Update("UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}")
    void update(User user);

    @Delete("DELETE FROM user WHERE id = #{id}")
    void deleteById(Long id);
}

注:在注解中的 SQL 语句可以使用${}和#{}作为占位符,其中#{}会自动转义防止 SQL 注入攻击。

8. 测试

最后,在测试类中实例化相应的 Mapper,并调用其中的方法进行测试。

示例:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTests {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelectAll() {
        List<User> userList = userMapper.selectAll();
        Assert.assertEquals(2, userList.size());
    }

    @Test
    public void testSelectById() {
        User user = userMapper.selectById(1L);
        Assert.assertNotNull(user);
    }

    @Test
    public void testInsert() {
        User user = new User();
        user.setName("张三");
        user.setAge(20);
        userMapper.insert(user);
        Assert.assertNotNull(user.getId());
    }

    @Test
    public void testUpdate() {
        User user = new User();
        user.setId(1L);
        user.setName("李四");
        user.setAge(30);
        userMapper.update(user);
    }

    @Test
    public void testDeleteById() {
        Long id = 1L;
        userMapper.deleteById(id);
        User user = userMapper.selectById(id);
        Assert.assertNull(user);
    }
}

总结

本文简要介绍了在 Oracle 数据库中使用 Mybatis 注解方式的详细步骤,包括添加依赖、创建数据库连接配置文件、创建实体类、创建映射文件、创建 Mapper 接口及其注解配置方式、测试等过程。这是 Mybatis 最多人使用的配置方式之一,非常适合小规模项目的数据访问层编程。

附录

完整的示例代码和配置文件可以从 Github 下载。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis注解方式操作Oracle数据库详解 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • MySQL中的慢查询日志怎么开启

    这篇“MySQL中的慢查询日志怎么开启”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL中的慢查询日志怎么开启”文章吧。 慢查询日志 慢查询日志主要用来记录执行时间超过设置的某个时长的SQL语句,能够帮助数据库维护人员找出执行时间比较长、…

    MySQL 2023年4月11日
    00
  • Linux下编译redis和phpredis的方法

    当在Linux下搭建Web应用时,Redis和phpredis扮演了重要的角色。Redis是一个高性能的Key-Value数据库,而phpredis是PHP的扩展,它允许我们用PHP操作Redis。下面我将分享如何在Linux下编译Redis和phpredis的方法。 编译Redis 步骤一:从官网下载Redis源码包 在官网https://redis.io…

    database 2023年5月22日
    00
  • Java Socket设置timeout的几种常用方式说明

    Java Socket设置timeout的几种常用方式说明 Java Socket是在网络通信中最常用的一个类,它提供了网络通信的基础API。在使用Java Socket进行网络通信时,有时需要设置timeout来避免程序长时间阻塞等待网络返回,导致程序无法响应的情况。本文将介绍Java Socket设置timeout的几种常用方式。 方式一:使用Socke…

    database 2023年5月22日
    00
  • mysql添加索引方法详解(Navicat可视化加索引与sql语句加索引)

    下面是关于“mysql添加索引方法详解(Navicat可视化加索引与sql语句加索引)”的完整攻略: 1. 为什么要添加索引 在MySQL中,我们经常需要对数据进行检索、聚合等操作。当数据量增加时,检索数据的速度会变得非常慢,影响系统的性能,这时,一个好的索引就非常重要了。索引是一种特殊的数据结构,能够大大提高查询数据的速度。 2. Navicat可视化加索…

    database 2023年5月22日
    00
  • MySql存储过程与函数详解

    《MySql存储过程与函数详解》是一篇涉及MySql数据库存储操作的文章,本文将详细讲解MySql存储过程与函数的概念、语法及使用方法,并提供两个示例来帮助读者更好地理解。 MySql存储过程 概念 MySql存储过程是一种预先编写好的用于执行特定任务的程序单元,存储在数据库中,其类似于程序代码的概念,可以通过调用存储过程来完成数据库操作。 语法 创建存储过…

    database 2023年5月22日
    00
  • MySQL数据库中表的操作详解

    MySQL是一个广泛使用的关系型数据库管理系统,它提供了多种操作表的方式,包括创建、删除、修改、查询等。在本文中,我们将深入探讨MySQL数据库中表的操作,提供完整的攻略。 创建表 要创建一个新表,我们需要使用语句CREATE TABLE,并指定表的名称和表中的列。每个列的定义必须包括名称、数据类型和长度。下面是一个创建包含4列的表的示例,其中包含一个自增的…

    database 2023年5月22日
    00
  • MySQL 数据库如何实现存储时间

    要实现在 MySQL 数据库中存储时间,有以下两种常见的方式: 使用 TIMESTAMP 类型 在 MySQL 中,可以使用 TIMESTAMP 类型来存储时间。这种类型存储的时间格式为 YYYY-MM-DD HH:MM:SS,可以精确到秒级别。可以通过以下操作在创建表的时候定义一个 TIMESTAMP 类型的列: CREATE TABLE my_table…

    database 2023年5月22日
    00
  • 数据库中聚簇索引与非聚簇索引的区别[图文]

    数据库中聚簇索引和非聚簇索引是数据库中常用的索引类型,在索引的实现和使用上有很大的区别。接下来我将详细讲解聚簇索引和非聚簇索引的区别。 聚簇索引 聚簇索引是将表中的数据按照索引的顺序进行排列,因此称为聚簇索引或聚集索引。聚簇索引中的叶子节点保存的是整个数据记录,而非聚簇索引的叶子节点只保存索引键和指向数据页的指针。 以下是聚簇索引的示例: CREATE CL…

    database 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部