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
*/
private String name;
private String isbm;
private String author;
public Book() {
}
public Book(Long id, String name, String isbm) {
this.id = id;
this.name = name;
this.isbm = isbm;
}
public Book(Long id, String name, String isbm, String author) {
this.id = id;
this.name = name;
this.isbm = isbm;
this.author = author;
}
return this.id;
}
this.id = id;
}
return this.name;
}
this.name = name;
}
return this.isbm;
}
this.isbm = isbm;
}
return this.author;
}
this.author = author;
}
public String toString(){
return "[id=" + id + ",name=" + name + ",isbm=" + isbm + ",author=" + author + "]";
}
}
edu.jlu.fuliang.dao.BookDAO.java:
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;
* Data access object (DAO) for domain model class Book.
*
* @see edu.jlu.fuliang.domain.Book
* @author MyEclipse Persistence Tools
*/
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";
// do nothing
}
log.debug("saving Book instance");
try ...{
getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) ...{
log.error("save failed", re);
throw re;
}
}
log.debug("deleting Book instance");
try ...{
getHibernateTemplate().delete(persistentInstance);
log.debug("delete successful");
} catch (RuntimeException re) ...{
log.error("delete failed", re);
throw re;
}
}
log.debug("getting Book instance with id: " + id);
try ...{
Book instance = (Book) getHibernateTemplate().get(
"edu.jlu.fuliang.domain.Book", id);
return instance;
} catch (RuntimeException re) ...{
log.error("get failed", re);
throw re;
}
}
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", re);
throw re;
}
}
log.debug("finding Book instance with property: " + propertyName
+ ", value: " + value);
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", re);
throw re;
}
}
return findByProperty(NAME, name);
}
return findByProperty(ISBM, isbm);
}
return findByProperty(AUTHOR, author);
}
log.debug("finding all Book instances");
try ...{
String queryString = "from Book";
return getHibernateTemplate().find(queryString);
} catch (RuntimeException re) ...{
log.error("find all failed", re);
throw re;
}
}
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", re);
throw re;
}
}
log.debug("attaching dirty Book instance");
try ...{
getHibernateTemplate().saveOrUpdate(instance);
log.debug("attach successful");
} catch (RuntimeException re) ...{
log.error("attach failed", re);
throw re;
}
}
log.debug("attaching clean Book instance");
try ...{
getHibernateTemplate().lock(instance, LockMode.NONE);
log.debug("attach successful");
} catch (RuntimeException re) ...{
log.error("attach failed", re);
throw re;
}
}
return (BookDAO) ctx.getBean("BookDAO");
}
}
Book.hbm.xml:
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="edu.jlu.fuliang.domain.Book" table="BOOK" schema="CLASSICCARS">
<id name="id" type="java.lang.Long">
<column name="ID" />
<generator class="identity" />
</id>
<property name="name" type="java.lang.String">
<column name="NAME" length="20" not-null="true" />
</property>
<property name="isbm" type="java.lang.String">
<column name="ISBM" length="20" not-null="true" unique="true" />
</property>
<property name="author" type="java.lang.String">
<column name="AUTHOR" length="15" />
</property>
</class>
</hibernate-mapping>
下面我们配置一下Spring,我们把applicationContext.xml分成了三个,分别是applicationContext-db.xml,applicationContext-dao.xml,applicationContext-service.我们看看如何配置:
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="org.apache.derby.jdbc.ClientDriver">
</property>
<property name="url"
value="jdbc:derby://localhost:1527/myeclipse;create=true">
</property>
<property name="username" value="classiccars"></property>
<property name="password" value="myeclipse"></property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.DerbyDialect
</prop>
<prop key="hibernate.show_sql">
true
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>edu/jlu/fuliang/domain/Book.hbm.xml</value>
</list>
</property>
</bean>
</beans>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="bookDAO" class="edu.jlu.fuliang.dao.BookDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
</beans>
接下来我们来写我们的Service层:
package edu.jlu.fuliang.service;
import java.util.List;
public List<Book> getAllBooks();
public List<Book> getBookByName(String name);
public void updateBook(Book book);
public void addBook(Book book);
public void deleteBook(long id);
}
import org.apache.commons.logging.LogFactory;
import edu.jlu.fuliang.domain.Book;
import edu.jlu.fuliang.service.BookManageService;
private static final Log log = LogFactory.getLog(BookManageServiceImpl.class);
private BookDAO bookDAO;
@Override
public void addBook(Book book) {
bookDAO.save(book);
}
public void deleteBook(long id) {
Book book = bookDAO.findById(id);
bookDAO.delete(book);
}
public List<Book> getAllBooks() {
return bookDAO.findAll();
}
public List<Book> getBookByName(String name) {
return bookDAO.findByName(name);
}
public void updateBook(Book book) {
log.info(book);
bookDAO.attachDirty(book);
}
return bookDAO;
}
this.bookDAO = bookDAO;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<property name="bookDAO">
<ref bean="bookDAO"/>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="bookManageService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"/>
<property name="target" ref="bookManageServiceTarget"/>
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
</beans>
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
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">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>dwr-invoker</servlet-name>
<servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>
</web-app>
在dwr.xml中配制bean的创建方式,类型转换,以及Service要暴露的接口:
<allow>
<convert converter="bean" match="edu.jlu.fuliang.domain.Book"/>
<create creator="spring" javascript="BookManageService" >
<param name="beanName" value="bookManageService"/>
<include method="getAllBooks"/>
<include method="getBookByName"/>
<include method="updateBook"/>
<include method="addBook"/>
<include method="deleteBook"/>
</create>
</allow>
</dwr>
最后,我们编写jsp页面index.jsp:
<head><title>DWR test</title>
<script type='text/javascript' src='/DWRTest/dwr/interface/BookManageService.js'></script>
<script type='text/javascript' src='/DWRTest/dwr/engine.js'></script>
<script type='text/javascript' src='/DWRTest/dwr/util.js'></script>
var bookCache = ...{};
var currentBook = null;
function loadAllBooks(){
BookManageService.getAllBooks(handleGetAllBooks,handleGetAllBooksError);
}
function handleGetAllBooks(books){
dwr.util.removeAllRows("booksBody",{ filter:function(tr) ...{
return (tr.id != "pattern");
}});
for(var i = 0; i < books.length; i++){
book = books[i];
id = book.id;
dwr.util.cloneNode("pattern", { idSuffix:id });
dwr.util.setValue("t_name" + id, book.name);
dwr.util.setValue("t_isbm" + id, book.isbm);
dwr.util.setValue("t_author" + id,book.author);
$("pattern" + id).style.display = "block";
bookCache[id] = book;
}
}
function handleGetAllBooksError(msg){
alert("Error: " + msg);
}
function addBook(){
var book = ...{name:null,isbm:null,author:null};
dwr.util.getValues(book);
dwr.engine.beginBatch();
BookManageService.addBook(book);
loadAllBooks();
dwr.engine.endBatch();
}
function editBook(btId){
currentBook = bookCache[btId.substring(4)];
dwr.util.setValues(currentBook);
}
function updateBook(){
var book = {id:null,name:null,isbm:null,author:null};
dwr.util.getValues(book);
book.id = currentBook.id;
BookManageService.updateBook(book,handleUpdateBook,handleUpdateBookError);
}
function handleUpdateBook(){
alert("Update book successfully!");
loadAllBooks();
}
function handleUpdateBookError(msg){
alert("Error: " + msg);
}
function deleteBook(btId){
var i = confirm("Are you sure to delete the book?");
if(i == true)
BookManageService.deleteBook(btId.substring(6),handleDeleteBook,handleDeleteBookError);
}
function handleDeleteBook(){
alert("The book has been delete successfully!");
loadAllBooks();
}
function handleDeleteBookError(msg){
alert("Error: " + msg);
}
</script>
</head>
<div>
<h2>Add book</h2>
<table>
<tr>
<td>Name:</td><td><input type="text" id="name"></td>
</tr>
<tr>
<td>ISBN:</td>
<td><input type="text" id="isbm"></td>
</tr>
<tr>
<td>Author:</td>
<td><input type="text" id="author"></td>
</tr>
<tr>
<td colspan="2">
<input type="button" id="add" value="Add" onclick="addBook()">
<input type="button" id="update" value="Update" onclick="updateBook()">
</td>
</tr>
</table>
</div>
<hr>
<div id="list">
<table border="1">
<thead>
<tr>
<th>Name</th>
<th>ISBN</th>
<th>Author</th>
<th>Action</th>
</tr>
</thead>
<tbody id="booksBody">
<tr id="pattern" style="display:none;">
<td>
<span id="t_name"></span>
</td>
<td>
<span id="t_isbm"></span>
</td>
<td>
<span id="t_author"></span>
</td>
<td>
<span id="action">
<input id="edit" type="button" value="Edit" onclick="editBook(this.id)"/>
<input id="delete" type="button" value="Delete" onclick="deleteBook(this.id)"/>
</span>
</td>
</tr>
</tbody>
</table>
</div>
</body>
这样我们就完成了Spring+Hibernate+DWR的整合,我们可以在一个页面完成CURD操作了.
相关推荐
Struts2 + spring + hibernate + dwr 完美整合代码 dwr 用户注册 多级下拉联动 刷新表格.. 全部代码
struts1+spring+hibernate+DWR整合方案详解
《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个...
使用struts2、hibernate、spring、dwr整合的简单项目。包括级联等 注意:csdn上面显示为chm文件。该文件为.7z的压缩文件。用压缩软件可以打开的 csdn弄错了
该示例使用MyEclipse 5.5 IDE用来整合四个技术(Struts 1.2, Spring 2.0, Hibernate 3.2和Ajax技术)的轻量级的JavaEE。 操作步骤如下: 1. 下载并解压之后,使用MyEclipse导入工程 2. 找到demo目录中的.sql数据库...
spring+struts+hibernate+jbpm+dwr整合开发的OA办公系统源码
重磅推出 struts+spring+hibernate+dwr整合分页例子
Spring+Dwr+Hibernate整合项目,包括所需要的包和数据库
用户注册和登录是每个系统的必须存在的一部分,基于Dwr+Struts2+Spring+Hibernate写了一个用户登录注册系统。 其中用Dwr去进行用户注册的用户是否存在的验证。 全部业务控制交由Spring去进行处理。事务处理也...
该源码成功整合了Struts2.0+Hibernate+Spring(SSH架构)+DWR+MySql+Tomcat,直接拷贝部署就可以运行,前提建立相应的数据库。模块包括(组织机构管理,人员管理,角色管理,权限管理等等),每个模块均有增删查改等...
ext+Json+dwr+spring+hibernate整合项目实例与资源
struts2.2.1+spring 3.0.3+hibernate3.6+dwr3.0全注解整合包
利用dwr,整合extjs,spring,hibernate.是你学习dwr的参考指南
新版SSH+DWR配置(Struts2.1.8+Spring3.0+Hibernate3.3.2+DWR2.0.6) 很好的整合示例 目前最新框架整合
不可多得的小例子。 内有详细操作流程说明。
ext+json+dwr+spring+hibernate整合项目实例与相关资源
《疯狂Ajax讲义:Prototype/jQuery+DWR+Spring+Hibernate整合开发》是《基于J2EE的Ajax宝典》的第二版。《基于J2EE的Ajax宝典》面市近2年,作为Ajax领域最全面、实用的图书,一直深受读者的好评。全书主要分为三个...
1. word文档记录了Struts2+Hibernate3+Spring2.5整合详细步骤,附有操作步骤的图示参考,并给出了各个步骤的注意事项; 2. 源代码实例包括一个完整模块的增删改查操作,可直接运行,可以在此基础上直接进行自己系统...
dwr+ext+strusts2+spring+hibernate整合