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. 二叉树中两节点的最近公共父节点(360的c++一面问题)

    面试官的问题:写一个函数  TreeNode* Find(TreeNode* root, TreeNode* p, TreeNode* q) ,返回二叉树中p和q的最近公共父节点. 本人反应:当时有点 ...

  2. 解释BOM头和去掉方法

    http://www.thinkphp.cn/topic/2592.html 以上是叫你去掉bom头的,因为有些文件加载不出来就是window会以记事本的形式打开,然后默认给我们加了了bom头,有些文 ...

  3. OpenCV学习(2)——一个简单的例子

    光说不练假把式,来看一个简单的例子,了解了解OpenCV.这个小demo没有几行代码,作用是显示项目目录下面的一张图片. #include <opencv2\opencv.hpp> #in ...

  4. Hybrid Automata 混合自动机入门

    混合自动机用来建立混合系统的数学模型.混合系统包括时间驱动部分和事件驱动部分.事件驱动部分就是几种模式,事件驱动部分就是微分方程.一个例子是汽车换挡,一档二档三档这些挡位就是事件驱动部分,时间驱动部分 ...

  5. Semaphores

    信号量和P,V原语的使用可归纳为三种情形: 把信号量视为加锁标志位,其目的是为了实现对某个唯一的共享数据的互斥访问,如各个进程间的某共享变量,数据库中的某个记录. 共享数据的值与信号量本身的值没有直接 ...

  6. centos7 安装高版本svn

    一.安装高版本svn 1.创建一个新的yum库文件,vim /etc/yum.repos.d/wandisco-svn.repo 内容如下 [WandiscoSVN] name=Wandisco SV ...

  7. python安装pycrypto库

    使用pycharm时安装pycrypto库,一直安装不上,提示安装成功,退出去一看,依旧没有 最后选择了pip安装,但一直报错(Microsoft Visual C++ 9.0 is required ...

  8. Java——TCP/IP超详细总结

    网络的基础知识 一.协议 1.简介: 在计算机网络与信息通信领域里,人们经常提及“协议”一词.互联网中常用的具有代表性的协议有IP.TCP.HTTP等.而LAN(局域网)中常用的协议有IPX/SPX” ...

  9. JavaScript 循环判断练习题

    JavaScript 循环判断练习题 小明有一组水果("苹果","梨子","香蕉","葡萄","西瓜" ...

  10. B. Marvolo Gaunt's Ring 前缀后缀

    B. Marvolo Gaunt's Ring 这种一般只有三个的都可以处理前缀和后缀,再枚举中间这个值. 这个和之前写过的C. Four Segments 前缀后缀 处理方式很像. #include ...