Spring + Struts + Hibernate 简单封装通用接口
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 简单封装通用接口的更多相关文章
- Spring+Struts+Hibernate 简介(转)
http://blog.csdn.net/slnqnd/article/details/1772910/ Struts2.0 +Hibernate 3.2 +Spring 2.0 一. ...
- Spring+SpringMVC+Hibernate简单整合(转)
SpringMVC又一个漂亮的web框架,他与Struts2并驾齐驱,Struts出世早而占据了一定优势,下面同样做一个简单的应用实例,介绍SpringMVC的基本用法,接下来的博客也将梳理一下Str ...
- Spring与Hibernate整合之通用Dao的实现
在上一篇文章中写了如何直接利用HibernateTemplate进行数据库操作,但在一般的项目中很少直接得到HibernateTemplate的Bean对象从而操作数据库的,下面就简要介绍一下实现通用 ...
- MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-4]
引入Hibernate 在pom.xml中加入jar包引用 <!-- hibernate4 --> <dependency> <groupId>org.hibern ...
- MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-3]
引入Struts2 在pom.xml中加入jar包 <!-- struts2 --> <dependency> <groupId>org.apache.struts ...
- MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-2]
引入Spring 修改 pox.xml 文件 添加jar包引用 <!-- spring3 --> <dependency> <groupId>org.springf ...
- MyEclipse — Maven+Spring+Struts+Hibernate 整合 [学习笔记-1]
示例数据库test,用户信息表
- 用dubbo+zookeeper+spring搭建一个简单的http接口程序
dubbo是一个分布式服务框架,是阿里巴巴开发的一个解决RPC远程调用优化的核心框架,包含负载均衡算法,能提高分布式系统的性能. zookeeper是hadoop的一个子项目,主要用来解决分布式系统的 ...
- spring+struts+hibernate整合
spring整合: 1:添加配置文件和相应的spring jar包(记得一定要加上commons-logging的jar包,有坑****) 2:创建date对象,如果成功则spring的环境ok
随机推荐
- Linux 如何通过 iscsi target name 获取 ip
by Mike Andrews # lsscsi -t [:::] disk iqn.-.com.blockbridge:t-pjxfzufjkp-illoghjk,t,0x1 /dev/sda [: ...
- c语言解一元二次方程
C语言解一元二次方程,输入系数a,b,c; #include <stdio.h> #include <math.h> int main(int argc, char *argv ...
- 负载均衡服务之HAProxy访问控制ACL
前文我们聊到了haproxy的错误页的配置,自定义日志的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12797913.html:今天我们主要来看看hap ...
- unix域源码解析
首先我们先要创建一个用于通信的结构unix_proto_data ,并初始化某些字段 static int unix_proto_create(struct socket *sock, int pro ...
- python 列表加法"+"和"extend"的区别
相同点 : "+"和"extend"都能将两个列表成员拼接到到一起 不同点 : + : 生成的是一个新列表(id改变) extend : 是将一个列表的成员 ...
- 已有项目接入git远程仓库
1.项目根目录初始化git仓库 git init 2.将本地项目与远程仓库关联(首先得在远程创建一个代码仓库) git remote add origin 远程仓库地址 诺,仓库地址就是这个玩意 3. ...
- CSS开发技巧(三):图片点击缩放
前言 利用CSS实现图片的点击缩放是一个很值得研究的效果.在某些业务需求场景中,我们可能并没有足够的空间展示过大的图片,这就需要限制图片容器的宽度和高度.然而图片限制了宽度,一些图片的细节便又无法看 ...
- mac 关闭系统完整性保护 SIP(System Integrity Protection)的方法
在 OS X El Capitan 中有一个跟安全相关的模式叫 SIP(System Integrity Protection ) ,它禁止让软件以 root 身份来在 mac 上运行,并且对于目录 ...
- TCP连接过程及报文解析
可能大家都听过TCP建立连接时需要经历三次握手和四次挥手的. 那么具体的握手挥手的过程是怎么样的呢? 这篇文章就通过WireShark抓包来了解TCP连接建立和断开的过程. 实验方法: 写一段简单的代 ...
- JeeSite 4.0 简化业务逻辑层开发
2019独角兽企业重金招聘Python工程师标准>>> 引言 对于业务逻辑层的开发重复代码很多,尽管有代码生成器,但从代码量总的来说还是比较多,所以就有了以下抽象类及工具,对一些常用 ...