package org.nutz.service; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.entity.EntityField; /** * 针对标注了@Id和@的实体类的Service * @author wendal(wendal1985@gmail.com) * * @param <T> 实体类的类型 */ public abstract class IdNameEntityService<T> extends IdEntityService<T> { /** * @see IdEntityService * @see NameEntityService */ public IdNameEntityService() { super(); } /** * @see IdEntityService * @see NameEntityService */ public IdNameEntityService(Dao dao) { super(dao); } /** * @see IdEntityService * @see NameEntityService */ public IdNameEntityService(Dao dao, Class<T> entityType) { super(dao, entityType); } /** * 根据@Name所标注的属性的值进行删除 * @param name 属性的值 * @return 删除的记录数,通常为1或0 */ public int delete(String name) { return dao().delete(getEntityClass(), name); } /** * 根据@Name所标注的属性的值,获取一个实体 * @param name 属性的值 * @return 实体,如不存在则返回null */ public T fetch(String name) { return dao().fetch(getEntityClass(), name); } /** * 智能获取一个实体,如str能转为Long类型,则调用fetch(long id),否则调用fetch(String name) * @param str 非空的字符串,可以是整数或普通字符串 * @return 符合条件的记录,如不存在则返回null */ public T smartFetch(String str) { try { long id = Long.parseLong(str); return fetch(id); } catch (Exception e) {} return fetch(str); } /** * 是否存在符合条件的记录,需要实体有@Name标注 * @param name 属性的值 * @return true,如果存在的话. */ public boolean exists(String name) { EntityField ef = getEntity().getNameField(); if (null == ef) return false; return dao().count(getEntityClass(), Cnd.where(ef.getName(), "=", name)) > 0; } }