`
lushuaiyin
  • 浏览: 705239 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java架构搭建(二)--常用api封装

 
阅读更多

此篇接上篇(java架构搭建(一))继续 http://blog.csdn.net/lushuaiyin/article/details/8588203

到此按照步骤应该测试ssh的整合是否可用


一,HibernateTemplate的封装

为什么要用HibernateTemplate?因为它已经帮我们封装好了很多方法(在spring中)。我们不必直接调用sessionFactory,再调用事务transAction,再调用session...

我们使用hibernate无非就是操作数据库,就是增删改查。这里封装好了,我们直接用就很方便了。在此我再进一步封装,以便于我们自己理解和使用,

或者简化它,或者完善它。对HibernateTemplate的封装,我们并不直接继承org.springframework.orm.hibernate3.HibernateTemplate,

而是继承org.springframework.orm.hibernate3.support.HibernateDaoSupport。为什么呢?我们看看源码:

/*jadclipse*/// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.

package org.springframework.orm.hibernate3.support;

import org.hibernate.*;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.dao.support.DaoSupport;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.SessionFactoryUtils;

public abstract class HibernateDaoSupport extends DaoSupport
{

    public HibernateDaoSupport()
    {
    }

    public final void setSessionFactory(SessionFactory sessionFactory)
    {
        if(hibernateTemplate == null || sessionFactory != hibernateTemplate.getSessionFactory())
            hibernateTemplate = createHibernateTemplate(sessionFactory);
    }

    protected HibernateTemplate createHibernateTemplate(SessionFactory sessionFactory)
    {
        return new HibernateTemplate(sessionFactory);
    }

    public final SessionFactory getSessionFactory()
    {
        return hibernateTemplate == null ? null : hibernateTemplate.getSessionFactory();
    }

    public final void setHibernateTemplate(HibernateTemplate hibernateTemplate)
    {
        this.hibernateTemplate = hibernateTemplate;
    }

    public final HibernateTemplate getHibernateTemplate()
    {
        return hibernateTemplate;
    }

    protected final void checkDaoConfig()
    {
        if(hibernateTemplate == null)
            throw new IllegalArgumentException("'sessionFactory' or 'hibernateTemplate' is required");
        else
            return;
    }

    protected final Session getSession()
        throws DataAccessResourceFailureException, IllegalStateException
    {
        return getSession(hibernateTemplate.isAllowCreate());
    }

    protected final Session getSession(boolean allowCreate)
        throws DataAccessResourceFailureException, IllegalStateException
    {
        return allowCreate ? SessionFactoryUtils.getSession(getSessionFactory(), hibernateTemplate.getEntityInterceptor(), hibernateTemplate.getJdbcExceptionTranslator()) : SessionFactoryUtils.getSession(getSessionFactory(), false);
    }

    protected final DataAccessException convertHibernateAccessException(HibernateException ex)
    {
        return hibernateTemplate.convertHibernateAccessException(ex);
    }

    protected final void releaseSession(Session session)
    {
        SessionFactoryUtils.releaseSession(session, getSessionFactory());
    }

    private HibernateTemplate hibernateTemplate;
}


/*
	DECOMPILATION REPORT

	Decompiled from: D:\ChinaDevelopmentBankJBPM\workSpace\frame\webapp\WEB-INF\lib\spring-orm-3.0.3.RELEASE.jar
	Total time: 139 ms
	Jad reported messages/errors:
	Exit status: 0
	Caught exceptions:
*/

其中方法public final void setSessionFactory(SessionFactory sessionFactory) 是为了注入sessionFactory;

public final void setHibernateTemplate(HibernateTemplate hibernateTemplate)是为了注入hibernateTemplate;

我们在applicationContext.xml中配置好后,就可以注入。要使用这些对象只要用get方法即可获取到。

而org.springframework.orm.hibernate3.HibernateTemplate类主要实现了数据库的操作,里面的方法很多。

比如public void saveOrUpdate(final Object entity);public Serializable save(final Object entity);

public void delete(Object entity);其中有个方法比较重要,因为和事务有关:

public Object execute(HibernateCallback action)
        throws DataAccessException
    {
        return doExecute(action, false, false);
    }

我进行的封装MyHibernateDao

package org.base;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public abstract class MyHibernateDao extends HibernateDaoSupport {
	
	protected final HibernateTemplate createHibernateTemplate(SessionFactory sessionFactory) {
		return new HibernateTemplate(sessionFactory);
	}
	
    /////////////////////以下是对原生SQL语句的封装///////////////////////////
	
	//执行insert,update,delete语句
	public void executeSql(final String sql) {
		this.getHibernateTemplate().execute(
				new HibernateCallback<Object>(){
					public Object doInHibernate(Session session) throws HibernateException {
						session.createSQLQuery(sql).executeUpdate();
						return null;
					}
				}		
		);
	}
	//执行select语句
	public List querySql(final String sql) {    
	    return (List) this.getHibernateTemplate().execute(
	    		new HibernateCallback<Object>() {    
		            public Object doInHibernate(Session session) throws HibernateException {    
		                   try {    
		                       SQLQuery query = session.createSQLQuery(sql);
		                       return query.list();    
		                   } catch (Exception e) {
		                	   return null;
		                   }    
		            }    
		        }		
	    );    
	}
	
	
	/////////////////////以下是对HQL语句的封装///////////////////////////
	
	
	//执行insert,update,delete语句
	public int executeHql(final String hql) throws DataAccessException {
		return ((Integer)this.getHibernateTemplate().execute(
				new HibernateCallback<Object>(){
					public Object doInHibernate(Session session) throws HibernateException {
						Query query = session.createQuery(hql);
						return new Integer(query.executeUpdate());
					}
				}		
		)).intValue();
	}
	
	//执行select语句
	public List queryListHql(final String hql) throws DataAccessException {
		return (List)this.getHibernateTemplate().execute(
				new HibernateCallback<Object>(){
					public Object doInHibernate(Session session) throws HibernateException, SQLException {
						Query query = session.createQuery(hql);
						return query.list();
					}
				}		
		);
	}
	
	
	public void saveOrUpdateHql(Object obj) {
       getHibernateTemplate().saveOrUpdate(obj);
    }
	
	public Serializable saveHql(Object obj) {
	   return getHibernateTemplate().save(obj);
	}
	
	public void deleteHql(Object obj) {
    	getHibernateTemplate().delete(obj);
    }
	
	
}

只是简单进行了常用封装,对于HibernateTemplate中更多有用的方法还没封装。

这样在操作数据库的service层,我们就可以继承这个MyHibernateDao,并使用里面的方法了。


二,对BaseAction的封装。

大多数action层不会直接继承ActionSupport(在学习struts2时我们直接继承这个ActionSupport)。

一般情况下,在业务层就是action里,我们会有一些常用的方法,比如比session的操作,登录用户信息的获取等,

这些常用的方法如果每次用到都重新写一遍那真是代码太过冗余,而且也不好维护,把这些方法封装在BaseAction里,

我们只需要把业务的action继承这个BaseAction就可以使用这些方法了。


MyBaseAction

package org.base;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class MyBaseAction  extends ActionSupport {
	
	private static final long serialVersionUID = 1L;
	public ActionContext getActionContext() throws Exception{
		return ActionContext.getContext();
	}
	
	public HttpSession getHttpSession() throws Exception{
		ActionContext ctx = ActionContext.getContext();
		HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);
		return request.getSession();
	}
	
	public HttpServletRequest getHttpServletRequest() throws Exception{
		ActionContext ctx = ActionContext.getContext();
		HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST);
		return request;
	}
	
	public HttpServletResponse getHttpServletResponse() throws Exception{
		ActionContext ctx = ActionContext.getContext();
		HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE);
		return response;
	}
	
	public PrintWriter getPrintWriter() throws Exception{
		ActionContext ctx = ActionContext.getContext();
		HttpServletResponse response = (HttpServletResponse) ctx.get(ServletActionContext.HTTP_RESPONSE); 
		PrintWriter out = response.getWriter();
		return out;
	}
	/////////////////////////////ActionContext取值放值//////////////////////////////////////////////
	
	public Object getValueFromActionContext(String key) throws Exception{
		ActionContext ac = ActionContext.getContext();
		if(key==null||key.trim().equals("")){
			return null;
		}else{
			return ac.get(key.trim());
		}
	}
	public void setValueToActionContext(String key,Object obj) throws Exception{
		ActionContext ac = ActionContext.getContext();
		if(key==null||key.trim().equals("")){
		}else{
			ac.put(key.trim(), obj);
		}
	}
	
    /////////////////////////////HttpSession取值放值//////////////////////////////////////////////
	public Object getValueFromSession(String key) throws Exception{
		ActionContext ctx = ActionContext.getContext();
		HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); 
		HttpSession session=request.getSession();
		if(key==null||key.trim().equals("")){
			return null;
		}else{
			return session.getAttribute(key.trim());
		}
	}
	public void setValueToSession(String key,Object obj) throws Exception{
		ActionContext ctx = ActionContext.getContext();
		HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); 
		HttpSession session=request.getSession();
		if(key==null||key.trim().equals("")){
		}else{
			session.setAttribute(key.trim(), obj);
		}
	}
	
	/////////////////////////////HttpServletRequest取值放值//////////////////////////////////////////////
	public Object getValueFromRequest(String key) throws Exception{
		ActionContext ctx = ActionContext.getContext();
		HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); 
		if(key==null||key.trim().equals("")){
			return null;
		}else{
			return request.getAttribute(key.trim());
		}
	}
	public void setValueToRequest(String key,Object obj) throws Exception{
		ActionContext ctx = ActionContext.getContext();
		HttpServletRequest request  = (HttpServletRequest) ctx.get(ServletActionContext.HTTP_REQUEST); 
		if(key==null||key.trim().equals("")){
		}else{
			request.setAttribute(key.trim(), obj);
		}
	}
	
}

这里我只封装了常用的session,request取值放值。


测试功能模块,代码过多,还是另起一篇吧。








分享到:
评论

相关推荐

    javacv环境搭建必须包

    一旦环境搭建完成,你就可以开始使用JavaCV的API了。例如,你可以创建一个`VideoCapture`对象来读取视频文件,或者使用`HighGui`模块显示图像。OpenCV的功能可以通过JavaCV的包装器类来调用,如`org.bytedeco.java...

    Java柠檬班Java全栈自动化-视频课程资源网盘链接提取码下载 .txt

    - **RESTful API设计**:学习如何设计符合REST原则的API接口,实现前后端分离架构下的数据交互。 #### 四、自动化测试 - **单元测试**:使用JUnit框架编写有效的单元测试代码,确保单个模块的功能正确性。 - **集成...

    javacv1.1-linux-x86

    在“javacv1.1-linux-x86”这个版本中,主要面向Linux操作系统x86架构,为开发者提供了在该环境下进行图像和视频处理的强大工具。 1. **OpenCV**:OpenCV是一个跨平台的计算机视觉库,包含了大量的图像和视频处理...

    基于java的-130-jspm枣庄美食街网站-源码.zip

    1. **Java Web开发基础**:Java是服务器端开发的常用语言,主要通过Servlet和JSP(JavaServer Pages)进行动态网页的生成。Servlet是Java编写服务器端程序的核心API,用于处理客户端请求;JSP则是一种视图技术,允许...

    最新java电商项目实战-青橙商城-青橙秒杀-网站前台开发-管理后台开发-前端相关

    10. **工具类**:封装了一系列常用的功能函数,简化开发流程。 11. **电子书**:项目相关的技术书籍或教程。 12. **本地仓库**:项目的完整代码仓库,可用于参考或二次开发。 #### 技术栈 - **后端**: - Java语言...

    appium的java实现+appium原理

    Appium的特色在于它采用client-server架构,支持多语言实现,比如Java、Objective-C、JavaScript、PHP、Python、Ruby、C#、Clojure或Perl语言,并兼容Selenium WebDriver的API。 从Appium的工作原理来看,它利用了...

    Java微服务架构163课

    全套微服务架构,视频学习java微服务架构,包括如下 第1章 微服务简介 001构建单体应用 002微服务解决复杂问题 003微服务的优点 004微服务的缺点 第2章 Linux使用 005Linux 简介 006Linux 与 Windows ...

    Java微服务架构l零从基础到精通高清视频教程全套 163课

    Java微服务架构l零从基础到精通高清视频教程全套 第1章 微服务简介 001构建单体应用 002微服务解决复杂问题 003微服务的优点 004微服务的缺点 第2章 Linux使用 005Linux 简介 006Linux 与 Windows 比较 007...

    rocketmq-4.7.1Java 项目完整jar集合

    这些API封装了与服务器的交互细节,使得开发者能更专注于业务逻辑。 3. **Netty组件**:RocketMQ使用Netty作为其网络通信框架,Netty是一个高效的异步事件驱动的网络应用框架,适用于开发高性能、高可用性的网络...

    高级Java软件架构师学习计划

    ### 高级Java软件架构师学习计划详述 #### 一、Java基础 - **Java语法与编程基础** - **学习目标**:建立Java程序设计基本环境,培养软件开发基本思维。 - **具体内容**:熟悉Java开发环境的配置,掌握基本软件...

    基于java的-67-57-网上书店-源码.zip

    这是一个基于Java的网上书店项目源码...这个网上书店项目涵盖了Java Web开发中的多个关键方面,包括后端服务、数据库操作、API设计、安全控制等,对于学习和实践Spring Boot技术栈的开发者来说,是一个很好的参考资料。

    Java工程师简历模板-花了一星期最终成稿

    2. Java API与集合框架:求职者熟悉常用的Java API,包括集合框架,这是Java编程中处理数据集合的核心工具。了解List、Set、Map等接口以及ArrayList、HashSet、HashMap等常用实现类,熟悉它们的使用场景和性能特点。...

    精通Java--JDK、数据库系统开发、Web开发基础与实例

    首先,书中详细介绍了Java编程环境的搭建,包括如何下载和安装JDK(Java Development Kit),这是Java开发的基础。JDK包含了Java编译器、运行时环境和各种工具,如Javac用于编译源代码,JVM(Java Virtual Machine)...

    基于java的-158-springboot家政服务管理平台--LW-源码.zip

    这是一个基于Java技术栈,具体是SpringBoot框架构建的家政服务管理平台的源码项目。这个项目对于学习Java后端开发、SpringBoot应用以及家政服务行业系统设计的学生或者开发者来说,具有很高的参考价值。 首先,...

    专业培训java的基本课程-7页精选文档.pdf

    Java API的使用是学习的重点,涉及到常用的类库和方法。数据结构和算法基础是程序设计的基石,它帮助开发者更有效地组织和处理数据。Java AWT和Swing用于构建图形用户界面(GUI),而Socket网络应用程序设计则涉及...

    基于java的开发源码-仓库管理系统,Access数据库.zip

    通过Java的强大功能和Access的易用性,开发者能够快速搭建并定制符合企业需求的库存管理系统,从而提升企业的运营效率。在实际开发中,理解并掌握Java的面向对象设计、MVC架构、JDBC接口以及DAO模式,是成功构建此类...

    New Riders - XML, XSLT, Java and JSP--A Case Study in Developing A Web Application

    这一部分详细讲解了如何搭建 Java 的开发环境,包括安装必要的软件工具如 JDK (Java Development Kit) 和 IDE (Integrated Development Environment),例如 Eclipse 或 IntelliJ IDEA。此外,还介绍了如何配置开发...

    张孝祥 Java就业培训教程-书内源码及PPT文档.rar

    二、Java进阶 2.1 集合框架:掌握ArrayList、LinkedList、HashMap等数据结构的使用。 2.2 异常处理:理解异常的概念,学会try-catch-finally语句的使用。 2.3 文件与流:文件操作,输入输出流,对象序列化和反序列化...

    java Spring中文APi文档

    3. **数据访问/集成**:Spring提供了对各种持久化技术的支持,包括JDBC、ORM(Object-Relational Mapping)框架如Hibernate和MyBatis,以及JPA(Java Persistence API)。 4. **MVC(Model-View-Controller)**:...

    java学习路线(鱼皮)

    在Java入门阶段,学习者需要掌握Java基础语法、数据类型、流程控制、数组、面向对象、方法重载、封装、继承、多态、抽象类、接口、枚举、常用类、String、日期时间、集合类、泛型、注解、异常处理、多线程、IO流、...

Global site tag (gtag.js) - Google Analytics