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. 常用的python开发工具对比

    一名优秀的Python开发人员都有一套好用的Python开发工具,好的开发工具可以使Python开发人员的工作更高效,以下是几款比较好用的Python开发工具,Python开发人员,尤其是初学者,可以 ...

  2. Istio架构详解

    Istio架构及其组件概述 Istio 架构总体来说分为控制面和数据面两部分.控制面是 Istio 的核心,管理 Istio 的所有功能,主要包括Pilot.Mixer.Citadel等服务组件;数据 ...

  3. SSL/TLS 漏洞“受戒礼”,RC4算法关闭

    SSL/TLS 漏洞"受戒礼" 一.漏洞分析 事件起因 2015年3月26日,国外数据安全公司Imperva的研究员Itsik Mantin在BLACK HAT ASIA 2015 ...

  4. 2019-2020-1 20199329《Linux内核原理与分析》第五周作业

    <Linux内核原理与分析>第五周作业 一.上周问题总结: 虚拟机将c文件汇编成汇编文件时忘记添加include<stdio.h> gdb跟踪汇编过程不熟练 二.本周学习内容: ...

  5. 实用的linux 命令(上)

    今天介绍几个我常用的Linux 命令,每个命令这里只介绍其常用参数. 对于每个Linux 命令都可以使用man + 命令名称,查看其完整使用方法. 0,man man 命令是一个非常有用的命令,当你不 ...

  6. [redis]SDS和链表

    一.SDS 1.SDS结构体 redis3.2之前:不管buf的字节数有多少,都用 4字节的len来储存长度,对于只存短字符串那么优点浪费空间,比如只存 name,则len=4 则只需要一个字节8位即 ...

  7. Shell中的here文档

    1.名词解释: 以下是维基百科解释: here文档[1],又称作heredoc.hereis.here-字串或here-脚本,是一种在命令行shell(如sh.csh.ksh.bash.PowerSh ...

  8. Phaser都不懂,还学什么多线程

    前面的文章中我们讲到了CyclicBarrier.CountDownLatch的使用,这里再回顾一下CountDownLatch主要用在一个线程等待多个线程执行完毕的情况,而CyclicBarrier ...

  9. SpringBoot内置生命周期事件详解 SpringBoot源码(十)

    SpringBoot中文注释项目Github地址: https://github.com/yuanmabiji/spring-boot-2.1.0.RELEASE 本篇接 SpringBoot事件监听 ...

  10. 【用AI开挂的人生】5岁学编程,12岁进IBM

    " 跟普通孩子比起来,14岁少年Tanmay Bakshi身上有无数光环: 5岁开始对计算机感兴趣 9岁发布了第1个iOSAPP 12岁成为IBM沃森最年轻的程序员 现任IBM Watson ...