内容简介:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangwudidebaba/article/details/82953089
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangwudidebaba/article/details/82953089
抽象类和接口在项目中经常使用如果使用恰当,可以大大精简代码
抽象类:指的是用abstract关键字修饰或者类中有抽象方法,那么这个类就是抽象类
特点:
- 抽象类用关键字 abstract修饰
- 抽象类的抽象方法没有方法体,在子类继承父类中有抽象方法时,必须实现抽像方法
- 抽象类只能被单继承
接口:接口只有方法体没有具体的实现,用inferce修饰
特点:
- 接口中没有自己的属性,只能有方法体
- 类在实现接口时,可以实现多个接口
代码演示:
使用抽象方法将dao层中,公共的增删改查提取出来,让其子类继承公共的dao方法
package com.empl.mgr.dao.support; import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; public abstract class AbstractDao<T> { @Autowired private SessionFactory sessionFactory; public abstract Class<T> getEntityClass(); public Session findSession() { return sessionFactory.getCurrentSession(); } @SuppressWarnings("unchecked") public List<T> findAll() { return findSession().createCriteria(getEntityClass()).list(); } @SuppressWarnings("unchecked") public T findUniqueByProperty(String pro, Object val) { return (T) findSession().createCriteria(getEntityClass()).add(Restrictions.eq(pro, val)).uniqueResult(); } @SuppressWarnings("unchecked") public List<T> findByProperty(String pro, Object val) { return findSession().createCriteria(getEntityClass()).add(Restrictions.eq(pro, val)).list(); } public int findCounnt() { String query = "select count(*) from " + getEntityClass().getName(); return Integer.parseInt(findSession().createQuery(query).uniqueResult().toString()); } public int findCountLike(String pro, String val) { String query = "select count(*) from " + getEntityClass().getName() + " where " + pro + " like '%" + val + "%'"; return Integer.parseInt(findSession().createQuery(query).uniqueResult().toString()); } public int findCountByProperty(String pro, Object searchValue) { String query = "select count(*) from " + getEntityClass().getName() + " where " + pro + " = '" + searchValue + "'"; return Integer.parseInt(findSession().createQuery(query).uniqueResult().toString()); } public void deleteByProperty(String pro, Object value) { String query = "delete from " + getEntityClass().getName() + " where " + pro + "=" + value.toString(); findSession().createQuery(query).executeUpdate(); } public void deleteByPropertyString(String pro, Object val) { String query = "delete from " + getEntityClass().getName() + " where " + pro + "='" + val.toString() + "'"; findSession().createQuery(query).executeUpdate(); } @SuppressWarnings("unchecked") public T findById(long id) { return (T) findSession().get(getEntityClass().getName(), id); } public void save(Object obj) { findSession().save(obj); } public void delete(Object obj) { findSession().delete(obj); } }
package com.empl.mgr.dao; import java.util.List; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Repository; import com.empl.mgr.constant.PageConstant; import com.empl.mgr.dao.support.AbstractDao; import com.empl.mgr.dto.RoleListDto; import com.empl.mgr.model.TeAccountRole; import com.empl.mgr.model.TeRole; @Repository public class RoleDao extends AbstractDao<TeRole> { @Override public Class<TeRole> getEntityClass() { // TODO Auto-generated method stub return TeRole.class; } @SuppressWarnings("unchecked") public List<RoleListDto> findRoleList(int page, String searchVal) { // TODO Auto-generated method stub StringBuffer query = new StringBuffer(); query.append("select new com.empl.mgr.dto.RoleListDto (roleId, roleName, roleDescription, createTime, creator) from TeRole "); query.append(StringUtils.isNotBlank(searchVal) ? "where roleName like '%" + searchVal + "%'" : ""); query.append("order by roleId desc "); return findSession().createQuery(query.toString()).setFirstResult((page - 1) * PageConstant.PAGE_LIST) .setMaxResults(PageConstant.PAGE_LIST).list(); } public int findRoleCount(String searchVal) { // TODO Auto-generated method stub StringBuffer query = new StringBuffer(); query.append("select count(roleId) from TeRole "); query.append(StringUtils.isNotBlank(searchVal) ? "where roleName like '%" + searchVal + "%'" : ""); return Integer.parseInt(findSession().createQuery(query.toString()).uniqueResult().toString()); } @SuppressWarnings("unchecked") public List<TeAccountRole> findMyCharacter(String acctName, String roleLabel) { StringBuffer query = new StringBuffer(); query.append("from TeAccountRole where acctName = ? and roleLabel = ?"); return findSession().createQuery(query.toString()).setString(0, acctName).setString(1, roleLabel).list(); } }
package com.empl.mgr.dao; import java.util.List; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Repository; import com.empl.mgr.constant.AccountDeleteState; import com.empl.mgr.constant.PageConstant; import com.empl.mgr.dao.support.AbstractDao; import com.empl.mgr.dto.AccountListDto; import com.empl.mgr.model.TeAccount; @Repository public class AccountDao extends AbstractDao<TeAccount> { @Override public Class<TeAccount> getEntityClass() { // TODO Auto-generated method stub return TeAccount.class; } // long acctId, String acctName, String acctNickname, Date createTime, String creator @SuppressWarnings("unchecked") public List<AccountListDto> findAccountList(int page, String val) { // TODO Auto-generated method stub StringBuffer query = new StringBuffer(); query.append("select new com.empl.mgr.dto.AccountListDto "); query.append("(te.acctId, te.acctName, te.acctNickname, te.createTime, te.creator, te.acctSuper) "); query.append("from TeAccount te where te.acctDeleteState = ? "); query.append(StringUtils.isEmpty(val) ? "" : " and (te.acctNickname like '%" + val + "%' or te.acctName like '%" + val + "%')"); query.append("order by te.acctId desc"); return findSession().createQuery(query.toString()).setBoolean(0, AccountDeleteState.NO_DELETE) .setFirstResult((page - 1) * PageConstant.PAGE_LIST).setMaxResults(PageConstant.PAGE_LIST).list(); } public int findAccountPage(String val) { // TODO Auto-generated method stub StringBuffer query = new StringBuffer(); query.append("select count(te.acctId) from TeAccount te where te.acctDeleteState = ? "); query.append(StringUtils.isEmpty(val) ? "" : " and (te.acctNickname like '%" + val + "%' or te.acctName like '%" + val + "%')"); return Integer.parseInt(findSession().createQuery(query.toString()).setBoolean(0, AccountDeleteState.NO_DELETE) .uniqueResult().toString()); } }
可以减少重复代码的使用,精简项目的代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Go中对Sort接口的实现实例
- MUi框架ajax请求WebService接口实例
- 实战使用 Arthas 排查生产问题:实例方法接口调用
- python3+requests+unittest接口自动化实例讲解
- 原 荐 Android HTTP2 + Oauth2 + Jwt 接口认证实例
- JVM指令分析实例三(方法调用、类实例)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
精通CSS(第2版)
[英] Andy Budd、[英] Simon Collison、[英] Cameron Moll / 陈剑瓯 / 人民邮电出版社 / 2010-5 / 49.00元
本书汇集了最有用的CSS技术,介绍了CSS的基本概念和最佳实践,结合实例探讨了图像、链接和列表的操纵,还有表单设计、数据表格设计、纯CSS布局等核心CSS技术。此外,书中着眼于创建跨浏览器的技术,讨论了bug及其捕捉和修复技术,还将所有技术组合成两个精彩的实例,讲述这些技术的工作原理和实际用法。 本书适合具有HTML和CSS基础知识的读者阅读。一起来看看 《精通CSS(第2版)》 这本书的介绍吧!