tk mybatis join 方案 最小改动兼容之前的condition


import org.apache.commons.beanutils.BeanUtils;
import tk.mybatis.mapper.entity.Condition;
import tk.mybatis.mapper.entity.EntityColumn;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.mapperhelper.SqlHelper;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;

public class Condition2 extends Condition {
    private String joinTable;
    private String joinCondition;

    public Condition2(Class<?> entityClass) {
        super(entityClass);
    }


    public static Condition2 copyFrom( Condition condition){
        Condition2 condition2 = new Condition2(condition.getEntityClass());
           for(Field field:Example.class.getDeclaredFields()){
               field.setAccessible( true );
               try {
                   field.set( condition2,  field.get( condition ));
               } catch (IllegalAccessException e) {
                   e.printStackTrace();
               }
           }
        return condition2;
    }

    public Set<String> getSelectColumns() {
        if (selectColumns != null && selectColumns.size() > 0) {
            //不需要处理
        } else if (excludeColumns != null && excludeColumns.size() > 0) {
            Collection<EntityColumn> entityColumns = propertyMap.values();
            selectColumns = new LinkedHashSet<String>(entityColumns.size() - excludeColumns.size());
            for (EntityColumn column : entityColumns) {
                if (!excludeColumns.contains(column.getColumn())) {
                    selectColumns.add(" t."+column.getColumn());
                }
            }
        }
        return selectColumns;
    }

}

import org.apache.ibatis.mapping.MappedStatement;
import tk.mybatis.mapper.entity.EntityColumn;
import tk.mybatis.mapper.entity.IDynamicTableName;
import tk.mybatis.mapper.mapperhelper.EntityHelper;
import tk.mybatis.mapper.mapperhelper.MapperHelper;
import tk.mybatis.mapper.mapperhelper.MapperTemplate;
import tk.mybatis.mapper.mapperhelper.SqlHelper;

import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;


public class MutilpConditionProvider  extends MapperTemplate {


    public MutilpConditionProvider(Class<?> mapperClass, MapperHelper mapperHelper) {
        super(mapperClass, mapperHelper);
    }


    public String selectMutip(MappedStatement ms)
    {
        Class<?> entityClass = this.getEntityClass(ms);
        this.setResultType(ms, entityClass);
        StringBuilder sql = new StringBuilder("SELECT ");
        if (this.isCheckExampleEntityClass()) {
            sql.append(SqlHelper.exampleCheck(entityClass));
        }
        sql.append("<if test=\"distinct\">distinct</if>");
        sql.append(exampleSelectColumns(entityClass));
        sql.append(SqlHelper.fromTable(entityClass, this.tableName(entityClass)));
        sql.append(exampleWhereClause());
        sql.append(SqlHelper.exampleOrderBy(entityClass));
        sql.append(SqlHelper.exampleForUpdate());
        return sql.toString();
    }


    public static String exampleWhereClause() {
        return "<if test=\"_parameter != null\">" +
                "<where>\n" +
                " ${@tk.mybatis.mapper.util.OGNL@andNotLogicDelete(_parameter)}" +
                " <trim prefix=\"(\" prefixOverrides=\"and |or \" suffix=\")\">\n" +
                "  <foreach collection=\"oredCriteria\" item=\"criteria\">\n" +
                "    <if test=\"criteria.valid\">\n" +
                "      ${@tk.mybatis.mapper.util.OGNL@andOr(criteria)}" +
                "      <trim prefix=\"(\" prefixOverrides=\"and |or \" suffix=\")\">\n" +
                "        <foreach collection=\"criteria.criteria\" item=\"criterion\">\n" +
                "          <choose>\n" +
                "            <when test=\"criterion.noValue\">\n" +
                "              ${@tk.mybatis.mapper.util.OGNL@andOr(criterion)} ${criterion.condition}\n" +
                "            </when>\n" +
                "            <when test=\"criterion.singleValue\">\n" +
                "              ${@tk.mybatis.mapper.util.OGNL@andOr(criterion)} t.${criterion.condition} #{criterion.value}\n" +
                "            </when>\n" +
                "            <when test=\"criterion.betweenValue\">\n" +
                "              ${@tk.mybatis.mapper.util.OGNL@andOr(criterion)} t.${criterion.condition} #{criterion.value} and #{criterion.secondValue}\n" +
                "            </when>\n" +
                "            <when test=\"criterion.listValue\">\n" +
                "              ${@tk.mybatis.mapper.util.OGNL@andOr(criterion)} t.${criterion.condition}\n" +
                "              <foreach close=\")\" collection=\"criterion.value\" item=\"listItem\" open=\"(\" separator=\",\">\n" +
                "                #{listItem}\n" +
                "              </foreach>\n" +
                "            </when>\n" +
                "          </choose>\n" +
                "        </foreach>\n" +
                "      </trim>\n" +
                "    </if>\n" +
                "  </foreach>\n" +
                " </trim>\n" +
                "</where>" +
                "</if>";
    }


    /**
     * example支持查询指定列时
     *
     * @return
     */
    public static String exampleSelectColumns(Class<?> entityClass) {
        StringBuilder sql = new StringBuilder();
        sql.append("<choose>");
        sql.append("<when test=\"@tk.mybatis.mapper.util.OGNL@hasSelectColumns(_parameter)\">");
        sql.append("<foreach collection=\"_parameter.selectColumns\" item=\"selectColumn\" separator=\",\">");
        sql.append(" ${selectColumn}");
        sql.append("</foreach>");
        sql.append("</when>");
        //不支持指定列的时候查询全部列
        sql.append("<otherwise>");
        sql.append(getAllColumns(entityClass));
        sql.append("</otherwise>");
        sql.append("</choose>");
        return sql.toString();
    }



    public static String getAllColumns(Class<?> entityClass) {
        Set<EntityColumn> columnSet = EntityHelper.getColumns(entityClass);
        StringBuilder sql = new StringBuilder();
        for (EntityColumn entityColumn : columnSet) {
            sql.append("t."+entityColumn.getColumn()).append(",");
        }
        return sql.substring(0, sql.length() - 1);
    }






}

import org.apache.ibatis.annotations.SelectProvider;
import tk.mybatis.mapper.annotation.RegisterMapper;
import tk.mybatis.mapper.provider.ConditionProvider;

import java.util.List;

@RegisterMapper
public interface MutilpMapper<T> {
    @SelectProvider(
            type = MutilpConditionProvider.class,
            method = "dynamicSQL"
    )
    List<T> selectMutip(Object var1);
}

 

 

 


import java.util.Date;
import javax.persistence.*;

@Table(name = "erp_customer")
public class ErpCustomer extends MutilpInsert {
    /**
     * 客户管理
     */
    @Id
    private Long id;

    /**
     * 客户no
     */
    @Column(name = "customer_no")
    private String customerNo;

    /**
     * 客户分类;;select;;
     */
    @Column(name = "customer_cate")
    private String customerCate;

    /**
     * 客户id
     */
    @Column(name = "resource_id")
    private String resourceId;

    /**
     * 销售组织
     */
    @Column(name = "org_no")
    private String orgNo;

    /**
     * 销售部门
     */
    @Column(name = "department_no")
    private String departmentNo;

    /**
     * 销售人员
     */
    @Column(name = "user_no")
    private String userNo;

    /**
     * 服务人员
     */
    @Column(name = "server_user_no")
    private String serverUserNo;

    /**
     * 服务组织
     */
    @Column(name = "server_org_no")
    private String serverOrgNo;

    /**
     * 服务部门
     */
    @Column(name = "server_department_no")
    private String serverDepartmentNo;

    /**
     * 创建时间
     */
    @Column(name = "create_time")
    private Date createTime;

    /**
     * 最后签约的合同时间
     */
    @Column(name = "last_contract_time")
    private Date lastContractTime;

    /**
     * 更新时间
     */
    @Column(name = "modify_time")
    private Date modifyTime;



    /**
     * 获取客户管理
     *
     * @return id - 客户管理
     */
    public Long getId() {
        return id;
    }

    /**
     * 设置客户管理
     *
     * @param id 客户管理
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * 获取客户no
     *
     * @return customer_no - 客户no
     */
    public String getCustomerNo() {
        return customerNo;
    }

    /**
     * 设置客户no
     *
     * @param customerNo 客户no
     */
    public void setCustomerNo(String customerNo) {
        this.customerNo = customerNo == null ? null : customerNo.trim();
    }

    /**
     * 获取客户分类;;select;;
     *
     * @return customer_cate - 客户分类;;select;;
     */
    public String getCustomerCate() {
        return customerCate;
    }

    /**
     * 设置客户分类;;select;;
     *
     * @param customerCate 客户分类;;select;;
     */
    public void setCustomerCate(String customerCate) {
        this.customerCate = customerCate == null ? null : customerCate.trim();
    }

    /**
     * 获取客户id
     *
     * @return resource_id - 客户id
     */
    public String getResourceId() {
        return resourceId;
    }

    /**
     * 设置客户id
     *
     * @param resourceId 客户id
     */
    public void setResourceId(String resourceId) {
        this.resourceId = resourceId == null ? null : resourceId.trim();
    }

    /**
     * 获取销售组织
     *
     * @return org_no - 销售组织
     */
    public String getOrgNo() {
        return orgNo;
    }

    /**
     * 设置销售组织
     *
     * @param orgNo 销售组织
     */
    public void setOrgNo(String orgNo) {
        this.orgNo = orgNo == null ? null : orgNo.trim();
    }

    /**
     * 获取销售部门
     *
     * @return department_no - 销售部门
     */
    public String getDepartmentNo() {
        return departmentNo;
    }

    /**
     * 设置销售部门
     *
     * @param departmentNo 销售部门
     */
    public void setDepartmentNo(String departmentNo) {
        this.departmentNo = departmentNo == null ? null : departmentNo.trim();
    }

    /**
     * 获取销售人员
     *
     * @return user_no - 销售人员
     */
    public String getUserNo() {
        return userNo;
    }

    /**
     * 设置销售人员
     *
     * @param userNo 销售人员
     */
    public void setUserNo(String userNo) {
        this.userNo = userNo == null ? null : userNo.trim();
    }

    /**
     * 获取服务人员
     *
     * @return server_user_no - 服务人员
     */
    public String getServerUserNo() {
        return serverUserNo;
    }

    /**
     * 设置服务人员
     *
     * @param serverUserNo 服务人员
     */
    public void setServerUserNo(String serverUserNo) {
        this.serverUserNo = serverUserNo == null ? null : serverUserNo.trim();
    }

    /**
     * 获取服务组织
     *
     * @return server_org_no - 服务组织
     */
    public String getServerOrgNo() {
        return serverOrgNo;
    }

    /**
     * 设置服务组织
     *
     * @param serverOrgNo 服务组织
     */
    public void setServerOrgNo(String serverOrgNo) {
        this.serverOrgNo = serverOrgNo == null ? null : serverOrgNo.trim();
    }

    /**
     * 获取服务部门
     *
     * @return server_department_no - 服务部门
     */
    public String getServerDepartmentNo() {
        return serverDepartmentNo;
    }

    /**
     * 设置服务部门
     *
     * @param serverDepartmentNo 服务部门
     */
    public void setServerDepartmentNo(String serverDepartmentNo) {
        this.serverDepartmentNo = serverDepartmentNo == null ? null : serverDepartmentNo.trim();
    }

    /**
     * 获取创建时间
     *
     * @return create_time - 创建时间
     */
    public Date getCreateTime() {
        return createTime;
    }

    /**
     * 设置创建时间
     *
     * @param createTime 创建时间
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /**
     * 获取最后签约的合同时间
     *
     * @return last_contract_time - 最后签约的合同时间
     */
    public Date getLastContractTime() {
        return lastContractTime;
    }

    /**
     * 设置最后签约的合同时间
     *
     * @param lastContractTime 最后签约的合同时间
     */
    public void setLastContractTime(Date lastContractTime) {
        this.lastContractTime = lastContractTime;
    }

    /**
     * 获取更新时间
     *
     * @return modify_time - 更新时间
     */
    public Date getModifyTime() {
        return modifyTime;
    }

    /**
     * 设置更新时间
     *
     * @param modifyTime 更新时间
     */
    public void setModifyTime(Date modifyTime) {
        this.modifyTime = modifyTime;
    }



}

import lombok.Data;
import tk.mybatis.mapper.entity.IDynamicTableName;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

@Data
public class MutilpInsert   implements IDynamicTableName,Serializable {

    @Transient
    private List<String> mutilpId;
    @Transient
    private String updatem;
    @Column(name = "del_status")
    private Integer delStatus = 0;
    @Transient
    private String joinTableName;

    @Override
    public String getDynamicTableName() {
        return null;
    }
}

 

public interface Mapper<T> extends BaseMapper<T>, ConditionMapper<T>, IdsMapper<T>, InsertListMapper<T> , MutilpMapper<T> {
}

 

测试代码 通过

 

 


    @Autowired
    private Mapper<ErpCustomer> mapper;

    @Test
    public void testexcelx() throws ClassNotFoundException {
        Condition condition = new Condition(  ErpCustomer.class );
        condition.setTableName( "erp_customer t left join erp_customer_resource u  on t.resource_id = u.resource_id ");

        // condition.and().andCondition(" t.resource_id = '1288a0538c77487391eae33cc6f52c1e'  ");
        List<ErpCustomer> rs = mapper.selectMutip(Condition2.copyFrom(condition));
        System.out.println(  JSONObject.toJSONString( rs ) );
    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值