Hibernate构建一个CURD的程序
Hibernate构建一个CURD的程序
完成功能:对实体Event进行CURD操作
1、项目结构
2、配置hibernate.xml和log4j的控制台输出描述文件log4j.properties
3、编写一个HibernateUtil工具类
[java]- 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实体
[java]- 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 + "]";
- }
- }
[html]
- <?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、编辑一个测试类:
[java]- 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);
- }
- }
- }
(1)当事物结束的时候,不管是提交还是回滚,Hibernate会自动把Session从当前线程剥离,并且关闭它。若再次调用getCurrrentSession(),会得到一个新的Session,并开始一个新的工作单元。
(2)绝不要把程序设计成每次操作数据库都取得一个新的Session。
(3)连接池使用c3p0,在网上看了一篇文章说dbcp的bug很多,以至于Hibernate的作者比较恼火,官方支持的c3p0。
8、遇到问题:
在做插入操作是出现乱码,检查了一下原因是在刚开始安装mysql时,配置选择的是默认配置,而漠视的是Latin-1,是不支持中文,于是重装mysql调整编码,但插入时报错了,郁闷了一下,,想了一下,数据库hibernate是以上一个lation-1的编码创建的,于是删掉重建,问题解决。
评论暂时关闭