使用MyBatis表名变化如何查询

使用MyBatis表名变化的时候如何查询

问题:工作中需要对不同表里的数据进行处理,表名结构 当前日期_plat_event_log

1).SQL语句

使用子查询 但是查询结果无法作为表名(无法实现)

select * from (select concat((select CURDATE()+0),'_plat_event_log')) a;

结果如下

image-20210406153350902

只有表名,mysql无法将我们构造的表名当成表名,具体原因不太明白,只能找替代方法,有哪位大佬知道可以透露一下,不胜感激

一条语句无法达到想要的效果,只能多条语句(可实现)

set @time = concat("select * from ",(select CURDATE()+0),'_plat_event_log');
prepare STML from @time;
execute STML;
2).mybatis注解

Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;

Mybatis在处理 时 , 就 是 把 {}时,就是把 {}替换成变量的值。

使用$而不是#,来自网友原话

image-20210406163224721

3).动态SQL

mapper层添加查询方法 @Param("tableName") String tableName 传入表名

    /**
     * 查询申请列表 自己定义的 在OmsOrderReturnApplySqlProvider类中
     */
    @SelectProvider(type=OmsOrderReturnApplySqlProvider.class, method="getSQL1TableName")
    @Results({
            @Result(column="id", property="id", jdbcType=JdbcType.BIGINT, id=true),
			··· // 此次省略一堆映射字段
            //收货地址表id
            @Result(column="company_address_id", property="companyAddress",
                    one = @One(select="com.weikun.mall.provider.mapper.OmsCompanyAddressMapper.selectByPrimaryKey"))//多对一关系
    })
    List<OmsOrderReturnApply> getOrderReturnApplyList1TableName(
            @Param("tableName") String tableName, // 
            @Param("queryParam") OmsReturnApplyQueryParam queryParam);

编写动态SQL

//得到OrderReturnApply的动态sql
    public String getSQL1TableName(
            String tableName,
            OmsReturnApplyQueryParam queryParam){
        SQL sql = new SQL();
        sql.SELECT("id");
        sql.SELECT("create_time");
        sql.SELECT("member_username");
        sql.SELECT("product_real_price");
        sql.SELECT("product_count");
        sql.SELECT("return_name");
        sql.SELECT("status");
        sql.SELECT("handle_time");
        sql.FROM(tableName); // 非常好用
        sql.WHERE(" 1 = 1");
        if (queryParam.getId()!=null){
            sql.AND().WHERE("id=#{queryParam.id}");
        }
        if (queryParam.getStatus()!=null){
            sql.AND().WHERE("status=#{queryParam.status}");
        }
        if (queryParam.getHandleMan()!=null && queryParam.getHandleMan()!=""){
            sql.AND().WHERE("handle_man=#{queryParam.handleMan}");
        }
        if (queryParam.getCreateTime()!=null && queryParam.getCreateTime()!=""){
            sql.AND().WHERE("create_time like CONCAT(#{queryParam.createTime}, '%')");
        }
        if (queryParam.getHandleTime()!=null && queryParam.getHandleTime()!=""){
            sql.AND().WHERE("handle_time like CONCAT(#{queryParam.handleTime}, '%')");
        }
        if (queryParam.getReceiverKeyword()!=null && queryParam.getReceiverKeyword()!=""){
            sql.AND().WHERE("return_name like CONCAT(#{queryParam.receiverKeyword}, '%')");
            sql.OR().WHERE("return_phone like CONCAT(#{queryParam.receiverKeyword}, '%')");
        }
        return sql.toString();
4).扩充 MyBatis条件查询

这样很不好,因为这里的代码都是生成的,每次生成改动就丢失了,可以改一下生成器以后按照这样生成就好了,MyBatis不支持,咱们自己想办法支持

把表名当成条件查询的参数

image-20220311224047818

使用Criteria时加入表名 查询里边直接get

image-20210406164219182

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值