SSH框架下的常用代码
各位都知道,框架是java编程语言的特性封装的具体体现.但是有了框架之后我们还是会有很多重复的代码需要我们书写,这时候为了更精简的开发,我把用过的几个小工具分享一下.
(本文是基于ssh框架的几个常用类,及其使用的注意事项)
- BaseDao
public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {
//运行期泛型类型
private Class clazz;
public BaseDaoImpl() {
//获得父类
ParameterizedType ptClass = (ParameterizedType) this.getClass().getGenericSuperclass();
//获得运行期的泛型
clazz = (Class) ptClass.getActualTypeArguments()[0];
}
@Override
public void save(T t) {
getHibernateTemplate().save(t);
}
@Override
public void delete(T t) {
getHibernateTemplate().delete(t);
}
@Override
public void delete(Serializable id) {
T t = this.getById(id);//先取,再删
getHibernateTemplate().delete(t);
}
@Override
public void update(T t) {
getHibernateTemplate().update(t);
}
@Override
public T getById(Serializable id) {
return (T) getHibernateTemplate().get(clazz, id);
}
@Override
public Integer getTotalCount(DetachedCriteria dc) {
//设置查询的聚合函数,总记录数
dc.setProjection(Projections.rowCount());
List<Long> list = (List<Long>) getHibernateTemplate().findByCriteria(dc);
//清空之前设置的聚合函数
dc.setProjection(null);
return (list!=null && list.size()>0)?(list.get(0).intValue()):null
}
@Override
public List<T> getPageList(DetachedCriteria dc, Integer start, Integer pageSize) {
List<T> list = (List<T>) getHibernateTemplate().findByCriteria(dc, start, pageSize);
return list;
}
@Override
public void saveOrUpdate(T t) {
getHibernateTemplate().saveOrUpdate(t);
}
}
再写XXXDao时继承此类,需要的方法就可以直接用了 当然最好写一个baseDao的接口 让XXXDao继承baseDao的接口 那样就更严谨了
2. 分页
public class PageBean {
//当前页数
private Integer currentPage;
//总记录数
private Integer totalCount;
//每页显示条数
private Integer pageSize;
//总页数
private Integer totalPage;
//分页列表数据
private List list;
public PageBean(Integer currentPage, Integer totalCount, Integer pageSize) {
this.totalCount = totalCount;
this.pageSize = pageSize;
this.currentPage = currentPage;
if(this.currentPage == null){
//如页面没有指定显示那一页.显示第一页.
this.currentPage = 1;
}
if(this.pageSize == null){
this.pageSize = 5;
}
//计算总页数
this.totalPage = (this.totalCount+this.pageSize-1)/this.pageSize;
//不能小于1
if(this.currentPage < 1){
this.currentPage = 1;
}
//不能大于总页数
if(this.currentPage > this.totalPage){
this.currentPage = this.totalPage;
}
}
//计算起始索引
public int getStart(){
return (this.currentPage-1)*this.pageSize;
}
分页要根据具体的需求对pageBean 的属性值进行相应的处理,思维要严谨
3.文件上传
public class CustomerMultiAction extends ActionSupport {
@Autowired
private IUserService userService;
private File userImg; // 用于接收上传的文件
private String userImgFileName; // 用来接收上传文件名称
private String userName;
// 添加客户信息
public String addUser() {
// 处理上传文件,保存到服务器端
File destFile = new File(ServletActionContext.getServletContext().getRealPath("/upload"), userImgFileName);
try {
FileUtils.copyFile(userImg, destFile);
} catch (IOException e) {
e.printStackTrace();
}
// 完成添加客户操作
User user= new User();
user.setUser (userName);
String userImgsrc = ServletActionContext.getRequest().getContextPath() + "/upload/" + userImgFileName; // /ssh-exam/upload/1.jpg
user.setUserImgsrc(userImgsrc);
userService.addUser(user);
return SUCCESS;
}
}
文件上传是有时会与用户的其他属性一起提交,这时候就需要我们自己封装对象.特别是要在对象的类中有xxxImgsrc属性.ServletActionContext.getRequest().getContextPath() + “/upload/” + userImgFileName; // /ssh-exam/upload/1.jpg 写到页面时,img 标签的src 写成user.userImgsrc就行了.