三、
建立数据持久化层
1、编写实体类Books及books.hbm.xml映射文件。
package com.sterning.books.model;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.Date;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class Books
{
// Fields
private String bookId;//编号
private String bookName;//书名
private String bookAuthor;//作者
private String bookPublish;//出版社
private Date bookDate;//出版日期
private String bookIsbn;//ISBN
private String bookPage;//页数
private String bookPrice;//价格
private String bookContent;//内容提要
// Constructors
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Books()
{}
// Property accessors
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getBookId()
{
return bookId;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setBookId(String bookId)
{
this.bookId = bookId;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getBookName()
{
return bookName;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setBookName(String bookName)
{
this.bookName = bookName;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getBookAuthor()
{
return bookAuthor;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setBookAuthor(String bookAuthor)
{
this.bookAuthor = bookAuthor;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getBookContent()
{
return bookContent;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setBookContent(String bookContent)
{
this.bookContent = bookContent;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Date getBookDate()
{
return bookDate;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setBookDate(Date bookDate)
{
this.bookDate = bookDate;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getBookIsbn()
{
return bookIsbn;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setBookIsbn(String bookIsbn)
{
this.bookIsbn = bookIsbn;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getBookPage()
{
return bookPage;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setBookPage(String bookPage)
{
this.bookPage = bookPage;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getBookPrice()
{
return bookPrice;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setBookPrice(String bookPrice)
{
this.bookPrice = bookPrice;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getBookPublish()
{
return bookPublish;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void setBookPublish(String bookPublish)
{
this.bookPublish = bookPublish;
}
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
com.sterning.books.model.Books.java
接下来要把实体类Books的属性映射到books表,编写下面的books.hbm.xml文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<hibernate-mapping>
<class name="com.sterning.books.model.Books" table="books" >
<id name="bookId" type="string">
<column name="book_id" length="5" />
<generator class="assigned" />
</id>
<property name="bookName" type="string">
<column name="book_name" length="100" />
</property>
<property name="bookAuthor" type="string">
<column name="book_author" length="100" />
</property>
<property name="bookPublish" type="string">
<column name="book_publish" length="100" />
</property>
<property name="bookDate" type="java.sql.Timestamp">
<column name="book_date" length="7" />
</property>
<property name="bookIsbn" type="string">
<column name="book_isbn" length="20" />
</property>
<property name="bookPage" type="string">
<column name="book_page" length="11" />
</property>
<property name="bookPrice" type="string">
<column name="book_price" length="4" />
</property>
<property name="bookContent" type="string">
<column name="book_content" length="100" />
</property>
</class>
</hibernate-mapping>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
com.sterning.books.model.books.hbm.xml
2、hibernate.cfg.xml配置文件如下:(注意它的位置在scr/hibernate.cfg.xml)
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="show_sql">true</property>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
<mapping resource="com/sterning/books/model/books.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
Com.sterning.bean.hibernate.hibernate.cfg.xml
四、
建立DAO层
DAO访问层负责封装底层的数据访问细节,不仅可以使概念清晰,而且可以提高开发效率。
1、建立DAO的接口类:BooksDao
package com.sterning.books.dao.iface;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import com.sterning.books.model.Books;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public interface BooksDao
{
List getAll();//获得所有记录
List getBooks(int pageSize, int startRow);//获得所有记录
int getRows();//获得总行数
int getRows(String fieldname,String value);//获得总行数
List queryBooks(String fieldname,String value);//根据条件查询
List getBooks(String fieldname,String value,int pageSize, int startRow);//根据条件查询
Books getBook(String bookId);//根据ID获得记录
String getMaxID();//获得最大ID值
void addBook(Books book);//添加记录
void updateBook(Books book);//修改记录
void deleteBook(Books book);//删除记录
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
com.sterning.books.dao.iface.BooksDao.java
2、实现此接口的类文件,BooksMapDao
package com.sterning.books.dao.hibernate;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
import com.sterning.books.dao.iface.BooksDao;
import com.sterning.books.model.Books;
import com.sterning.commons.PublicUtil;
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
/** *//**
* @author cwf
*
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class BooksMapDao extends HibernateDaoSupport implements BooksDao
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public BooksMapDao()
{}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** *//**
* 函数说明:添加信息
* 参数说明:对象
* 返回值:
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void addBook(Books book)
{
this.getHibernateTemplate().save(book);
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** *//**
* 函数说明:删除信息
* 参数说明: 对象
* 返回值:
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void deleteBook(Books book)
{
this.getHibernateTemplate().delete(book);
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** *//**
* 函数说明:获得所有的信息
* 参数说明:
* 返回值:信息的集合
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public List getAll()
{
String sql="FROM Books ORDER BY bookName";
return this.getHibernateTemplate().find(sql);
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** *//**
* 函数说明:获得总行数
* 参数说明:
* 返回值:总行数
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public int getRows()
{
String sql="FROM Books ORDER BY bookName";
List list=this.getHibernateTemplate().find(sql);
return list.size();
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** *//**
* 函数说明:获得所有的信息
* 参数说明:
* 返回值:信息的集合
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public List getBooks(int pageSize, int startRow) throws HibernateException
{
final int pageSize1=pageSize;
final int startRow1=startRow;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
return this.getHibernateTemplate().executeFind(new HibernateCallback()
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public List doInHibernate(Session session) throws HibernateException, SQLException
{
// TODO 自动生成方法存根
Query query=session.createQuery("FROM Books ORDER BY bookName");
query.setFirstResult(startRow1);
query.setMaxResults(pageSize1);
return query.list();
}
});
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** *//**
* 函数说明:获得一条的信息
* 参数说明: ID
* 返回值:对象
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public Books getBook(String bookId)
{
return (Books)this.getHibernateTemplate().get(Books.class,bookId);
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** *//**
* 函数说明:获得最大ID
* 参数说明:
* 返回值:最大ID
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public String getMaxID()
{
String date=PublicUtil.getStrNowDate();
String sql="SELECT MAX(bookId)+1 FROM Books ";
String noStr = null;
List ll = (List) this.getHibernateTemplate().find(sql);
Iterator itr = ll.iterator();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (itr.hasNext())
{
Object noint = itr.next();
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(noint == null)
{
noStr = "1";
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else
{
noStr = noint.toString();
}
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if(noStr.length()==1)
{
noStr="000"+noStr;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else if(noStr.length()==2)
{
noStr="00"+noStr;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else if(noStr.length()==3)
{
noStr="0"+noStr;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
}else
{
noStr=noStr;
}
return noStr;
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** *//**
* 函数说明:修改信息
* 参数说明: 对象
* 返回值:
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void updateBook(Books pd)
{
this.getHibernateTemplate().update(pd);
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** *//**
* 函数说明:查询信息
* 参数说明: 集合
* 返回值:
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public List queryBooks(String fieldname,String value)
{
System.out.println("value: "+value);
String sql="FROM Books where "+fieldname+" like '%"+value+"%'"+"ORDER BY bookName";
return this.getHibernateTemplate().find(sql);
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** *//**
* 函数说明:获得总行数
* 参数说明:
* 返回值:总行数
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public int getRows(String fieldname,String value)
{
String sql="";
if(fieldname==null||fieldname.equals("")||fieldname==null||fieldname.equals(""))
sql="FROM Books ORDER BY bookName";
else
sql="FROM Books where "+fieldname+" like '%"+value+"%'"+"ORDER BY bookName";
List list=this.getHibernateTemplate().find(sql);
return list.size();
}
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** *//**
* 函数说明:查询信息
* 参数说明: 集合
* 返回值:
*/
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public List getBooks(String fieldname,String value,int pageSize, int startRow)
{
final int pageSize1=pageSize;
final int startRow1=startRow;
final String queryName=fieldname;
final String queryValue=value;
String sql="";
if(queryName==null||queryName.equals("")||queryValue==null||queryValue.equals(""))
sql="FROM Books ORDER BY bookName";
else
sql="FROM Books where "+fieldname+" like '%"+value+"%'"+"ORDER BY bookName";
final String sql1=sql;
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
return this.getHibernateTemplate().executeFind(new HibernateCallback()
{
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
![](http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public List doInHibernate(Session session) throws HibernateException, SQLException
{
// TODO 自动生成方法存根
Query query=session.createQuery(sql1);
query.setFirstResult(startRow1);
query.setMaxResults(pageSize1);
return query.list();
}
});
}
![](http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif)
}
![](http://www.blogjava.net/Images/OutliningIndicators/None.gif)