step1、导入包,将hibernate需要的包,全部加入到tomcat下。(没加到tomcat的lib文件下不知道为什么不行)
+ hibernate3 +
step2、操作的对象类 BuyerInfo.java
与数据库中的表列名一一对应
step3、BuyerInfo.hbm.xml 放在BuyerInfo同一包下即可
step4、hibernate.cfg.xml
step5、辅助类HibernateUtil
step6、BuyerDao.java
step7、action
关闭session也可以在add方法中使用
二、查询数据
原来需要写的sql语句是:select * from bookinfo;
用hibernate实现为:
@SuppressWarnings
(
"unchecked"
)
public
ArrayList<BookInfo> query()
throws
SQLException, ClassNotFoundException
{
ArrayList<BookInfo>
resultArrayList
;
Session
session
= HibernateUtil.getSessionFactory().getCurrentSession();
session
.beginTransaction();
resultArrayList
= (ArrayList<BookInfo>)
session
.createQuery(
"from BookInfo"
).list();
session
.getTransaction().commit();
HibernateUtil. getSessionFactory().close();
return
resultArrayList
;
}
也可以是:
ArrayList<BuyerInfo> rs = (ArrayList<BuyerInfo>) session .createQuery( "from BuyerInfo where buyername = '" + info .getBuyerName() + "' and buyerpassword = '" + info.getBuyerPassword() + "'" ).list();
其他的查询方式可以参看hibernate的文档。
注:
- hibernate不支持*,支持省略select,也就是不能直接在createQuery中写select * from bookinfo,而要写from BookInfo,且 这里的BookInfo是
对应的实体名,而不是表名。如果直接写成表名,会出现映射错误***is not mapped的异常。
- BookInfo实体中必须包含无参的构造函数,这是因为 当查询的时候返回的实体类是一个对象实例,是hibernate动态通过反射生成的
反射的Class.forName("className").newInstance();需要对应的类提供一个无参构造函数。
<a class="caption-link" href="bookintroduction.jsp? bookname
<%=
bookname
%>
& bookauthor
<%=
bookauthor
%>
& bookprice
<%=
bookprice
%>
& bookcover
<%=
bookcover
%>
& bookpath
<%=
bookpath
%>
& bookclass
<%=
bookclass
%>
& bookdate
<%=
bookdate
%>
"></a>