com.yuweix.tripod.dao.mybatis.provider.DeleteSqlProvider Maven / Gradle / Ivy
package com.yuweix.tripod.dao.mybatis.provider;
import com.yuweix.tripod.dao.mybatis.where.Criteria;
import com.yuweix.tripod.dao.sharding.Sharding;
import org.apache.ibatis.jdbc.SQL;
import javax.persistence.Id;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;
/**
* @author yuwei
*/
public class DeleteSqlProvider extends AbstractProvider {
public String delete(T t) throws IllegalAccessException {
Class> entityClass = t.getClass();
String tbName = getTableName(entityClass);
StringBuilder tableNameBuilder = new StringBuilder(tbName);
List fcList = getPersistFieldList(entityClass);
return new SQL() {{
boolean whereSet = false;
for (FieldColumn fc: fcList) {
Field field = fc.getField();
String shardingIndex = getShardingIndex(field.getAnnotation(Sharding.class), tbName, getFieldValue(field, t));
Id idAnn = field.getAnnotation(Id.class);
if (shardingIndex != null) {
tableNameBuilder.append("_").append(shardingIndex);
/**
* 分片字段,必须放在where子句中
*/
WHERE("`" + fc.getColumnName() + "` = #{" + field.getName() + "}");
if (idAnn != null) {
whereSet = true;
}
continue;
}
/**
* ID字段,必须放在where子句中
*/
if (idAnn != null) {
WHERE("`" + fc.getColumnName() + "` = #{" + field.getName() + "}");
whereSet = true;
}
}
if (!whereSet) {
throw new IllegalAccessException("'where' is required.");
}
DELETE_FROM(tableNameBuilder.toString());
}}.toString();
}
@SuppressWarnings("unchecked")
public String deleteByKey(Map param) throws IllegalAccessException {
// PK id = (PK) param.get("id");
Class entityClass = (Class) param.get("clz");
StringBuilder tableNameBuilder = new StringBuilder(getTableName(entityClass));
List fcList = getPersistFieldList(entityClass);
return new SQL() {{
boolean hasSharding = false;
boolean whereSet = false;
for (FieldColumn fc: fcList) {
Field field = fc.getField();
Sharding sharding = field.getAnnotation(Sharding.class);
if (sharding != null) {
hasSharding = true;
break;
}
Id idAnn = field.getAnnotation(Id.class);
if (idAnn != null) {
WHERE("`" + fc.getColumnName() + "` = #{id}");
whereSet = true;
}
}
if (hasSharding) {
throw new IllegalAccessException("'Sharding Value' is required.");
}
if (!whereSet) {
throw new IllegalAccessException("'where' is required.");
}
DELETE_FROM(tableNameBuilder.toString());
}}.toString();
}
@SuppressWarnings("unchecked")
public String deleteByKeySharding(Map param) throws IllegalAccessException {
// PK id = (PK) param.get("id");
Class entityClass = (Class) param.get("clz");
Object shardingVal = param.get("shardingVal");
String tbName = getTableName(entityClass);
StringBuilder tableNameBuilder = new StringBuilder(tbName);
List fcList = getPersistFieldList(entityClass);
return new SQL() {{
boolean whereSet = false;
for (FieldColumn fc: fcList) {
Field field = fc.getField();
String shardingIndex = getShardingIndex(field.getAnnotation(Sharding.class), tbName, shardingVal);
Id idAnn = field.getAnnotation(Id.class);
if (shardingIndex != null) {
tableNameBuilder.append("_").append(shardingIndex);
/**
* 分片字段,必须放在where子句中
*/
WHERE("`" + fc.getColumnName() + "` = #{shardingVal}");
if (idAnn != null) {
whereSet = true;
}
continue;
}
if (idAnn != null) {
WHERE("`" + fc.getColumnName() + "` = #{id}");
whereSet = true;
}
}
if (!whereSet) {
throw new IllegalAccessException("'where' is required.");
}
DELETE_FROM(tableNameBuilder.toString());
}}.toString();
}
@SuppressWarnings("unchecked")
public String deleteByCriteria(Map param) throws IllegalAccessException {
Class entityClass = (Class) param.get("clz");
String tbName = getTableName(entityClass);
StringBuilder tableNameBuilder = new StringBuilder(tbName);
Criteria criteria = (Criteria) param.get("criteria");
if (criteria == null || criteria.getParams() == null || criteria.getParams().size() <= 0) {
throw new IllegalAccessException("'where' is required.");
}
Object shardingVal = criteria.getShardingVal();
List fcList = getPersistFieldList(entityClass);
return new SQL() {{
for (FieldColumn fc: fcList) {
Field field = fc.getField();
Sharding sharding = field.getAnnotation(Sharding.class);
if (sharding != null) {
if (shardingVal == null) {
throw new IllegalAccessException("'Sharding Value' is required.");
}
String shardingIndex = getShardingIndex(sharding, tbName, shardingVal);
if (shardingIndex != null) {
tableNameBuilder.append("_").append(shardingIndex);
/**
* 分片字段,必须放在where子句中
*/
WHERE("`" + fc.getColumnName() + "` = #{criteria.shardingVal} ");
}
}
}
WHERE(criteria.toSql());
DELETE_FROM(tableNameBuilder.toString());
}}.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy