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
随机推荐
- php://input和parse_str()使用
php://input可以读取没有处理过的POST数据,总结起来就是, 在用$_POST获取不到由APP或者一些接口的回调数据时,就用php://input试试 实例 index.php <fo ...
- 双链表【参照redis链表结构】
参照了Redis里面的双链表结构,可以说是完全复制粘贴,redis的双链表还是写的很通俗易懂的,没有什么花里胡哨的东西,但是redis还有个iter迭代器的结构来遍历链表.我这里就没有实现了,只是实现 ...
- ERC20 Short Address Attack
ERC20 Short Address Attack 什么是ERC20 Application Binary Interface(ABI) ERC20 Short Address Attack 开始攻 ...
- 理解分布式一致性:拜占庭容错与PBFT
理解分布式一致性:拜占庭容错与PBFT 拜占庭问题 拜占庭容错BFT PBFT(Practical Byzantine Fault Tolerance) why 3f+1 ? PBFT 的优点 PBF ...
- 【高并发】又一个朋友面试栽在了Thread类的stop()方法和interrupt()方法上!
写在前面 新一轮的面试已经过去,可能是疫情的原因吧,很多童鞋纷纷留言说今年的面试题难度又提高了,尤其是对并发编程的知识.我细想了下,也许有那么点疫情的原因吧,但无论面试的套路怎么变,只要掌握了核心知识 ...
- 【linux三剑客】sed命令
sed - stream editor for filtering and transforming text sed 流编辑器 strem edition,实现对文件的增删改替换查是Linux中第二 ...
- 09-5.部署 EFK 插件
09-5.部署 EFK 插件 EFK 对应的目录:kubernetes/cluster/addons/fluentd-elasticsearch $ cd /opt/k8s/kubernetes/cl ...
- Vue Cli 3 报错:router is not defined
报错内容: 报错原因: 代码全部放在了路由配置的main.js文件里,router没有定义,使用的时候报undefined 解决方法: 把router.beforeEach放在main.js里面
- Next.js 7发布,构建速度提升40%
Next.js团队发布了其开源React框架的7版本.该版本的Next.js主要是改善整体的开发体验,包括启动速度提升57%.开发时的构建速度提升40%.改进错误报告和WebAssembly支持. \ ...
- mybatis源码学习(三):MappedStatement的解析过程
我们之前介绍过MappedStatement表示的是XML中的一个SQL.类当中的很多字段都是SQL中对应的属性.我们先来了解一下这个类的属性: public final class MappedSt ...