参看了各类文章,感觉作用很大,把代码复制上来,以后开发都会有用
import java.io.Serializable; import java.util.List; public interface EntityDAO<T> { /** * 根据主键查找对象 * * @param id 主键值 * * @return 对象实体 */ T findByPrimarykey(Serializable id); /** * * 查找所有对象 */ List<T> findAll(); /** * 新增对象到数据库 * * @param o * */ void insert(T o); /** * 更新对象实体到数据库 * * @param o * */ void update(T o); /** * 根据主键删除对象 * * @param id 主键值 * */ void deleteByPrimarykey(Serializable id); /** * 批量删除对象 * @param ids */ void delete(String... ids); /** * 更新对象信息 * * @param statementId * sql语句名称后缀 * @param parameters * sql参数 */ void update(String statementId, Object parameters); /** * sql查询单个对象 * * @param statementId * sql语句名称后缀 * @param parameters * sql参数 * @return 查询结果 */ T queryForObject(String statementId, Object parameters); /** * sql查询列表 * * @param statementId * sql语句名称后缀 * @param parameters * sql参数 * @return 查询结果 */ List<T> queryForList(String statementId, Object parameters); }
import java.io.Serializable; import java.util.List; public class IbatisEntityDao<T> extends IbatisGenericDao implements EntityDAO<T> { /** * DAO所管理的Entity类型. */ protected Class<T> entityClass; protected String primaryKeyName; /** * 在构造函数中将泛型T.class赋给entityClass. */ public IbatisEntityDao() { entityClass = GenericsUtils.getSuperClassGenricType(getClass()); } /** * 根据ID获取对象. */ public T findByPrimarykey(Serializable id) { return get(getEntityClass(), id); } /** * * 获取所有对象 */ public List<T> findAll() { return getAll(getEntityClass()); } /** * 取得entityClass. <p/> JDK1.4不支持泛型的子类可以抛开Class<T> entityClass,重载此函数达到相同效果。 */ protected Class<T> getEntityClass() { return entityClass; } public String getIdName(Class clazz) { return "id"; } /** * 根据ID移除对象. */ public void deleteByPrimarykey(Serializable id) { removeById(getEntityClass(), id); } /** * 批量删除对象 */ public void delete(String... ids) { removeByIds(getEntityClass(), ids); } /** * 保存对象. 为了实现IEntityDao 我在内部使用了insert和update 2个方法. */ public void insert(T o) { super._insert(o); } public void setPrimaryKeyName(String primaryKeyName) { this.primaryKeyName = primaryKeyName; } public List<T> queryForList(String statementId, Object parameters) { return super.queryForList(getEntityClass(), statementId, parameters); } public T queryForObject(String statementId, Object parameters) { return super.queryForObject(getEntityClass(), statementId, parameters); } public void update(String statementId, Object parameters) { super.update(getEntityClass(), statementId, parameters); } public void update(T o) { super._update(o); } }
public class IbatisGenericDao extends BaseDaoiBatis { public static final String POSTFIX_INSERT = ".insert"; public static final String POSTFIX_UPDATE = ".update"; public static final String POSTFIX_DELETE = ".delete"; public static final String POSTFIX_DELETE_PRIAMARYKEY = ".deleteByPrimaryKey"; public static final String POSTFIX_BATCH_DELETE = ".deleteByIds"; public static final String POSTFIX_SELECT = ".select"; public static final String POSTFIX_GETALL = ".getAll"; public static final String POSTFIX_SELECTMAP = ".selectByMap"; public static final String POSTFIX_SELECTSQL = ".selectBySql"; public static final String POSTFIX_COUNT = ".count"; public static final String POSTFIX_QUERY = ".query"; /** * 根据ID获取对象 */ public <T> T get(Class<T> entityClass, Serializable id) { T o = (T) getSqlMapClientTemplate().queryForObject( getStatementId(entityClass, IbatisGenericDao.POSTFIX_SELECT), id); return o; } /** * 获取所有对象 */ public <T> List<T> getAll(Class<T> entityClass) { List<T> li = getSqlMapClientTemplate().queryForList( getStatementId(entityClass, IbatisGenericDao.POSTFIX_GETALL) ); return li; } /** * 新增对象 */ public void _insert(Object o) { getSqlMapClientTemplate().insert( getStatementId(o.getClass(), IbatisGenericDao.POSTFIX_INSERT), o); } /** * 保存对象 */ public void _update(Object o) { getSqlMapClientTemplate().update( getStatementId(o.getClass(), IbatisGenericDao.POSTFIX_UPDATE), o); } /** * 根据ID删除对象 */ public <T> void removeById(Class<T> entityClass, Serializable id) { getSqlMapClientTemplate().delete( getStatementId(entityClass, IbatisGenericDao.POSTFIX_DELETE_PRIAMARYKEY), id); } public <T> void removeByIds(Class<T> entityClass, String... pids) { String ids = GenericsUtils.createBlock(pids); getSqlMapClientTemplate().delete( getStatementId(entityClass, IbatisGenericDao.POSTFIX_BATCH_DELETE), ids); } /** * 分页方法 */ public List findByPage(String statementName, final Map map) { final int pageSize = (Integer)map.get(Constant.PAGE_SIZE); final int skipResults = (Integer)map.get(Constant.SKIP_RESULTS); return getSqlMapClientTemplate().queryForList(statementName, map, skipResults, pageSize); } /** * get statement id in SQL Map file * * @param entityClass * entity class * @param suffix * suffix * @return statement id */ private String getStatementId(Class entityClass, String suffix) { String className = entityClass.getName(); String shortName = className.replace(entityClass.getPackage().getName() + ".", ""); return shortName + suffix; } public <T> List<T> queryForList(Class<T> entityClass, String statementId, Object parameters) { return getSqlMapClientTemplate().queryForList( getStatementId(entityClass, statementId), parameters); } public <T> T queryForObject(Class<T> entityClass, String statementId, Object parameters) { return (T) getSqlMapClientTemplate().queryForObject( getStatementId(entityClass, statementId), parameters); } public void update(Class entityClass, String statementId, Object parameters) { getSqlMapClientTemplate().update( getStatementId(entityClass, statementId), parameters); } }
public class GenericsUtils { private static final Log log = LogFactory.getLog(GenericsUtils.class); private GenericsUtils() { } public static Class getSuperClassGenricType(Class clazz) { return getSuperClassGenricType(clazz, 0); } public static Class getSuperClassGenricType(Class clazz, int index) { Type genType = clazz.getGenericSuperclass(); if (!(genType instanceof ParameterizedType)) { log.warn(clazz.getSimpleName() + "'s superclass not ParameterizedType"); return Object.class; } Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); if (index >= params.length || index < 0) { log.warn("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: " + params.length); return Object.class; } if (!(params[index] instanceof Class)) { log .warn(clazz.getSimpleName() + " not set the actual class on superclass generic parameter"); return Object.class; } return (Class) params[index]; } /** * for batch delete * * @param ids * @return */ public static String createBlock(Object[] ids) { if (ids == null || ids.length == 0) return "('')"; String blockStr = ""; for (int i = 0; i < ids.length - 1; i++) { blockStr += "'" + ids[i] + "',"; } blockStr += "'" + ids[ids.length - 1] + "'"; return blockStr; } }