Hibernate构建一个CURD的程序

完成功能:对实体Event进行CURD操作

1、项目结构

2、配置hibernate.xml和log4j的控制台输出描述文件log4j.properties

3、编写一个HibernateUtil工具类

package com.akwolf.util; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static final SessionFactory SESSION_FACTORY = buildSessionFactory(); private static SessionFactory buildSessionFactory() { try { return new Configuration().configure("hibernate.xml") .buildSessionFactory(); } catch (Throwable e) { throw new ExceptionInInitializerError(e); } } public static SessionFactory getSessionFactory() { return SESSION_FACTORY; } }

4、完成Event实体

package com.akwolf.bean; import java.util.Date; public class Event { private long id; private String title; private Date date; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } @Override public String toString() { return "Event [date=" + date + ", id=" + id + ", title=" + title + "]"; } }
5、设置Event实体的映射文件

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.akwolf.bean"> <class name="Event" table="EVENTS"> <id name="id" column="EVENT_ID"> <generator class="native" /> </id> <property name="date" column="EVENT_DATE" type="timestamp"></property> <property name="title" column="EVENT_TITLE" type="java.lang.String" /> </class> </hibernate-mapping>

6、编辑一个测试类:

package com.akwolf.test; import java.util.Date; import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import com.akwolf.bean.Event; import com.akwolf.util.HibernateUtil; public class EventManager { public static void main(String[] args) { EventManager mgr = new EventManager() ; //createAndStoreEvent(); mgr.listEvent() ; } public static void createAndStoreEvent() { Event event = new Event(); event.setDate(new Date()); event.setTitle("ok张"); // 取得会话工厂 SessionFactory sessionFactory = HibernateUtil.getSessionFactory(); // 取得一个会话 Session session = sessionFactory.getCurrentSession(); // 开始事物 session.beginTransaction(); session.save(event); // System.out.println(event); // 提交事物 session.getTransaction().commit(); sessionFactory.close(); } public void listEvent() { Session session = HibernateUtil.getSessionFactory().getCurrentSession(); session.beginTransaction(); List<Event> list = session.createQuery("from Event").list(); session.getTransaction().commit(); HibernateUtil.getSessionFactory().close(); for (Event event : list) { System.out.println(event); } } }
7、注意问题:

(1)当事物结束的时候,不管是提交还是回滚,Hibernate会自动把Session从当前线程剥离,并且关闭它。若再次调用getCurrrentSession(),会得到一个新的Session,并开始一个新的工作单元。

(2)绝不要把程序设计成每次操作数据库都取得一个新的Session。

(3)连接池使用c3p0,在网上看了一篇文章说dbcp的bug很多,以至于Hibernate的作者比较恼火,官方支持的c3p0。


8、遇到问题:

在做插入操作是出现乱码,检查了一下原因是在刚开始安装mysql时,配置选择的是默认配置,而漠视的是Latin-1,是不支持中文,于是重装mysql调整编码,但插入时报错了,郁闷了一下,,想了一下,数据库hibernate是以上一个lation-1的编码创建的,于是删掉重建,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值