当前位置:首页 > 数据库 > 正文

mybatis怎么连oracle数据库

Batis连接Oracle需配置数据源,引入驱动依赖,设置URL、用户名及密码等参数,通过XML或注解定义SQL映射

是关于如何使用MyBatis连接Oracle数据库的详细步骤和配置说明:

准备工作

  1. 获取Oracle JDBC驱动:由于Oracle是商业软件,其JDBC驱动未公开发布在Maven中央仓库中,你需要手动下载ojdbc8.jar文件(对应不同版本如8i/11g等),并通过命令将其安装到本地Maven仓库。mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=8.2.0.2.0 -Dpackaging=jar -Dfile=E:ojdbc8.jar,之后可在项目的pom.xml中引入该依赖。
  2. 添加MyBatis相关依赖:若基于Spring Boot开发,建议使用mybatis-spring-boot-starter简化集成过程,在pom.xml中添加如下内容:
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.2</version>
    </dependency>
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.1.0</version>
    </dependency>

配置数据源与事务管理器

方式1:通过Spring Boot的application.properties文件配置

这是最常见的方式,适合快速搭建项目,关键参数包括:
| 属性名 | 示例值 | 说明 |
|————————–|—————————————-|——————————————————————–|
| spring.datasource.driver-class-name | oracle.jdbc.driver.OracleDriver | 指定Oracle专属的JDBC驱动类 |
| spring.datasource.url | jdbc:oracle:thin:@//host:port/serviceName | Thin模式连接字符串,支持简写格式(如IP地址、端口号和服务名) |
| spring.datasource.username | 数据库用户名 | |
| spring.datasource.password | 数据库密码 | |
| mybatis.mapper-locations | classpath:/mapper/.xml | 映射XML文件路径,用于定义SQL语句与实体类的绑定关系 |
| mybatis.type-aliases-package | com.example.entity | 自动扫描指定包下的JavaBean作为别名,减少全限定类名书写 |

注意:URL中的thin协议表示轻量级纯Java实现,无需额外客户端工具;服务名(Service Name)需与Oracle实例的实际配置一致,例如生产环境可能使用类似jdbc:oracle:thin:@192.168.X.X:1521:orcl的形式。

mybatis怎么连oracle数据库  第1张

方式2:原生MyBatis配置文件(mybatis-config.xml)

如果不使用Spring Boot,则需手动创建XML配置文件,核心结构如下:

<configuration>
    <typeAliases>
        <typeAlias type="cn.kgc.myoracle.entity.Users" alias="users"/>
    </typeAliases>
    <environments default="xym">
        <environment id="xym">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
                <property name="url" value="jdbc:oracle:thin:@192.168.221.205:1521:orcl"/>
                <property name="username" value="xym"/>
                <property name="password" value="xym"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/users.xml"/>
    </mappers>
</configuration>

此文件中定义了类型别名、事务管理器类型(默认为JDBC)、连接池策略(如POOLED)以及具体的数据库连接参数。

编写Mapper接口与XML映射文件

  1. 创建实体类:确保字段与数据库表结构匹配,推荐使用Lombok插件自动生成getter/setter方法,例如用户表对应的JavaBean:
    package com.example.demo.entity;
    import lombok.Getter;
    import lombok.Setter;
    @Getter @Setter
    public class User {
        private int id;
        private String order_id; // 对应数据库列名order_id
    }
  2. 定义Mapper接口:声明CRUD操作的方法签名,并添加@Mapper注解以便被扫描注册,示例:
    package com.example.demo.dao;
    import java.util.List;
    import org.apache.ibatis.annotations.Mapper;
    @Mapper
    public interface UserMapper {
        List<User> listUser();          // 查询所有用户
        User findById(int userid);      // 根据ID查找单个用户
        void saveUser(User user);       // 插入新记录
        void delUser(int userid);       // 删除指定ID的数据
        void updateUser(User user);     // 更新现有记录
    }
  3. 编写XML映射文件:以users.xml为例,实现SQL逻辑:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.example.demo.dao.UserMapper">
        <select id="listUser" resultType="com.example.demo.entity.User">
            SELECT  FROM t_user;
        </select>
        <insert id="saveUser" parameterType="com.example.demo.entity.User">
            INSERT INTO t_user(id, order_id) VALUES(#{id}, #{order_id})
        </insert>
        <!-其他增删改查标签类似 -->
    </mapper>

    其中namespace必须与Mapper接口全限定名一致,resultTypeparameterType可引用已注册的类型别名简化书写。

测试连接与调试

  1. 启动应用后验证日志输出:观察控制台是否打印出正常的SQL执行记录,确认驱动加载成功且网络连通性正常,可通过设置mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl启用详细日志。
  2. 执行基础查询:调用UserMapper.listUser()方法,检查是否能正确返回数据库中的数据,若出现异常,优先排查以下几点:
    • 驱动类是否存在于类路径下;
    • URL格式是否符合Oracle规范(尤其是服务名是否正确);
    • 用户名密码是否有权限访问目标Schema;
    • 防火墙是否阻止了指定端口的通信。

高级优化选项

  1. 驼峰命名转换:配置mybatis.configuration.map-underscore-to-camel-case=true,使数据库列如下划线风格的user_name自动映射到Java对象的驼峰属性userName
  2. 连接池调优:调整HikariCP或其他连接池的最大空闲连接数、超时时间等参数,提升高并发场景下的性能表现。
    spring.datasource.max-idle=10
    spring.datasource.min-idle=5
    spring.datasource.initial-size=5
  3. 批量操作支持:在Mapper接口中声明集合类型的参数,配合foreach动态标签实现批量插入或更新,显著减少网络往返次数。

FAQs

Q1:为什么有时会出现“ORA-01887:不是有效的日期格式”?
A:Oracle对日期类型非常敏感,确保Java实体类中的Date字段格式与数据库端的DATE/TIMESTAMP类型严格对应,建议在SQL中使用TO_DATE函数显式转换字符串输入,INSERT INTO table_name (create_time) VALUES (TO_DATE(#{param}, 'YYYY-MM-DD'))

Q2:如何解决“Invalid column name”错误?
A:该错误通常由列名大小写不匹配引起,Oracle默认存储时会将未加引号的标识符转为大写,而MyBatis生成的SQL可能是小写形式,有两种解决方案:①在SQL中使用双引号包裹列名(如”column_name”)强制保留原始大小写;②修改数据库表结构,统一采用全大写或全

0