1、BaseDao

public interface BaseDao<T> {
/**
* 获取符合条件的记录数
* @param filter
* @param sortName
* @param sortOrder
* @return int
*/
public int findCount(String filter, String sortName, String sortOrder); /**
* 获取分页数据
* @param filter
* @param sortName
* @param sortOrder
* @param startSize
* @param pageSize
* @return List<T>
*/
public List<T> findGrid(String filter, String sortName, String sortOrder, int startSize, int pageSize); /**
* 添加实体类对象
* @param entity
* @return int
*/
public int add(T entity); /**
* 根据主键获取实体类对象
* @param id
* @return T
*/
public T getById(int id); /**
* 更新实体类对象
* @param entity
* @return boolean
*/
public boolean update(T entity); /**
* 删除实体类对象
* @param id
* @return boolean
*/
public boolean delete(int id); }

2、BaseDaoImpl

public  class BaseDaoImpl<T> implements BaseDao<T>{

    private Class<T> clazz = null;// 表示当前的类型

    private SessionFactory sessionFactory;
/**
* 通过反射技术获得子类T的真实值
* 由于在子类中首先调用的是父类的构造方法
*/
@SuppressWarnings("unchecked")
public BaseDaoImpl(){
// 获取当前new的对象的泛型的父类类型
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
// 获取第一个类型参数的真实类型
clazz = (Class<T>) pt.getActualTypeArguments()[0];
} public Session getSession() {
return sessionFactory.openSession();
} public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
} @Override
public int findCount(String filter, String sortName, String sortOrder) {
Session session=getSession();
StringBuffer hql=new StringBuffer("");
hql.append("from ").append(clazz.getSimpleName()).append(" where ").append(filter).append(" order by ").append(sortName).append(" ").append(sortOrder);
int num=0;
try{
Query query = session.createQuery(hql.toString());
List<T> list=query.list();
num=list.size();
}catch(Exception ex){
ex.printStackTrace();
}finally{
session.close();
}
return num;
} @Override
public List<T> findGrid(String filter, String sortName, String sortOrder, int startSize, int pageSize) {
Session session=getSession();
List<T> list=null;
StringBuffer hql=new StringBuffer("");
hql.append("from ").append(clazz.getSimpleName()).append(" where ").append(filter).append(" order by ").append(sortName).append(" ").append(sortOrder);
try{
Query query =session.createQuery(hql.toString());
query.setFirstResult(startSize); //设置这一页显示的第一条记录的索引
query.setMaxResults(pageSize); //这一页显示的记录个数
list=query.list();
}catch(Exception ex){
ex.printStackTrace();
}finally{
session.close();
}
return list;
} @Override
public int add(T entity) {
int num=0; //标识注册是否成功
Session session=getSession();
try{
Transaction trans=session.beginTransaction();
num=Integer.parseInt(session.save(entity).toString());//在缓存中保存数据,受影响行数
trans.commit();//写入数据库表
}catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
return num;
} @Override
public T getById(int id) {
T entity=null;
Session session=getSession();
try{
entity=(T)session.get(clazz,id);
}catch(Exception ex){
ex.printStackTrace();
}finally{
session.close();
}
return entity;
} @Override
public boolean update(T entity) {
boolean flag=false;
Session session = getSession();
try{
Transaction trans=session.beginTransaction();
session.update(entity);
trans.commit();
flag=true;
}catch(Exception ex){
ex.printStackTrace();
}finally{
session.close();
}
return flag;
} @Override
public boolean delete(int id) {
boolean flag=false;
Session session=getSession();
try{
T entity=(T)session.get(clazz,id);
Transaction trans=session.beginTransaction();
session.delete(entity);
trans.commit();
flag=true;
}catch(Exception ex){
ex.printStackTrace();
}finally{
session.close();
}
return flag;
} }

3、BaseService

public interface BaseService<T> {

    public Map<String,Object> findGrid(String filter, String sortName, String sortOrder, int startSize, int pageSize);

    public int add(T entity);

    public T getById(int id);

    public boolean update(T entity);

    public boolean delete(int id);

}

4、BaseServiceImpl

public class BaseServiceImpl<T> implements BaseService<T> {

    private BaseDao baseDao;

    public BaseDao getBaseDao() {
return baseDao;
}
public void setBaseDao(BaseDao baseDao) {
this.baseDao = baseDao;
} @Override
public Map<String, Object> findGrid(String filter, String sortName, String sortOrder, int startSize, int pageSize) {
// TODO Auto-generated method stub
Map<String,Object> result = new HashMap<String,Object>();
int total=baseDao.findCount( filter, sortName, sortOrder);
List<T> rows=baseDao.findGrid(filter, sortName, sortOrder, startSize, pageSize);
result.put("total",total);
result.put("rows",rows);
return result;
} @Override
public int add(T entity) {
// TODO Auto-generated method stub
return baseDao.add(entity);
} @Override
public T getById(int id) {
// TODO Auto-generated method stub
return (T) baseDao.getById(id);
} @Override
public boolean update(T entity) {
// TODO Auto-generated method stub
return baseDao.update(entity);
} @Override
public boolean delete(int id) {
// TODO Auto-generated method stub
return baseDao.delete(id);
}
}

5、BaseAction

public class BaseAction<T> extends ActionSupport{
// 取得request对象
protected HttpServletRequest request = null;
// 取得response对象
protected HttpServletResponse response = null;
//service类对象
protected BaseService baseService;
//实体类对象
protected T entity;
//主键
protected int id;
//主键字符串ids
protected String ids;
//每页的记录数
protected int pageSize;
//第几页
protected int pageNumber;
//排序字段
protected String sortName;
//排序方式
protected String sortOrder;
//返回结果
protected Result result=new Result(false, "操作失败");
//过滤条件
protected String filter=null;
//查询字段
//protected String fieldlist = null; public BaseService getBaseService() {
return baseService;
}
public void setBaseService(BaseService baseService) {
this.baseService = baseService;
}
public T getEntity() {
return entity;
}
public void setEntity(T entity) {
this.entity = entity;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getIds() {
return ids;
}
public void setIds(String ids) {
this.ids = ids;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public String getSortName() {
return sortName;
}
public void setSortName(String sortName) {
this.sortName = sortName;
}
public String getSortOrder() {
return sortOrder;
}
public void setSortOrder(String sortOrder) {
this.sortOrder = sortOrder;
} protected void grid(){
int startSize=(pageNumber-1) * pageSize;
toAjax(baseService.findGrid(filter, sortName, sortOrder, startSize, pageSize));
} protected void save(){
if(id!=0){
boolean flag=baseService.update(entity);
if(flag){
result.setFlag(true);
result.setMsg("操作成功");
}
}else{
int i=baseService.add(entity);
if(i > 0){
result.setFlag(true);
result.setMsg("操作成功");
}
}
toAjax(result);
} protected void getById() {
toAjax(baseService.getById(id));
} protected void delete(){
String[] array = ids.split(",");
boolean flag=false;
for(String id : array){
flag=baseService.delete(Integer.parseInt(id));
}
if(flag){
result.setFlag(true);
result.setMsg("操作成功");
}
toAjax(result);
} /**
* 转换成ajax可以接收的数据
* @param data
*/
protected void toAjax(Object data) {
Gson gson= new Gson();
final String json= gson.toJson(data);
System.out.println("打印数据:"+json);
try {
response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
response.setHeader("cache-control", "no-cache");
response.setCharacterEncoding("UTF-8");
response.flushBuffer();
response.getWriter().write(json);
response.getWriter().flush();
response.getWriter().close();
} catch (IOException e) {
e.printStackTrace();
} }
}

 这是小编的原创随笔,请尊重原创,若是转载请注明出处,谢谢。

Spring + Struts + Hibernate 简单封装通用接口的更多相关文章

  1. Spring+Struts+Hibernate 简介(转)

    http://blog.csdn.net/slnqnd/article/details/1772910/ Struts2.0 +Hibernate 3.2 +Spring 2.0 一.         ...

  2. Spring+SpringMVC+Hibernate简单整合(转)

    SpringMVC又一个漂亮的web框架,他与Struts2并驾齐驱,Struts出世早而占据了一定优势,下面同样做一个简单的应用实例,介绍SpringMVC的基本用法,接下来的博客也将梳理一下Str ...

  3. Spring与Hibernate整合之通用Dao的实现

    在上一篇文章中写了如何直接利用HibernateTemplate进行数据库操作,但在一般的项目中很少直接得到HibernateTemplate的Bean对象从而操作数据库的,下面就简要介绍一下实现通用 ...

  4. MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-4]

    引入Hibernate 在pom.xml中加入jar包引用 <!-- hibernate4 --> <dependency> <groupId>org.hibern ...

  5. MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-3]

    引入Struts2 在pom.xml中加入jar包 <!-- struts2 --> <dependency> <groupId>org.apache.struts ...

  6. MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-2]

    引入Spring 修改 pox.xml 文件 添加jar包引用 <!-- spring3 --> <dependency> <groupId>org.springf ...

  7. MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-1]

    示例数据库test,用户信息表

  8. 用dubbo+zookeeper+spring搭建一个简单的http接口程序

    dubbo是一个分布式服务框架,是阿里巴巴开发的一个解决RPC远程调用优化的核心框架,包含负载均衡算法,能提高分布式系统的性能. zookeeper是hadoop的一个子项目,主要用来解决分布式系统的 ...

  9. spring+struts+hibernate整合

    spring整合: 1:添加配置文件和相应的spring jar包(记得一定要加上commons-logging的jar包,有坑****) 2:创建date对象,如果成功则spring的环境ok

随机推荐

  1. Libra白皮书解读

    文章目录 Libra简介 Libra区块链 Libra货币和存储 Libra协会 Libra简介 Libra是facebook发起的一个区块链项目,其使命是建立一套简单的.无国界的货币和为数十亿人服务 ...

  2. js 之 for循环

    js之 for循环 普通for 循环 语法 for ([initialization]; [condition]; [final-expression]) statement initializati ...

  3. tensor的复制函数torch.repeat_interleave()

    1. repeat_interleave(self: Tensor, repeats: _int, dim: Optional[_int]=None) 参数说明: self: 传入的数据为tensor ...

  4. 多方法解决设置width:100%再设置margin或padding溢出的问题

    2019独角兽企业重金招聘Python工程师标准>>> 当设置了父元素的宽度,子元素设置宽度为100%后再在加上子元素上添加padding或margin值就会溢出.举个例子: < ...

  5. 通过fiddler抓取IDEA的请求

    2019独角兽企业重金招聘Python工程师标准>>> 因为fiddler默认是代理的8888端口,所以设置一下IDEA的请求使用本地的8888作为代理发出. 1."EDI ...

  6. Clickhouse 时区转换

    Clickhouse 时区转换 ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS). OLAP场景的关键特征 大多数是读请求 数据总是以相当大的批(> 1000 ...

  7. 图论--DFS总结

    1.Key word:①双向DFS  ②回溯 今天就看到了这么多DFS,其实DFS更倾向于枚举所有情况. 对于双向DFS,我们考虑看看最短路,起点做一下搜索,记录一下到所有点的距离,终点做一下搜索,记 ...

  8. D. Caesar's Legions

    \(状态很容易设计\) \(设dp[i][j][u][v]表示放了i个1兵种和j个2兵种\) \(然后u不会0说明末尾放了连续u个1兵种,v不为0说明末尾放了连续v个2兵种\) #include &l ...

  9. C. Jury Marks 思维

    C. Jury Marks 这个题目虽然是只有1600,但是还是挺思维的. 有点难想. 应该可以比较快的推出的是这个肯定和前缀和有关, x x+a1 x+a1+a2 x+a1+a2+a3... x+s ...

  10. dp cf 20190615

    A. Timofey and a tree 这个不算是dp,就是一个思维题,好难想的思维题,看了题解才写出来的, 把点和边分开,如果一条边的两个点颜色不同就是特殊边,特殊边两边连的点就叫特殊点, 如果 ...