All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.github.yt.mybatis.dao.provider.SaveProvider Maven / Gradle / Ivy
package com.github.yt.mybatis.dao.provider;
import com.github.yt.mybatis.dao.BaseMapper;
import com.github.yt.mybatis.dao.MapperProvider;
import com.github.yt.mybatis.domain.BaseEntity;
import com.github.yt.mybatis.exception.BaseErrorException;
import com.github.yt.mybatis.utils.JPAUtils;
import org.apache.commons.lang3.StringUtils;
import javax.persistence.Id;
import javax.persistence.Transient;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import static com.github.yt.mybatis.mybatis.SqlBuilder.*;
public class SaveProvider extends MapperProvider {
public String save(Map param) {
Class> entityClass = param.get(BaseMapper.ENTITY).getClass();
begin();
INSERT_INTO(getTableName(entityClass));
Field idField = null;
for (Field field : JPAUtils.getAllFields(entityClass)) {
field.setAccessible(true);
if (null != field.getAnnotation(Id.class) || null != field.getAnnotation(Transient.class)) {
idField = field;
continue;
}
Object value = JPAUtils.getValue(param.get(BaseMapper.ENTITY), field.getName());
if (null == value) {
continue;
}
VALUES(field.getName(), StringUtils.join("#{", BaseMapper.ENTITY, ".", field.getName(), "}"));
}
if (null == idField) {
throw new BaseErrorException(StringUtils.join(entityClass.getName(), "实体未配置@Id "));
}
setId(param, idField);
return sql();
}
public String saveBatch(Map param) {
if (null == param.get(BaseMapper.ENTITIES)) {
throw new BaseErrorException("批量插入的数据为null");
}
Class> entityClass = ((List) param.get(BaseMapper.ENTITIES)).get(0).getClass();
begin();
BATCH_INSERT_INTO(getTableName(entityClass));
Field idField = null;
for (int i = 0; i < ((List) param.get(BaseMapper.ENTITIES)).size(); i++) {
for (Field field : JPAUtils.getAllFields(entityClass)) {
field.setAccessible(true);
if (null != field.getAnnotation(Id.class) || null != field.getAnnotation(Transient.class)) {
idField = field;
continue;
}
Object value = JPAUtils.getValue(((List) param.get(BaseMapper.ENTITIES)).get(i), field.getName());
if (null == value) {
continue;
}
BATCH_VALUES(field.getName(), StringUtils.join("#{", BaseMapper.ENTITIES, "[", i, "]", ".", field.getName(), "}"));
}
if (null == idField) {
throw new BaseErrorException(StringUtils.join(entityClass.getName(), "实体未配置@Id "));
}
setIdBatch((BaseEntity) ((List) param.get(BaseMapper.ENTITIES)).get(i), i, idField);
BATCH_SEGMENTATION();
}
return sql();
}
public String saveForSelective(Map param) {
Class> entityClass = param.get(BaseMapper.ENTITY).getClass();
begin();
INSERT_INTO(getTableName(entityClass));
Field idField = null;
for (Field field : JPAUtils.getAllFields(entityClass)) {
field.setAccessible(true);
if (null != field.getAnnotation(Id.class) || null != field.getAnnotation(Transient.class)) {
idField = field;
continue;
}
try {
if (field.get(param.get(BaseMapper.ENTITY)) != null) {
VALUES(field.getName(), StringUtils.join("#{", BaseMapper.ENTITY, ".", field.getName(), "}"));
}
} catch (IllegalAccessException e) {
throw new BaseErrorException(e);
}
}
if (null == idField) {
throw new BaseErrorException(StringUtils.join(entityClass.getName(), "实体未配置@Id "));
}
setId(param, idField);
return sql();
}
private void setId(Map param, Field idField) {
if (!idField.getType().isAssignableFrom(String.class)) {
return;
}
try {
if (StringUtils.isNotEmpty((String) idField.get(param.get(BaseMapper.ENTITY)))) {
VALUES(idField.getName(), StringUtils.join("#{", BaseMapper.ENTITY, ".", idField.getName(), "}"));
return;
}
String id = UUID.randomUUID().toString().replace("-", "");
VALUES(idField.getName(), StringUtils.join("'", id, "'"));
idField.set(param.get(BaseMapper.ENTITY), id);
} catch (IllegalAccessException e) {
throw new BaseErrorException(e);
}
}
private void setIdBatch(BaseEntity baseEntity, int i, Field idField) {
if (!idField.getType().isAssignableFrom(String.class)) {
return;
}
try {
if (StringUtils.isNotEmpty((String) idField.get(baseEntity))) {
BATCH_VALUES(idField.getName(), StringUtils.join("#{", BaseMapper.ENTITIES, "[", i, "]", ".", idField.getName(), "}"));
return;
}
String id = UUID.randomUUID().toString().replace("-", "");
BATCH_VALUES(idField.getName(), StringUtils.join("'", id, "'"));
idField.set(baseEntity, id);
} catch (IllegalAccessException e) {
throw new BaseErrorException(e);
}
}
}