虚谷数据库整合mybatisplus问题总结

本文总结了虚谷数据库整合MybatisPlus时遇到的两大问题:1) 表名前是否需要添加模式名,解决方案包括使用@TableAnnotation指定、实现Interceptor接口以及统一用户名和模式名;2) Java数据类型与数据库不匹配,建议更改Java数据类型或自定义TypeHandler进行处理。
摘要由CSDN通过智能技术生成

虚谷数据库整合mybatisplus问题总结

一、 表名前是否增加模式名(表或视图不存在 ):

1. 场景:

例如:
url: jdbc:xugu://127.0.0.1:5138/CMA?return_rowid=true
username: SYSDBA
password: SYSDBA

用户名为SYSDBA,在不指定具体访问哪个模式的情况下,默认会访问CMA库下的模式为SYSDBA下的表,
如果我们的用户为SYSDBA,我们想访问的表也在SYSDBA模式下,不用加模式名,否则就得加模式名。

注意:虚谷数据库中不同于mysql,数据库下面就是表、视图等,数据库下还有一层是模式,
模式下面才是表、视图等。

在这里插入图片描述

2. 解决方案:

2.1 @TableName(value = “模式名.表名”)

这中解决方案有局限性,如果我们依赖公司架构开发的基础包(基础框架),我们不可能改变别人的代码,
所以在这种情况下并不适用。

2.2 实现Interceptor接口

通过拦截所有sql语句,在表名前面加上模式名

import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.cache.CacheKey;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.mapping.SqlSource;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Plugin;
import org.apache.ibatis.plugin.Signature;
import org.apache.ibatis.reflection.DefaultReflectorFactory;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.factory.DefaultObjectFactory;
import org.apache.ibatis.reflection.wrapper.DefaultObjectWrapperFactory;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;


/**
 * @author shuo_
 */
@Intercepts(value = {
   
        @Signature(type = Executor.class,
                method = "update",
                args = {
   MappedStatement.class, Object.class}),
        @Signature(type = Executor.class,
                method = "query",
                args = {
   MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class,
                        CacheKey.class, BoundSql.class}),
        @Signature(type = Executor.class,
                method = "query",
                args = {
   MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})})
public class MybatisSqlInterceptor implements Interceptor {
   

    @Override
    public Object intercept(Invocation invocation) 
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值