目前spring+hibernate+struts是JSP开发比较热门的搭配啦,今天熟悉了Hibernate顺便做个记录,算个学习文档.
环境Eclipse(3.2)+myEclipse(6.0)+Hibernate(3.1)
新建立Web Project text.
添加Hibernate
![Open in new window Open in new window](http://image.360doc.com/DownloadImg/2007/9/26/14386_772599_1.jpg)
添加数据库映射
![Open in new window Open in new window](http://image.360doc.com/DownloadImg/2007/9/26/14386_772599_2.jpg)
插入数据
session = HibernateSessionFactory.getSession();
Admin admin = new Admin();
admin.setName("test");
admin.setPassword("test");
Transaction tx = session.beginTransaction();
session.save(admin);
session.flush();
tx.commit();
HibernateSessionFactory.closeSession();
更新数据(选择更新)
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
String hqlUpdate = "update Admin c set c.password = :newPassword where c.id = :id";
int updateEntities = session.createQuery(hqlUpdate)
.setString("newPassword", "gooogle")
.setLong("id", 2)
.executeUpdate()
;
tx.commit();
HibernateSessionFactory.closeSession();
删除数据
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
Admin setAdmin = new Admin();
setAdmin.setId(3);
session.delete(setAdmin);
tx.commit();
session.close();
读取数据(根据ID)
Admin admin = new Admin();
admin.setId(2);
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
admin = (Admin) session.get(Admin.class, admin.getId());
tx.commit();
session.close();
out.println(admin.getPassword());
读取数据(List)
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
List aList = session.createCriteria(Admin.class).addOrder(Order.desc("id")).list();
tx.commit();
session.close();
Iterator getIterator = aList.iterator();
while(getIterator.hasNext())
{
Admin av = (Admin) getIterator.next();
out.println(av.getName());
out.println("------");
out.println(av.getPassword());
out.println("<br/>");
}
读取数据(Limit)
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
List aList = session.createCriteria(Admin.class).addOrder(Order.desc("id")).setFirstResult(2).setMaxResults(3).list();
tx.commit();
session.close();
Iterator getIterator = aList.iterator();
while(getIterator.hasNext())
{
Admin av = (Admin) getIterator.next();
out.println(av.getName());
out.println("------");
out.println(av.getPassword());
out.println("<br/>");
}
基本的几种形态操作明白的差不多了.
唯一的要注意的一点就是关于PostgreSQL的使用bigserial做自增型的序列会导致Hibernate无法插入数据,报告一个异常错误为:
could not get next sequence value 我在pgAdmin在数据库状态的时候运行了这么一条错误的语句
realtion "hibernate_sequence" does not exist select nextval("hibernate_sequence")玩过PostgreSQL都知道 select nextval("hibernate_sequence") 是获取一个序列值下一个值.但是跟本没有这个序列名字.当然是错误的插入不进去..最后查阅手册里面发现可以在属性文件可以添加.就是那个你的表的映射的xml(xxx.hbm.xml)文件可以添加的
<id name="id" type="integer">
<column name="id" />
<generator class="sequence">
<param name="sequence">admin_id_seq</param>
</generator>
</id>
这样OK插入没问题!