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日

相关文章

  • shell传参并将参数传递给sql文件的方法

    shell传参并将参数传递给sql文件的方法可以通过以下步骤来实现: 在shell脚本中使用$1, $2, $3等变量表示传入的参数。其中$1表示第一个参数,$2表示第二个参数,以此类推。 将参数传递给sql文件可以使用以下方式: “` #!/bin/bash # 定义变量 user=$1 password=$2 # 执行sql文件并传递参数 mysql …

    database 2023年5月22日
    00
  • 用MySQL创建数据库和数据库表代码

    以下是用MySQL创建数据库和数据库表代码的完整攻略: 创建数据库 登录MySQL数据库。在终端中输入命令:mysql -u username -p,其中username为你的用户名,按回车后输入对应的密码。 创建数据库。在终端中输入命令:CREATE DATABASE database_name;,其中database_name为你想要创建的数据库名称。 …

    database 2023年5月22日
    00
  • mysql 按照时间段来获取数据的方法

    获取 MySQL 数据库中某个时间段之内的数据是开发中经常遇到的问题,在 MySQL 中,可以使用 WHERE 子句的 BETWEEN 运算符或者 > 和 < 运算符来实现。下面是具体步骤: 步骤一:准备数据 首先,我们需要准备一张包含时间信息的表,例如: CREATE TABLE `mytable` ( `id` int(11) NOT NUL…

    database 2023年5月22日
    00
  • Redis持久化RDB和AOF区别详解

    Redis持久化RDB和AOF区别详解 Redis作为一款高性能的缓存数据库,提供了两种持久化方式:RDB和AOF。这两种方式有着不同的适用场景和优缺点,下面我们来一一分析。 RDB持久化 RDB持久化是指将当前Redis数据库的数据生成快照文件,存储在磁盘上。RDB文件是一个经过压缩的二进制文件,包含了存储在Redis数据库中的所有数据,可以用于恢复数据。…

    database 2023年5月22日
    00
  • SELINUX工作原理详解

    SELinux工作原理详解 什么是SELinux SELinux(Security-Enhanced Linux)是Linux操作系统的一个安全模块,它提供了一种安全控制机制,用于实现访问控制、上下文管理、强制访问控制(MAC)、核心安全策略、可扩展性以及审计等功能,可以增强系统的安全性。 SELinux工作原理 SELinux的核心是安全策略,所有的访问都…

    database 2023年5月22日
    00
  • 解决explorer.exe 应用程序错误,内存不能为 read或written的解决方法小结

    解决explorer.exe应用程序错误内存不能为read或written的问题,具体方法如下: 问题描述 当点击文件夹或运行某些应用程序时,Windows操作系统上可能会出现一个错误提示,指出explorer.exe应用程序发生了错误。错误的详细描述是“0x000000XX内存不能为read或written”。这个错误通常是由于操作系统中的某些系统文件或应…

    database 2023年5月21日
    00
  • MySQL的逻辑架构及工作全流程

    MySQL是一种常用的关系型数据库管理系统。下面是MySQL逻辑架构及工作全流程的完整攻略。 MySQL逻辑架构 MySQL的逻辑架构可以分为以下三个部分: 连接器 连接器负责处理客户端的连接请求,验证用户身份和权限,并管理和维护连接。在收到连接请求后,连接器会尝试和客户端建立连接,验证用户身份和权限。如果验证通过,则连接器会创建一个线程,并为该线程分配一个…

    database 2023年5月19日
    00
  • 一种异步延迟队列的实现方式

    目前系统中有很多需要用到延时处理的功能:支付超时取消、排队超时、短信、微信等提醒延迟发送、token刷新、会员卡过期等等。通过延时处理,极大的节省系统的资源,不必轮询数据库处理任务。 目前大部分功能通过定时任务完成,定时任务还分使用quartz及xxljob两种类型轮询时间短,每秒执行一次,对数据库造成一定的压力,并且会有1秒的误差。轮询时间久,如30分钟一…

    2023年4月10日
    00
合作推广
合作推广
分享本页
返回顶部