Skip to content

同时支持不同数据库

不同的数据库可能语法差异比较大,如何同时支持?

针对不同数据库执行不同的SQL

QueryChain,UpdateChain,DeleteChain,InsertChain 均支持

java
SysUser sysUser = QueryChain.of(sysUserMapper)
        .select(SysUser::getId)
        // dbAdapt((query, selector) 可以多次
        .dbAdapt((query, selector) -> {
            selector.when(DbType.H2, () -> {
                    //H2 拼接 id = 3
                    query.eq(SysUser::getId, 3);
                }).when(DbType.MYSQL, () -> {
                    //MYSQL 拼接 id = 3
                    query.eq(SysUser::getId, 2);
                }).otherwise(() -> {
                    //其他 拼接 id = 3
                    query.eq(SysUser::getId, 1);
                });
        })
        .get();

或 (大差异情况下使用)

java
SysUser sysUser = sysUserMapper.dbAdapt(selector -> {
    selector.when(DbType.H2, () -> {
        return sysUserMapper.getById(1);
    }).when(DbType.MYSQL, () -> {
        return sysUserMapper.getById(2);
    }).otherwise(() -> {
        return sysUserMapper.getById(3);
    });
});