limit和rownum的区别,做兼容

两个数据库分页还是分批查sql肯定是不兼容的

然后limit的第二个参数是偏移量,不是between xx and yy

其次是limit后面不支持运算符
有种方式是
set @sql = concat(‘select* from user where id= 123456 andcode= 111
and create_date >= 20190101 and create_date <= 20190202 limit’, (1-1)*1,’,20’);
prepare texts from @sql;
execute texts;
使用变量用concat来连接sql,然后这个字符串prepare texts from @sql;执行;
但是很可惜的mybatis中是不能用这个的。。

其次如果在mysql中想要实用类似rownum的话需要使用变量

如下:
Select
@rownum :=@rownum +1 as rownum
From
(select @rownum:=0) varibleT

建一个变量即可,但是很可惜的是不可用在mybatis中,同样

我试了能行的兼容方式:

<select id=''>
<if test="_databaseId=='oracle'">
            select tt.MODEL_ID,
            tt.MODEL_DETAIL_ID,
            tt.COLUMN_NAME,
            tt.DIM_HIERARCHY_CODE,
            tt.sort_num,
            tt.DS_ID,
            tt.DEFINITION_ID,
            tt.rw
            from (select t.MODEL_ID,
            t.MODEL_DETAIL_ID,
            t.COLUMN_NAME,
            t.DIM_HIERARCHY_CODE,
            t.sort_num,
            t.DS_ID,
            t.DEFINITION_ID,
            ROWNUM as rw
            from (select md.MODEL_ID,
            md.MODEL_DETAIL_ID,
            md.COLUMN_NAME,
            md.DIM_HIERARCHY_CODE,
            md.sort_num,
            m.DS_ID,
            m.DEFINITION_ID
            from HRF_MODEL_DETAIL md
            inner join HRF_MODEL m on md.MODEL_ID = m.MODEL_ID
            where md.IS_OPEN = 'Y'
            and md.COLUMN_NAME is not null
            and md.DIM_HIERARCHY_CODE is not null
            order by md.MODEL_ID, md.sort_num, md.COLUMN_NAME) t) tt
            where tt.rw between #{start} and #{end}
        </if>
        <if test="_databaseId=='mysql'">
            select md.MODEL_ID,
            md.MODEL_DETAIL_ID,
            md.COLUMN_NAME,
            md.DIM_HIERARCHY_CODE,
            md.SORT_NUM,
            m.DS_ID,
            m.DEFINITION_ID
            from HRF_MODEL_DETAIL md
            inner join HRF_MODEL m on md.MODEL_ID = m.MODEL_ID
            where md.IS_OPEN = 'Y'
            and md.COLUMN_NAME is not null
            and md.DIM_HIERARCHY_CODE is not null
            order by md.MODEL_ID, md.SORT_NUM, md.COLUMN_NAME
            limit #{start} , #{end}
        </if>
</select>

还有一种写法是用java代码设置数据源类型然后mybatis自动查databaseId为当前环境的
/**

  • 数据源类型适配
  • MyBatis会加载不带databaseId属性和带有匹配当前数据库databaseId属性的所有语句。
  • 如果同时找到了带有databaseId和不带databaseId的相同语句,则不带databaseId的将被舍弃。
    */
@Configuration
public class datasourceTypeConfig {

    @Bean
    public DatabaseIdProvider databaseIdProvider() {
        DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
        Properties p = new Properties();
        p.setProperty("Oracle", "oracle");
        p.setProperty("MySQL", "mysql");
        databaseIdProvider.setProperties(p);
        return databaseIdProvider;
    }
}

然后再mapper.xml中写两个

<select id="" resultType="String" databaseId="mysql">
        xxxx
</select>
<select id="" resultType="String" databaseId="oracle">
        xxxx
</select>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值