首先,建一个web project,然后添加对hibernate和spring的支持,我们使用的是hibernate3.1和spring2.0,然后导入dwr.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:
 1 package edu.jlu.fuliang.domain;
package edu.jlu.fuliang.domain; 
 2
 /** *//** *//** *//**
/** *//** *//** *//** 
 3 * Book generated by MyEclipse Persistence Tools
 * Book generated by MyEclipse Persistence Tools 
 4 */
 */ 
 5
 6
 public class Book implements java.io.Serializable
public class Book implements java.io.Serializable  {
{ 
 7
 8 // Fields
    // Fields 
 9
10 private Long id;
    private Long id; 
11 private String name;
    private String name; 
12 private String isbm;
    private String isbm; 
13 private String author;
    private String author; 
14
15 // Constructors
    // Constructors 
16
17
 /** *//** *//** *//** default constructor */
    /** *//** *//** *//** default constructor */ 
18
 public Book()
    public Book()  {
{ 
19 }
    } 
20
21
 /** *//** *//** *//** minimal constructor */
    /** *//** *//** *//** minimal constructor */ 
22
 public Book(Long id, String name, String isbm)
    public Book(Long id, String name, String isbm)  {
{ 
23 this.id = id;
        this.id = id; 
24 this.name = name;
        this.name = name; 
25 this.isbm = isbm;
        this.isbm = isbm; 
26 }
    } 
27
28
 /** *//** *//** *//** full constructor */
    /** *//** *//** *//** full constructor */ 
29
 public Book(Long id, String name, String isbm, String author)
    public Book(Long id, String name, String isbm, String author)  {
{ 
30 this.id = id;
        this.id = id; 
31 this.name = name;
        this.name = name; 
32 this.isbm = isbm;
        this.isbm = isbm; 
33 this.author = author;
        this.author = author; 
34 }
    } 
35
36 // Property accessors
    // Property accessors 
37
38
 public Long getId()
    public Long getId()  {
{ 
39 return this.id;
        return this.id; 
40 }
    } 
41
42
 public void setId(Long id)
    public void setId(Long id)  {
{ 
43 this.id = id;
        this.id = id; 
44 }
    } 
45
46
 public String getName()
    public String getName()  {
{ 
47 return this.name;
        return this.name; 
48 }
    } 
49
50
 public void setName(String name)
    public void setName(String name)  {
{ 
51 this.name = name;
        this.name = name; 
52 }
    } 
53
54
 public String getIsbm()
    public String getIsbm()  {
{ 
55 return this.isbm;
        return this.isbm; 
56 }
    } 
57
58
 public void setIsbm(String isbm)
    public void setIsbm(String isbm)  {
{ 
59 this.isbm = isbm;
        this.isbm = isbm; 
60 }
    } 
61
62
 public String getAuthor()
    public String getAuthor()  {
{ 
63 return this.author;
        return this.author; 
64 }
    } 
65
66
 public void setAuthor(String author)
    public void setAuthor(String author)  {
{ 
67 this.author = author;
        this.author = author; 
68 }
    } 
69
 public String toString()
    public String toString() {
{ 
70 return "[id=" + id + ",name=" + name + ",isbm=" + isbm + ",author=" + author + "]";
        return "[id=" + id + ",name=" + name + ",isbm=" + isbm + ",author=" + author + "]"; 
71 }
    } 
72 }
} 
73
 
edu.jlu.fuliang.dao.BookDAO.java:
  1 package edu.jlu.fuliang.dao;
package edu.jlu.fuliang.dao; 
  2
  3 import java.util.List;
import java.util.List; 
  4 import org.apache.commons.logging.Log;
import org.apache.commons.logging.Log; 
  5 import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.LogFactory; 
  6 import org.hibernate.LockMode;
import org.hibernate.LockMode; 
  7 import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContext; 
  8 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 
  9
 10 import edu.jlu.fuliang.domain.Book;
import edu.jlu.fuliang.domain.Book; 
 11
 12
 /** *//** *//** *//**
/** *//** *//** *//** 
 13 * Data access object (DAO) for domain model class Book.
 * Data access object (DAO) for domain model class Book. 
 14 *
 *  
 15 * @see edu.jlu.fuliang.domain.Book
 * @see edu.jlu.fuliang.domain.Book 
 16 * @author MyEclipse Persistence Tools
 * @author MyEclipse Persistence Tools 
 17 */
 */ 
 18
 19
 public class BookDAO extends HibernateDaoSupport
public class BookDAO extends HibernateDaoSupport 
 {
{ 
 20 private static final Log log = LogFactory.getLog(BookDAO.class);
    private static final Log log = LogFactory.getLog(BookDAO.class); 
 21 // property constants
    // property constants 
 22 public static final String NAME = "name";
    public static final String NAME = "name"; 
 23 public static final String ISBM = "isbm";
    public static final String ISBM = "isbm"; 
 24 public static final String AUTHOR = "author";
    public static final String AUTHOR = "author"; 
 25
 26
 protected void initDao()
    protected void initDao() 
 {
{ 
 27 // do nothing
        // do nothing 
 28 }
    } 
 29
 30
 public void save(Book transientInstance)
    public void save(Book transientInstance) 
 {
{ 
 31 log.debug("saving Book instance");
        log.debug("saving Book instance"); 
 32
 try
        try 
 {
{ 
 33 getHibernateTemplate().save(transientInstance);
            getHibernateTemplate().save(transientInstance); 
 34 log.debug("save successful");
            log.debug("save successful"); 
 35
 } catch (RuntimeException re)
        } catch (RuntimeException re) 
 {
{ 
 36 log.error("save failed", re);
            log.error("save failed", re); 
 37 throw re;
            throw re; 
 38 }
        } 
 39 }
    } 
 40
 41
 public void delete(Book persistentInstance)
    public void delete(Book persistentInstance) 
 {
{ 
 42 log.debug("deleting Book instance");
        log.debug("deleting Book instance"); 
 43
 try
        try 
 {
{ 
 44 getHibernateTemplate().delete(persistentInstance);
            getHibernateTemplate().delete(persistentInstance); 
 45 log.debug("delete successful");
            log.debug("delete successful"); 
 46
 } catch (RuntimeException re)
        } catch (RuntimeException re) 
 {
{ 
 47 log.error("delete failed", re);
            log.error("delete failed", re); 
 48 throw re;
            throw re; 
 49 }
        } 
 50 }
    } 
 51
 52
 public Book findById(java.lang.Long id)
    public Book findById(java.lang.Long id) 
 {
{ 
 53 log.debug("getting Book instance with id: " + id);
        log.debug("getting Book instance with id: " + id); 
 54
 try
        try 
 {
{ 
 55 Book instance = (Book) getHibernateTemplate().get(
            Book instance = (Book) getHibernateTemplate().get( 
 56 "edu.jlu.fuliang.domain.Book", id);
                    "edu.jlu.fuliang.domain.Book", id); 
 57 return instance;
            return instance; 
 58
 } catch (RuntimeException re)
        } catch (RuntimeException re) 
 {
{ 
 59 log.error("get failed", re);
            log.error("get failed", re); 
 60 throw re;
            throw re; 
 61 }
        } 
 62 }
    } 
 63
 64
 public List findByExample(Book instance)
    public List findByExample(Book instance) 
 {
{ 
 65 log.debug("finding Book instance by example");
        log.debug("finding Book instance by example"); 
 66
 try
        try 
 {
{ 
 67 List results = getHibernateTemplate().findByExample(instance);
            List results = getHibernateTemplate().findByExample(instance); 
 68 log.debug("find by example successful, result size: "
            log.debug("find by example successful, result size: " 
 69 + results.size());
                    + results.size()); 
 70 return results;
            return results; 
 71
 } catch (RuntimeException re)
        } catch (RuntimeException re) 
 {
{ 
 72 log.error("find by example failed", re);
            log.error("find by example failed", re); 
 73 throw re;
            throw re; 
 74 }
        } 
 75 }
    } 
 76
 77
 public List findByProperty(String propertyName, Object value)
    public List findByProperty(String propertyName, Object value) 
 {
{ 
 78 log.debug("finding Book instance with property: " + propertyName
        log.debug("finding Book instance with property: " + propertyName 
 79 + ", value: " + value);
                + ", value: " + value); 
 80
 try
        try 
 {
{ 
 81 String queryString = "from Book as model where model."
            String queryString = "from Book as model where model." 
 82 + propertyName + "= ?";
                    + propertyName + "= ?"; 
 83 return getHibernateTemplate().find(queryString, value);
            return getHibernateTemplate().find(queryString, value); 
 84
 } catch (RuntimeException re)
        } catch (RuntimeException re) 
 {
{ 
 85 log.error("find by property name failed", re);
            log.error("find by property name failed", re); 
 86 throw re;
            throw re; 
 87 }
        } 
 88 }
    } 
 89
 90
 public List findByName(Object name)
    public List findByName(Object name) 
 {
{ 
 91 return findByProperty(NAME, name);
        return findByProperty(NAME, name); 
 92 }
    } 
 93
 94
 public List findByIsbm(Object isbm)
    public List findByIsbm(Object isbm) 
 {
{ 
 95 return findByProperty(ISBM, isbm);
        return findByProperty(ISBM, isbm); 
 96 }
    } 
 97
 98
 public List findByAuthor(Object author)
    public List findByAuthor(Object author) 
 {
{ 
 99 return findByProperty(AUTHOR, author);
        return findByProperty(AUTHOR, author); 
100 }
    } 
101
102
 public List findAll()
    public List findAll() 
 {
{ 
103 log.debug("finding all Book instances");
        log.debug("finding all Book instances"); 
104
 try
        try 
 {
{ 
105 String queryString = "from Book";
            String queryString = "from Book"; 
106 return getHibernateTemplate().find(queryString);
            return getHibernateTemplate().find(queryString); 
107
 } catch (RuntimeException re)
        } catch (RuntimeException re) 
 {
{ 
108 log.error("find all failed", re);
            log.error("find all failed", re); 
109 throw re;
            throw re; 
110 }
        } 
111 }
    } 
112
113
 public Book merge(Book detachedInstance)
    public Book merge(Book detachedInstance) 
 {
{ 
114 log.debug("merging Book instance");
        log.debug("merging Book instance"); 
115
 try
        try 
 {
{ 
116 Book result = (Book) getHibernateTemplate().merge(detachedInstance);
            Book result = (Book) getHibernateTemplate().merge(detachedInstance); 
117 log.debug("merge successful");
            log.debug("merge successful"); 
118 return result;
            return result; 
119
 } catch (RuntimeException re)
        } catch (RuntimeException re) 
 {
{ 
120 log.error("merge failed", re);
            log.error("merge failed", re); 
121 throw re;
            throw re; 
122 }
        } 
123 }
    } 
124
125
 public void attachDirty(Book instance)
    public void attachDirty(Book instance) 
 {
{ 
126 log.debug("attaching dirty Book instance");
        log.debug("attaching dirty Book instance"); 
127
 try
        try 
 {
{ 
128 getHibernateTemplate().saveOrUpdate(instance);
            getHibernateTemplate().saveOrUpdate(instance); 
129 log.debug("attach successful");
            log.debug("attach successful"); 
130
 } catch (RuntimeException re)
        } catch (RuntimeException re) 
 {
{ 
131 log.error("attach failed", re);
            log.error("attach failed", re); 
132 throw re;
            throw re; 
133 }
        } 
134 }
    } 
135
136
 public void attachClean(Book instance)
    public void attachClean(Book instance) 
 {
{ 
137 log.debug("attaching clean Book instance");
        log.debug("attaching clean Book instance"); 
138
 try
        try 
 {
{ 
139 getHibernateTemplate().lock(instance, LockMode.NONE);
            getHibernateTemplate().lock(instance, LockMode.NONE); 
140 log.debug("attach successful");
            log.debug("attach successful"); 
141
 } catch (RuntimeException re)
        } catch (RuntimeException re) 
 {
{ 
142 log.error("attach failed", re);
            log.error("attach failed", re); 
143 throw re;
            throw re; 
144 }
        } 
145 }
    } 
146
147
 public static BookDAO getFromApplicationContext(ApplicationContext ctx)
    public static BookDAO getFromApplicationContext(ApplicationContext ctx) 
 {
{ 
148 return (BookDAO) ctx.getBean("BookDAO");
        return (BookDAO) ctx.getBean("BookDAO"); 
149 }
    } 
150 }
} 
151
 
Book.hbm.xml:
 1 <?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?> 
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
 4 <!--
<!--  
 5 Mapping file autogenerated by MyEclipse Persistence Tools
    Mapping file autogenerated by MyEclipse Persistence Tools 
 6 -->
--> 
 7 <hibernate-mapping>
<hibernate-mapping> 
 8 <class name="edu.jlu.fuliang.domain.Book" table="BOOK" schema="CLASSICCARS">
    <class name="edu.jlu.fuliang.domain.Book" table="BOOK" schema="CLASSICCARS"> 
 9 <id name="id" type="java.lang.Long">
        <id name="id" type="java.lang.Long"> 
10 <column name="ID" />
            <column name="ID" /> 
11 <generator class="identity" />
            <generator class="identity" /> 
12 </id>
        </id> 
13 <property name="name" type="java.lang.String">
        <property name="name" type="java.lang.String"> 
14 <column name="NAME" length="20" not-null="true" />
            <column name="NAME" length="20" not-null="true" /> 
15 </property>
        </property> 
16 <property name="isbm" type="java.lang.String">
        <property name="isbm" type="java.lang.String"> 
17 <column name="ISBM" length="20" not-null="true" unique="true" />
            <column name="ISBM" length="20" not-null="true" unique="true" /> 
18 </property>
        </property> 
19 <property name="author" type="java.lang.String">
        <property name="author" type="java.lang.String"> 
20 <column name="AUTHOR" length="15" />
            <column name="AUTHOR" length="15" /> 
21 </property>
        </property> 
22 </class>
    </class> 
23 </hibernate-mapping>
</hibernate-mapping> 
24
 
下面我们配置一下Spring,我们把applicationContext.xml分成了三个,分别是applicationContext-db.xml,applicationContext-dao.xml,applicationContext-service.我们看看如何配置:
applicationContext-db.xml:
 1 <?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?> 
 2 <beans
<beans 
 3 xmlns="http://www.springframework.org/schema/beans"
    xmlns="http://www.springframework.org/schema/beans" 
 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 
 6
 7 <bean id="dataSource"
    <bean id="dataSource" 
 8 class="org.apache.commons.dbcp.BasicDataSource">
        class="org.apache.commons.dbcp.BasicDataSource"> 
 9 <property name="driverClassName"
        <property name="driverClassName" 
10 value="org.apache.derby.jdbc.ClientDriver">
            value="org.apache.derby.jdbc.ClientDriver"> 
11 </property>
        </property> 
12 <property name="url"
        <property name="url" 
13 value="jdbc:derby://localhost:1527/myeclipse;create=true">
            value="jdbc:derby://localhost:1527/myeclipse;create=true"> 
14 </property>
        </property> 
15 <property name="username" value="classiccars"></property>
        <property name="username" value="classiccars"></property> 
16 <property name="password" value="myeclipse"></property>
        <property name="password" value="myeclipse"></property> 
17 </bean>
    </bean> 
18 <bean id="sessionFactory"
    <bean id="sessionFactory" 
19 class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
20 <property name="dataSource">
        <property name="dataSource"> 
21 <ref bean="dataSource" />
            <ref bean="dataSource" /> 
22 </property>
        </property> 
23 <property name="hibernateProperties">
        <property name="hibernateProperties"> 
24 <props>
            <props> 
25 <prop key="hibernate.dialect">
                <prop key="hibernate.dialect"> 
26 org.hibernate.dialect.DerbyDialect
                    org.hibernate.dialect.DerbyDialect 
27 </prop>
                </prop> 
28 <prop key="hibernate.show_sql">
                <prop key="hibernate.show_sql"> 
29 true
                   true 
30 </prop>
                </prop> 
31 </props>
            </props> 
32 </property>
        </property> 
33 <property name="mappingResources">
        <property name="mappingResources"> 
34 <list>
            <list> 
35 <value>edujlufuliangdomainBook.hbm.xml</value>
                <value>edujlufuliangdomainBook.hbm.xml</value> 
36 </list>
            </list> 
37 </property>
        </property> 
38 </bean>
    </bean> 
39 </beans>
</beans>  
applicationContext-dao.xml:
 1 <?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?> 
 2 <beans
<beans 
 3 xmlns="http://www.springframework.org/schema/beans"
    xmlns="http://www.springframework.org/schema/beans" 
 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 
 6 
     
 7 <bean id="bookDAO" class="edu.jlu.fuliang.dao.BookDAO">
    <bean id="bookDAO" class="edu.jlu.fuliang.dao.BookDAO"> 
 8 <property name="sessionFactory">
        <property name="sessionFactory"> 
 9 <ref bean="sessionFactory" />
            <ref bean="sessionFactory" /> 
10 </property>
        </property> 
11 </bean>
    </bean> 
12 </beans>
</beans> 
13
 
接下来我们来写我们的Service层:
edu.jlu.fuliang.service.BookManageService.java
 1 package edu.jlu.fuliang.service;
package edu.jlu.fuliang.service; 
 2 import java.util.List;
import java.util.List; 
 3
 4 import edu.jlu.fuliang.domain.Book;
import edu.jlu.fuliang.domain.Book; 
 5
 6
 public interface BookManageService
public interface BookManageService  {
{ 
 7 public List<Book> getAllBooks();
    public List<Book> getAllBooks(); 
 8 public List<Book> getBookByName(String name);
    public List<Book> getBookByName(String name); 
 9 public void updateBook(Book book);
    public void updateBook(Book book); 
10 public void addBook(Book book);
    public void addBook(Book book); 
11 public void deleteBook(long id);
    public void deleteBook(long id); 
12 }
} 
13
 
edu.jlu.fuliang.service.impl.BookManageServiceImpl.java:
 1 package edu.jlu.fuliang.serviceImpl;
package edu.jlu.fuliang.serviceImpl; 
 2
 3 import java.util.List;
import java.util.List; 
 4
 5 import org.apache.commons.logging.Log;
import org.apache.commons.logging.Log; 
 6 import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.LogFactory; 
 7
 8 import edu.jlu.fuliang.dao.BookDAO;
import edu.jlu.fuliang.dao.BookDAO; 
 9 import edu.jlu.fuliang.domain.Book;
import edu.jlu.fuliang.domain.Book; 
10 import edu.jlu.fuliang.service.BookManageService;
import edu.jlu.fuliang.service.BookManageService; 
11
12
 public class BookManageServiceImpl implements BookManageService
public class BookManageServiceImpl implements BookManageService {
{ 
13 private static final Log log = LogFactory.getLog(BookManageServiceImpl.class);
    private static final Log log = LogFactory.getLog(BookManageServiceImpl.class); 
14 private BookDAO bookDAO;
    private BookDAO bookDAO; 
15 @Override
    @Override 
16
 public void addBook(Book book)
    public void addBook(Book book)  {
{ 
17 bookDAO.save(book);
        bookDAO.save(book); 
18 }
    } 
19
20 @Override
    @Override 
21
 public void deleteBook(long id)
    public void deleteBook(long id)  {
{ 
22 Book book = bookDAO.findById(id);
        Book book = bookDAO.findById(id); 
23 bookDAO.delete(book);
        bookDAO.delete(book); 
24 }
    } 
25
26 @Override
    @Override 
27
 public List<Book> getAllBooks()
    public List<Book> getAllBooks()  {
{ 
28 return bookDAO.findAll();
        return bookDAO.findAll(); 
29 }
    } 
30
31 @Override
    @Override 
32
 public List<Book> getBookByName(String name)
    public List<Book> getBookByName(String name)  {
{ 
33 return bookDAO.findByName(name);
        return bookDAO.findByName(name); 
34 }
    } 
35
36 @Override
    @Override 
37
 public void updateBook(Book book)
    public void updateBook(Book book)  {
{ 
38 log.info(book);
        log.info(book); 
39 bookDAO.attachDirty(book);
        bookDAO.attachDirty(book); 
40 }
    } 
41
42
 public BookDAO getBookDAO()
    public BookDAO getBookDAO()  {
{ 
43 return bookDAO;
        return bookDAO; 
44 }
    } 
45
46
 public void setBookDAO(BookDAO bookDAO)
    public void setBookDAO(BookDAO bookDAO)  {
{ 
47 this.bookDAO = bookDAO;
        this.bookDAO = bookDAO; 
48 }
    } 
49 }
} 
50
 
然后我们来配置Service和事务:
applicationContext-service.xml:
 1 <?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?> 
 2 <beans
<beans 
 3 xmlns="http://www.springframework.org/schema/beans"
    xmlns="http://www.springframework.org/schema/beans" 
 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 
 6
 7 <bean id="bookManageServiceTarget" class="edu.jlu.fuliang.serviceImpl.BookManageServiceImpl">
    <bean id="bookManageServiceTarget" class="edu.jlu.fuliang.serviceImpl.BookManageServiceImpl"> 
 8 <property name="bookDAO">
        <property name="bookDAO"> 
 9 <ref bean="bookDAO"/>
            <ref bean="bookDAO"/> 
10 </property>
        </property> 
11 </bean>
    </bean> 
12 <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
13 <property name="sessionFactory" ref="sessionFactory"/>
        <property name="sessionFactory" ref="sessionFactory"/> 
14 </bean>
    </bean> 
15 <bean id="bookManageService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <bean id="bookManageService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
16 <property name="transactionManager" ref="transactionManager"/>
        <property name="transactionManager" ref="transactionManager"/> 
17 <property name="target" ref="bookManageServiceTarget"/>
        <property name="target" ref="bookManageServiceTarget"/> 
18 <property name="transactionAttributes">
        <property name="transactionAttributes"> 
19 <props>
            <props> 
20 <prop key="add*">PROPAGATION_REQUIRED</prop>
                <prop key="add*">PROPAGATION_REQUIRED</prop> 
21 <prop key="delete*">PROPAGATION_REQUIRED</prop>
                <prop key="delete*">PROPAGATION_REQUIRED</prop> 
22 <prop key="update*">PROPAGATION_REQUIRED</prop>
                <prop key="update*">PROPAGATION_REQUIRED</prop> 
23 <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> 
24 </props>
            </props> 
25 </property>
        </property> 
26 </bean>
    </bean> 
27 </beans>
</beans> 
最后我们来把dwr整合进来:
我们在web.xml添加ContextLoaderListener来加载applicationContext-db.xml,applicationContext-dao.xm,applicationContext-service.xml,以及配置DwrServlet:
web.xml:
 1 <?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?> 
 2 <web-app version="2.4"
<web-app version="2.4"  
 3 xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns="http://java.sun.com/xml/ns/j2ee"  
 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 5 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee  
 6 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
 7 <context-param>
 <context-param> 
 8 <param-name>contextConfigLocation</param-name>
     <param-name>contextConfigLocation</param-name> 
 9 <param-value>classpath:applicationContext-*.xml</param-value>
     <param-value>classpath:applicationContext-*.xml</param-value> 
10 </context-param>
 </context-param> 
11 <listener>
 <listener> 
12 <listener-class>
     <listener-class> 
13 org.springframework.web.context.ContextLoaderListener
       org.springframework.web.context.ContextLoaderListener  
14 </listener-class>
     </listener-class> 
15 </listener>
 </listener> 
16 <servlet>
 <servlet> 
17 <servlet-name>dwr-invoker</servlet-name>
     <servlet-name>dwr-invoker</servlet-name> 
18 <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
     <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class> 
19 <init-param>
     <init-param> 
20 <param-name>debug</param-name>
         <param-name>debug</param-name> 
21 <param-value>true</param-value>
         <param-value>true</param-value> 
22 </init-param>
     </init-param> 
23 </servlet>
 </servlet> 
24 <servlet-mapping>
 <servlet-mapping> 
25 <servlet-name>dwr-invoker</servlet-name>
     <servlet-name>dwr-invoker</servlet-name> 
26 <url-pattern>/dwr/*</url-pattern>
     <url-pattern>/dwr/*</url-pattern> 
27 </servlet-mapping>
 </servlet-mapping> 
28 </web-app>
</web-app> 
29
 
在dwr.xml中配制bean的创建方式,类型转换,以及Service要暴露的接口:
 1 <dwr>
<dwr> 
 2 <allow>
    <allow> 
 3 <convert converter="bean" match="edu.jlu.fuliang.domain.Book"/>
        <convert converter="bean" match="edu.jlu.fuliang.domain.Book"/> 
 4 <create creator="spring" javascript="BookManageService" >
        <create creator="spring" javascript="BookManageService" > 
 5 <param name="beanName" value="bookManageService"/>
            <param name="beanName" value="bookManageService"/> 
 6 <include method="getAllBooks"/>
            <include method="getAllBooks"/> 
 7 <include method="getBookByName"/>
            <include method="getBookByName"/> 
 8 <include method="updateBook"/>
            <include method="updateBook"/> 
 9 <include method="addBook"/>
            <include method="addBook"/> 
10 <include method="deleteBook"/>
            <include method="deleteBook"/> 
11 </create>
        </create> 
12 </allow>
   </allow> 
13 </dwr>
</dwr> 
14
 
最后,我们编写jsp页面index.jsp:
  1 <html>
<html> 
  2 <head><title>DWR test</title>
<head><title>DWR test</title> 
  3 <script type='text/javascript' src='/DWRTest/dwr/interface/BookManageService.js'></script>
    <script type='text/javascript' src='/DWRTest/dwr/interface/BookManageService.js'></script> 
  4 <script type='text/javascript' src='/DWRTest/dwr/engine.js'></script>
    <script type='text/javascript' src='/DWRTest/dwr/engine.js'></script> 
  5 <script type='text/javascript' src='/DWRTest/dwr/util.js'></script>
    <script type='text/javascript' src='/DWRTest/dwr/util.js'></script> 
  6
  7
 <script type="text/javascript">
    <script type="text/javascript"> 
 
  8
 var bookCache =
        var bookCache = 
 {};
{}; 
  9 var currentBook = null;
        var currentBook = null; 
 10 
         
 11
 function loadAllBooks()
        function loadAllBooks() {
{ 
 12 BookManageService.getAllBooks(handleGetAllBooks,handleGetAllBooksError);
            BookManageService.getAllBooks(handleGetAllBooks,handleGetAllBooksError); 
 13 }
        } 
 14
 function handleGetAllBooks(books)
        function handleGetAllBooks(books) {
{ 
 15
 dwr.util.removeAllRows("booksBody",
            dwr.util.removeAllRows("booksBody", { filter:function(tr)
{ filter:function(tr) 
 {
{ 
 16 return (tr.id != "pattern");
      return (tr.id != "pattern"); 
 17 }});
      }}); 
 18
 19 var book,id;
            var book,id; 
 20
 for(var i = 0; i < books.length; i++)
            for(var i = 0; i < books.length; i++) {
{ 
 21 book = books[i];
                book = books[i]; 
 22 id = book.id;
                id = book.id; 
 23 
             
 24
 dwr.util.cloneNode("pattern",
                dwr.util.cloneNode("pattern",  { idSuffix:id });
{ idSuffix:id }); 
 25 dwr.util.setValue("t_name" + id, book.name);
                dwr.util.setValue("t_name" + id, book.name); 
 26 dwr.util.setValue("t_isbm" + id, book.isbm);
                dwr.util.setValue("t_isbm" + id, book.isbm); 
 27 dwr.util.setValue("t_author" + id,book.author);
                dwr.util.setValue("t_author" + id,book.author); 
 28 $("pattern" + id).style.display = "block";
               $("pattern" + id).style.display = "block"; 
 29 bookCache[id] = book;
               bookCache[id] = book; 
 30 }
            } 
 31 }
        } 
 32
 function handleGetAllBooksError(msg)
        function handleGetAllBooksError(msg) {
{ 
 33 alert("Error: " + msg);
            alert("Error: " + msg); 
 34 }
        } 
 35 
         
 36
 function addBook()
        function addBook() {
{ 
 37
 var book =
            var book = 
 {name:null,isbm:null,author:null};
{name:null,isbm:null,author:null}; 
 38 dwr.util.getValues(book);
            dwr.util.getValues(book); 
 39 dwr.engine.beginBatch();
            dwr.engine.beginBatch(); 
 40 BookManageService.addBook(book);
                 BookManageService.addBook(book); 
 41 loadAllBooks();
                 loadAllBooks(); 
 42 dwr.engine.endBatch();
              dwr.engine.endBatch(); 
 43 }
        } 
 44 
         
 45
 function editBook(btId)
        function editBook(btId) {
{ 
 46 currentBook = bookCache[btId.substring(4)];
            currentBook = bookCache[btId.substring(4)]; 
 47 dwr.util.setValues(currentBook);
            dwr.util.setValues(currentBook); 
 48 }
        } 
 49 
         
 50
 function updateBook()
        function updateBook() {
{ 
 51
 var book =
            var book =  {id:null,name:null,isbm:null,author:null};
{id:null,name:null,isbm:null,author:null};  
 52 dwr.util.getValues(book);
            dwr.util.getValues(book); 
 53 book.id = currentBook.id;
            book.id = currentBook.id; 
 54 BookManageService.updateBook(book,handleUpdateBook,handleUpdateBookError);
            BookManageService.updateBook(book,handleUpdateBook,handleUpdateBookError); 
 55 }
        } 
 56 
         
 57
 function handleUpdateBook()
        function handleUpdateBook() {
{ 
 58 alert("Update book successfully!");
            alert("Update book successfully!"); 
 59 loadAllBooks();
            loadAllBooks(); 
 60 }
        } 
 61 
         
 62
 function handleUpdateBookError(msg)
        function handleUpdateBookError(msg) {
{ 
 63 alert("Error: " + msg);
            alert("Error: " + msg); 
 64 }
        } 
 65 
         
 66
 function deleteBook(btId)
        function deleteBook(btId) {
{ 
 67 var i = confirm("Are you sure to delete the book?");
            var i = confirm("Are you sure to delete the book?"); 
 68 if(i == true)
            if(i == true) 
 69 BookManageService.deleteBook(btId.substring(6),handleDeleteBook,handleDeleteBookError);
                BookManageService.deleteBook(btId.substring(6),handleDeleteBook,handleDeleteBookError); 
 70 }
        } 
 71 
         
 72
 function handleDeleteBook()
        function handleDeleteBook() {
{ 
 73 alert("The book has been delete successfully!");
          alert("The book has been delete successfully!"); 
 74 loadAllBooks();
          loadAllBooks(); 
 75 }
        } 
 76 
         
 77
 function handleDeleteBookError(msg)
        function handleDeleteBookError(msg) {
{ 
 78 alert("Error: " + msg);
          alert("Error: " + msg); 
 79 }
        } 
 80 </script>
    </script> 
 81 </head>
</head> 
 82
 83 <body onload="loadAllBooks()">
<body onload="loadAllBooks()"> 
 84 <div>
    <div> 
 85 <h2>Add book</h2>
        <h2>Add book</h2> 
 86 <table>
        <table> 
 87 <tr>
            <tr> 
 88 <td>Name:</td><td><input type="text" id="name"></td>
              <td>Name:</td><td><input type="text" id="name"></td> 
 89 </tr>
            </tr> 
 90 <tr>
            <tr> 
 91 <td>ISBN:</td>
              <td>ISBN:</td> 
 92 <td><input type="text" id="isbm"></td>
              <td><input type="text" id="isbm"></td> 
 93 </tr>
             </tr> 
 94 
             
 95 <tr>
            <tr> 
 96 <td>Author:</td>
               <td>Author:</td> 
 97 <td><input type="text" id="author"></td>
               <td><input type="text" id="author"></td> 
 98 </tr>
           </tr> 
 99 <tr>
           <tr> 
100 <td colspan="2">
               <td colspan="2"> 
101 <input type="button" id="add" value="Add" onclick="addBook()">
                 <input type="button" id="add" value="Add" onclick="addBook()"> 
102 <input type="button" id="update" value="Update" onclick="updateBook()">
                 <input type="button" id="update" value="Update" onclick="updateBook()"> 
103 </td>
               </td> 
104 </tr>
           </tr> 
105 </table>
       </table> 
106 </div>
    </div> 
107 <hr>
    <hr> 
108 <div id="list">
    <div id="list"> 
109 <table border="1">
        <table border="1"> 
110 <thead>
          <thead> 
111 <tr>
              <tr> 
112 <th>Name</th>
                  <th>Name</th> 
113 <th>ISBN</th>
                  <th>ISBN</th> 
114 <th>Author</th>
                  <th>Author</th> 
115 <th>Action</th>
                  <th>Action</th> 
116 </tr>
              </tr> 
117 </thead>
          </thead> 
118 <tbody id="booksBody">
          <tbody id="booksBody"> 
119 <tr id="pattern" style="display:none;">
              <tr id="pattern" style="display:none;"> 
120 <td>
                  <td> 
121 <span id="t_name"></span>
                    <span id="t_name"></span> 
122 </td>
                  </td> 
123 <td>
                  <td> 
124 <span id="t_isbm"></span>
                    <span id="t_isbm"></span> 
125 </td>
                  </td> 
126 <td>
                  <td> 
127 <span id="t_author"></span>
                    <span id="t_author"></span> 
128 </td>
                  </td> 
129 <td>
                  <td> 
130 <span id="action">
                    <span id="action"> 
131 <input id="edit" type="button" value="Edit" onclick="editBook(this.id)"/>
                        <input id="edit" type="button" value="Edit" onclick="editBook(this.id)"/> 
132 <input id="delete" type="button" value="Delete" onclick="deleteBook(this.id)"/>
                      <input id="delete" type="button" value="Delete" onclick="deleteBook(this.id)"/> 
133 </span>
                    </span> 
134 </td>
                  </td> 
135 </tr>
              </tr> 
136 </tbody>
          </tbody> 
137 </table>
        </table> 
138 </div>
    </div> 
139 </body>
</body> 
140
 
	posted on 2007-10-12 11:17 
冰封的爱 阅读(330) 
评论(0)  编辑  收藏  所属分类: 
J2EE