运用范型开发方式加快开发速度
来源:互联网 发布:帝王三国单机无需网络 编辑:程序博客网 时间:2024/06/07 01:25
摘要:本文讲述了运用java的范型,搭配struts2,spring3,ibaits3加快开发速度的过程。在本范型架构中,不需要使用反射机制、不需要beanutil属性操作,尽可能得提高效率,同时加快开发速度。
通用范型Dao
package com.founder.bbc.generic;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
/**
* 通用DAO范型类,建议每个实体都包含一个单值主键,如:多对多关联表新建一id字段作为主键
* @author fd_zhangrenjie 张人杰
* 转载、使用,请保留作者信息
* 此范型已应用于方正某项目
* @param <T>
*/
public abstract class AbstractGenericDao <PK extends Serializable,T extends GenericEntity<PK>> implements GenericDao<PK,T>{
@Autowired
@Qualifier("sqlMapClientTemplate")
protected SqlMapClientTemplate sqlMapClientTemplate;
private Class<T> clazz;
protected String prefix;//ibatis中定义的namespace
public AbstractGenericDao() {
clazz = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[1];
prefix=clazz.getName()+".";
}
@Override
public List<T> listAll() {
return pagedListAll(null, null);
}
@Override
public List<T> listAll(String ibatisStatement) {
return pagedListAll(null, null, ibatisStatement);
}
@Override
public List<T> pagedListAll(Integer pageNo, Integer pageSize) {
return pagedListAll(pageNo,pageSize,DaoTemplateStatement.LIST);
}
@Override
public List<T> pagedListAll(Integer pageNo, Integer pageSize, String ibatisStatement) {
T condition=null;
try {
condition = clazz.newInstance();
condition.setPageNo(pageNo);
condition.setPageSize(pageSize);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return (List<T>)sqlMapClientTemplate.queryForList(prefix+ibatisStatement, condition);
}
@Override
public List<T> pagedListQuery(T condition) {
return (List<T>)sqlMapClientTemplate.queryForList(prefix+DaoTemplateStatement.LIST, condition);
}
@Override
public List<T> pagedListQuery(T condition, String ibatisStatement) {
return (List<T>)sqlMapClientTemplate.queryForList(prefix+ibatisStatement, condition);
}
@Override
public List<T> queryAll(T condition) {
condition.setPageNo(null);
condition.setPageSize(null);
return (List<T>)sqlMapClientTemplate.queryForList(prefix+DaoTemplateStatement.LIST, condition);
}
@Override
public List<T> queryAll(T condition, String ibatisStatement) {
condition.setPageNo(null);
condition.setPageSize(null);
return (List<T>)sqlMapClientTemplate.queryForList(prefix+ibatisStatement, condition);
}
@Override
public T queryObject(T condition) {
return (T)sqlMapClientTemplate.queryForObject(prefix+DaoTemplateStatement.QUERY_OBJECT,condition);
}
@Override
public T queryObject(T condition, String ibatisStatement) {
return (T)sqlMapClientTemplate.queryForObject(prefix+ibatisStatement,condition);
}
@Override
public void remove(T condition) {
sqlMapClientTemplate.delete(prefix+DaoTemplateStatement.DELETE, condition);
}
@Override
public void remove(T condition, String ibatisStatement) {
sqlMapClientTemplate.delete(prefix+ibatisStatement, condition);
}
@Override
public void multiPKRemove(T condition, String ibatisStatement) {
sqlMapClientTemplate.delete(prefix+ibatisStatement, condition);
}
@Override
public void multiPKRemove(T condition) {
sqlMapClientTemplate.delete(prefix+DaoTemplateStatement.MULTIPLY_PK_DELETE, condition);
}
@Override
public PK saveOrUpdate(T object) {
return (PK)sqlMapClientTemplate.insert(prefix+DaoTemplateStatement.SAVE_OR_UPDATE, object);
}
@Override
public PK saveOrUpdate(T object, String ibatisStatement) {
return (PK)sqlMapClientTemplate.insert(prefix+ibatisStatement, object);
}
@Override
public PK insert(T object) {
return (PK)sqlMapClientTemplate.insert(prefix+DaoTemplateStatement.INSERT, object);
}
@Override
public PK insert(T object, String ibatisStatement) {
return (PK)sqlMapClientTemplate.insert(prefix+ibatisStatement, object);
}
@Override
public Integer update(T object) {
return (Integer)sqlMapClientTemplate.update(prefix+DaoTemplateStatement.UPDATE, object);
}
@Override
public Integer update(T object, String ibatisStatement) {
return (Integer)sqlMapClientTemplate.update(prefix+ibatisStatement, object);
}
@Override
public Integer count(T condition){
return (Integer)sqlMapClientTemplate.queryForObject(prefix+DaoTemplateStatement.COUNT,condition);
}
@Override
public Integer count(T condition, String ibatisStatement){
return (Integer)sqlMapClientTemplate.queryForObject(prefix+ibatisStatement,condition);
}
}
范型Dao接口定义
package com.founder.bbc.generic;
import java.io.Serializable;
import java.util.List;
public interface GenericDao<PK extends Serializable,T extends GenericEntity<PK>> {
/**
* 列出所有内容
* @return
*/
public List<T> listAll();
/**
* 列出所有内容(使用特殊语句)
* @return
*/
public List<T> listAll(String ibatisStatement);
/**
* 根据条件查询并返回所有查询结果
* @param condition
* @return
*/
public List<T> queryAll(T condition);
/**
* 根据条件查询并返回所有查询结果(使用特殊语句)
* @param condition
* @return
*/
public List<T> queryAll(T condition,String ibatisStatement);
/**
* 根据条件查询对象
* @param condition
* @return
*/
public T queryObject(T condition);
/**
* 根据条件查询对象(使用特殊语句)
* @param condition
* @return
*/
public T queryObject(T condition,String ibatisStatement);
/**
* 查询所有内容,并分页返回结果
* @param pageNo
* @param pageSize
* @return
*/
public List<T> pagedListAll(Integer pageNo, Integer pageSize);
/**
* 查询所有内容,并分页返回结果(使用特殊语句)
* @param pageNo
* @param pageSize
* @return
*/
public List<T> pagedListAll(Integer pageNo, Integer pageSize, String ibatisStatement);
/**
* 根据条件查询所有内容,并分页返回结果
* @param condition
* @return
*/
public List<T> pagedListQuery(T condition);
/**
* 根据条件查询所有内容,并分页返回结果(使用特殊语句)
* @param condition
* @return
*/
public List<T> pagedListQuery(T condition, String ibatisStatement);
/**
* 保存或更新实体
* Oracle,此处采用存储过程完成,以保证id序列的正确,并将新插入的id返回给插入对象
* @param template
* @return
*/
public PK saveOrUpdate(T object);
/**
* 保存或更新实体(使用特殊语句)
* Oracle,此处采用存储过程完成,以保证id序列的正确,并将新插入的id返回给插入对象
* @param template
* @return
*/
public PK saveOrUpdate(T object, String ibatisStatement);
/**
* 插入实体
* @param template
* @return
*/
public PK insert(T object);
/**
* 插入实体(使用特殊语句)
* @param template
* @return
*/
public PK insert(T object, String ibatisStatement);
/**
* 更新实体
* @param template
* @return
*/
public Integer update(T object);
/**
* 更新实体(使用特殊语句)
* @param template
* @return
*/
public Integer update(T object, String ibatisStatement);
/**
* 删除实体,或根据条件删除列表
* @param condition
* @return
*/
public void remove(T condition);
/**
* 删除实体,或根据条件删除列表(使用特殊语句)
* @param condition
* @return
*/
public void multiPKRemove(T condition, String ibatisStatement);
/**
* 多选删除,或根据条件删除列表
* @param condition
* @return
*/
public void multiPKRemove(T condition);
/**
* 多选删除,或根据条件删除列表(使用特殊语句)
* @param condition
* @return
*/
public void remove(T condition, String ibatisStatement);
/**
* 计数
* @return
*/
public Integer count(T condition);
/**
* 计数(使用特殊语句)
* @return
*/
public Integer count(T condition, String ibatisStatement);
}
一位老同事说现在流行将缓存操作放在前端,放在Action中,在范型框架的设计中,这有一定的可取性和道理。
北京师范大学 计算机系
张人杰
2012.9.27
- 运用范型开发方式加快开发速度
- 使用VB.NET加快代码开发速度
- 加快C#应用程序开发速度的模板
- 加快java开发速度的几个建议
- 加快VisualStudio的开发速度--VS的一些开发技巧
- 利用 Enterprise Library 自定义应用程序块加快开发速度
- 用DBSQL类加快开发MySQL数据库程序的速度
- java中常用的帮助类(加快开发速度)
- 嵌入式Linux如何加快物联网方案的开发速度
- 1、intellij idea 常用快捷键 加快开发速度
- 加快软件开发速度,eclipse最常用的快捷键,开发新手必看
- android游戏开发框架libgdx的使用(十六)—使用TexturePacker工具加快开发速度
- android游戏开发框架libgdx的使用(十六)—使用TexturePacker工具加快开发速度
- android 快速开发(二)辅助类的使用:加快开发速度
- 加快Bloghelper的开发
- 脚本语言用于加快开发
- 运用内存映射文件加快文件操作速度
- 善用免费的Code Snippet Libraries加快你的开发速度
- 用一条sql统计所一个班级的男女人数
- JavaScript调用ActiveX控件
- Java 自动识别文件编码
- JBOSS体系架构
- AVL树的实现(C++)
- 运用范型开发方式加快开发速度
- C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别
- 简易理解JavaScript闭包(Closure)
- java调用microsoft office(如word、excel)的宏
- Qt 带自定义参数的构造函数
- DataGrid双击选中单元格该为单击
- GIS数据库的发展方向探讨
- 卡特兰数
- 理想低通信道 和 理想低通信道