此篇接上篇(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的API了。例如,你可以创建一个`VideoCapture`对象来读取视频文件,或者使用`HighGui`模块显示图像。OpenCV的功能可以通过JavaCV的包装器类来调用,如`org.bytedeco.java...
- **RESTful API设计**:学习如何设计符合REST原则的API接口,实现前后端分离架构下的数据交互。 #### 四、自动化测试 - **单元测试**:使用JUnit框架编写有效的单元测试代码,确保单个模块的功能正确性。 - **集成...
在“javacv1.1-linux-x86”这个版本中,主要面向Linux操作系统x86架构,为开发者提供了在该环境下进行图像和视频处理的强大工具。 1. **OpenCV**:OpenCV是一个跨平台的计算机视觉库,包含了大量的图像和视频处理...
1. **Java Web开发基础**:Java是服务器端开发的常用语言,主要通过Servlet和JSP(JavaServer Pages)进行动态网页的生成。Servlet是Java编写服务器端程序的核心API,用于处理客户端请求;JSP则是一种视图技术,允许...
10. **工具类**:封装了一系列常用的功能函数,简化开发流程。 11. **电子书**:项目相关的技术书籍或教程。 12. **本地仓库**:项目的完整代码仓库,可用于参考或二次开发。 #### 技术栈 - **后端**: - Java语言...
Appium的特色在于它采用client-server架构,支持多语言实现,比如Java、Objective-C、JavaScript、PHP、Python、Ruby、C#、Clojure或Perl语言,并兼容Selenium WebDriver的API。 从Appium的工作原理来看,它利用了...
全套微服务架构,视频学习java微服务架构,包括如下 第1章 微服务简介 001构建单体应用 002微服务解决复杂问题 003微服务的优点 004微服务的缺点 第2章 Linux使用 005Linux 简介 006Linux 与 Windows ...
Java微服务架构l零从基础到精通高清视频教程全套 第1章 微服务简介 001构建单体应用 002微服务解决复杂问题 003微服务的优点 004微服务的缺点 第2章 Linux使用 005Linux 简介 006Linux 与 Windows 比较 007...
这些API封装了与服务器的交互细节,使得开发者能更专注于业务逻辑。 3. **Netty组件**:RocketMQ使用Netty作为其网络通信框架,Netty是一个高效的异步事件驱动的网络应用框架,适用于开发高性能、高可用性的网络...
### 高级Java软件架构师学习计划详述 #### 一、Java基础 - **Java语法与编程基础** - **学习目标**:建立Java程序设计基本环境,培养软件开发基本思维。 - **具体内容**:熟悉Java开发环境的配置,掌握基本软件...
这是一个基于Java的网上书店项目源码...这个网上书店项目涵盖了Java Web开发中的多个关键方面,包括后端服务、数据库操作、API设计、安全控制等,对于学习和实践Spring Boot技术栈的开发者来说,是一个很好的参考资料。
2. Java API与集合框架:求职者熟悉常用的Java API,包括集合框架,这是Java编程中处理数据集合的核心工具。了解List、Set、Map等接口以及ArrayList、HashSet、HashMap等常用实现类,熟悉它们的使用场景和性能特点。...
首先,书中详细介绍了Java编程环境的搭建,包括如何下载和安装JDK(Java Development Kit),这是Java开发的基础。JDK包含了Java编译器、运行时环境和各种工具,如Javac用于编译源代码,JVM(Java Virtual Machine)...
这是一个基于Java技术栈,具体是SpringBoot框架构建的家政服务管理平台的源码项目。这个项目对于学习Java后端开发、SpringBoot应用以及家政服务行业系统设计的学生或者开发者来说,具有很高的参考价值。 首先,...
Java API的使用是学习的重点,涉及到常用的类库和方法。数据结构和算法基础是程序设计的基石,它帮助开发者更有效地组织和处理数据。Java AWT和Swing用于构建图形用户界面(GUI),而Socket网络应用程序设计则涉及...
通过Java的强大功能和Access的易用性,开发者能够快速搭建并定制符合企业需求的库存管理系统,从而提升企业的运营效率。在实际开发中,理解并掌握Java的面向对象设计、MVC架构、JDBC接口以及DAO模式,是成功构建此类...
这一部分详细讲解了如何搭建 Java 的开发环境,包括安装必要的软件工具如 JDK (Java Development Kit) 和 IDE (Integrated Development Environment),例如 Eclipse 或 IntelliJ IDEA。此外,还介绍了如何配置开发...
二、Java进阶 2.1 集合框架:掌握ArrayList、LinkedList、HashMap等数据结构的使用。 2.2 异常处理:理解异常的概念,学会try-catch-finally语句的使用。 2.3 文件与流:文件操作,输入输出流,对象序列化和反序列化...
3. **数据访问/集成**:Spring提供了对各种持久化技术的支持,包括JDBC、ORM(Object-Relational Mapping)框架如Hibernate和MyBatis,以及JPA(Java Persistence API)。 4. **MVC(Model-View-Controller)**:...
在Java入门阶段,学习者需要掌握Java基础语法、数据类型、流程控制、数组、面向对象、方法重载、封装、继承、多态、抽象类、接口、枚举、常用类、String、日期时间、集合类、泛型、注解、异常处理、多线程、IO流、...