首先,建一个web project,然后添加对hibernate和spring的支持,我们使用的是hibernate3.2和spring2.0,然后导入xwork-2.0.3.jar struts2-core-2.0.8.jar struts2-spring-plugin-2.0.8.jar ognl-2.6.11.jar freemarker-2.3.8.jar commons-logging-api-1.1.jar和commons-pool-1.3.jar(不知道myeclipse怎么搞的,添加Spring功能支持的时候就有了commons-dbcp.jar,居然没有其依赖的commons-pool-x.jar,只好单独添加了,另外,需要将Spring2.0 AOP Liberaries里的asm2.2.3.jar删除,因为好像和Hiberate中的生成代理用的asm.jar冲突,我把Spring2.0 AOP Liberaries排到最后仍然有冲突,所以只好删掉了,不知道大家遇到过这种情况么)。 我们使用myeclise自带的Derby数据库,在里面建一个表BOOK: ID bigint primary key,autoincrement NAME varchar(20) ISBM varchar(20) AUTHOR varchar(15)
然后利用myeclipse的hibernate反向工程生成领域模型:Book.java, DAO:BookDAO.jar, Book 的映射文件Book.hbm.xml: 生成的代码及配置文件如下:
Book.java:
package edu.jlu.fuliang.domain;
/** *//**
* Book generated by MyEclipse Persistence Tools */
public class Book implements java.io.Serializable {
// Fields
private long id;
private String name; private String isbm; private String author;
// Constructors
/** *//** default constructor */ public Book() { }
/** *//** minimal constructor */
public Book(String name, String isbm) {
this.name = name; this.isbm = isbm; }
/** *//** full constructor */
public Book(String name, String isbm, String author) { this.name = name; this.isbm = isbm; this.author = author; }
// Property accessors
public long getId() { return this.id; }
public void setId(long id){ this.id = id; }
public String getName() { return this.name; }
public void setName(String name) { this.name = name; }
public String getIsbm() { return this.isbm; }
public void setIsbm(String isbm) { this.isbm = isbm; }
public String getAuthor() { return this.author; }
public void setAuthor(String author) { this.author = author; }
}
BookDAO.java:
package edu.jlu.fuliang.dao;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.hibernate.LockMode;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import edu.jlu.fuliang.domain.Book;
/** *//**
* Data access object (DAO) for domain model class Book. *
* @see edu.jlu.fuliang.domain.Book * @author MyEclipse Persistence Tools */
public class BookDAO extends HibernateDaoSupport ...{
private static final Log log = LogFactory.getLog(BookDAO.class); // property constants
public static final String NAME = \"name\"; public static final String ISBM = \"isbm\";
public static final String AUTHOR = \"author\";
protected void initDao() ...{ // do nothing }
public void save(Book transientInstance) ...{ log.debug(\"saving Book instance\"); try ...{
getHibernateTemplate().save(transientInstance); log.debug(\"save successful\"); } catch (RuntimeException re) ...{ log.error(\"save failed\ throw re; } }
public void delete(Book persistentInstance) ...{ log.debug(\"deleting Book instance\"); try ...{
getHibernateTemplate().delete(persistentInstance); log.debug(\"delete successful\"); } catch (RuntimeException re) ...{ log.error(\"delete failed\ throw re; } }
public Book findById(Long id) ...{
log.debug(\"getting Book instance with id: \" + id); try ...{
Book instance = (Book) getHibernateTemplate().get( \"edu.jlu.fuliang.domain.Book\ return instance;
} catch (RuntimeException re) ...{ log.error(\"get failed\ throw re; } }
public List findByExample(Book instance) ...{
log.debug(\"finding Book instance by example\"); try ...{
List results = getHibernateTemplate().findByExample(instance); log.debug(\"find by example successful, result size: \" + results.size()); return results;
} catch (RuntimeException re) ...{
log.error(\"find by example failed\ throw re; } }
public List findByProperty(String propertyName, Object value) ...{
log.debug(\"finding Book instance with property: \" + propertyName + \ try ...{
String queryString = \"from Book as model where model.\" + propertyName + \"= ?\";
return getHibernateTemplate().find(queryString, value); } catch (RuntimeException re) ...{
log.error(\"find by property name failed\ throw re; } }
public List findByName(Object name) ...{ return findByProperty(NAME, name); }
public List findByIsbm(Object isbm) ...{ return findByProperty(ISBM, isbm); }
public List findByAuthor(Object author) ...{ return findByProperty(AUTHOR, author); }
public List findAll()...{
log.debug(\"finding all Book instances\"); try ...{
String queryString = \"from Book\";
return getHibernateTemplate().find(queryString); } catch (RuntimeException re) ...{ log.error(\"find all failed\ throw re; } }
public Book merge(Book detachedInstance) ...{ log.debug(\"merging Book instance\"); try ...{
Book result = (Book) getHibernateTemplate().merge(detachedInstance); log.debug(\"merge successful\"); return result;
} catch (RuntimeException re) ...{ log.error(\"merge failed\ throw re; } }
public void attachDirty(Book instance) ...{
log.debug(\"attaching dirty Book instance\"); try ...{
getHibernateTemplate().saveOrUpdate(instance);
log.debug(\"attach successful\"); } catch (RuntimeException re) ...{ log.error(\"attach failed\ throw re; } }
public void attachClean(Book instance) ...{
log.debug(\"attaching clean Book instance\"); try ...{
getHibernateTemplate().lock(instance, LockMode.NONE); log.debug(\"attach successful\"); } catch (RuntimeException re) ...{ log.error(\"attach failed\ throw re; } }
public static BookDAO getFromApplicationContext(ApplicationContext ctx) ...{ return (BookDAO) ctx.getBean(\"BookDAO\"); } }
Book.hbm.xml:
下面我们配置一下Spring,我们把applicationContext.xml分成了三个,分别是applicationContext-db.xml,applicationContext-dao.xml,applicationContext-service.我们看看如何配置:
applicationContext-db.xml:
xsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\"> org.hibernate.dialect.DerbyDialect
applicationContext-dao.xml:
xsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\">
接下来我们来写我们的Service层:
BookManageService.java:
package edu.jlu.fuliang.service; import java.util.List;
import edu.jlu.fuliang.domain.Book;
public interface BookManageService ...{ public List public List BookManageServiceImpl.java: package edu.jlu.fuliang.serviceImpl; import java.util.List; import edu.jlu.fuliang.dao.BookDAO; import edu.jlu.fuliang.domain.Book; import edu.jlu.fuliang.service.BookManageService; public class BookManageServiceImpl implements BookManageService...{ private BookDAO bookDAO; @Override public void addBook(Book book) ...{ bookDAO.save(book); } @Override public void deleteBook(long id) ...{ Book book = bookDAO.findById(id); bookDAO.delete(book); } @Override public List @Override public List @Override public void updateBook(Book book) ...{ bookDAO.attachDirty(book); } public void setBookDAO(BookDAO bookDAO)...{ this.bookDAO = bookDAO; } @Override public Book getBookById(Long id) ...{ return bookDAO.findById(id); } } 然后写一个struts的Action,他完全是一个POJO: package edu.jlu.fuliang.action; import java.util.List; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.Preparable; import edu.jlu.fuliang.domain.Book; import edu.jlu.fuliang.service.BookManageService; public class BookAction implements Preparable...{ private BookManageService bookManageService; private List public String execute()...{ this.books = bookManageService.getAllBooks(); return Action.SUCCESS; } public String save()...{ this.bookManageService.addBook(book); return execute(); } public void prepare()throws Exception...{ if(id != null) book = bookManageService.getBookById(id); } public String remove()...{ bookManageService.deleteBook(id); return execute(); } public List public void setBooks(List public Book getBook() ...{ return book; } public void setBook(Book book) ...{ this.book = book; } public Long getId() ...{ return id; } public void setId(Long id) ...{ this.id = id; } public void setBookManageService(BookManageService bookManageService) ...{ this.bookManageService = bookManageService; } } 然后我们来配置Service、事务以及struts的action: applicationContext-service.xml: xsi:schemaLocation=\"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\"> /* configure struts action as bean in spring*/ 配置struts.xml: \"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN\" \"http://struts.apache.org/dtds/struts-2.0.dtd\"> 配置WEB-INF/web.xml: xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\"> org.apache.struts2.dispatcher.FilterDispatcher org.springframework.web.context.ContextLoaderListener # This is the configuring for logging displayed in the Application Server # log4j.rootCategory=INFO, stdout,logfile log4j.rootCategory=DEBUG, A1 #console configure log4j.appender.A1 = org.apache.log4j.ConsoleAppender log4j.appender.A1.layout = org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern = %-4r [%t] %-5p %c %x - %m%n #stdout configure log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern= %d %p [%c] - <%m>%n #logfile configure log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender log4j.appender.logfile.File=log4j.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern= %d %p [%c] - <%m>%n # Control logging for other open source packages # Changing the log level to DEBUG when debug log4j.logger.org.springframework=ERROR log4j.logger.org.springframework.web.context.support.XmlWebApplicationContext=INFO log4j.logger.org.hibernate=ERROR log4j.logger.org.hibernate.cfg.HbmBinder=INFO log4j.logger.org.hibernate.SQL=ERROR log4j.logger.org.hibernate.cache=ERROR log4j.logger.org.hibernate.transaction=INFO log4j.logger.net.sf.ehcache=ERROR log4j.logger.org.apache.struts=ERROR log4j.logger.com.htxx.service.dao=INFO log4j.logger.org.apache.commons=INFO log4j.logger.org.directwebremoting=INFO 写两个页面index.jsp,list.jsp,使用了Ajax--dojo:: index.jsp: <%...@ taglib prefix=\"s\" uri=\"/struts-tags\"%> Book Data <%...@ taglib prefix=\"s\" uri=\"/struts-tags\"%> Books 在浏览器中输入地址,我们就可以在一个页面进行CRUD操作了. 因篇幅问题不能全部显示,请点此查看更多更全内容\">
Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务