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 ) );
}