虚谷数据库整合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)