Hibernate 学习笔记

来源:互联网 发布:淘宝拍照灯光怎么打 编辑:程序博客网 时间:2024/06/18 12:08

一.Hibernate应用的开发步骤

1.      开发持久化类,由POJO + 持久化注解组成

2.      获取Configuration

3.      获取SessionFactory

4.      获取Session,打开事务

5.      用面向对象的方式操作数据库

6.      关闭事务,关闭Session

 

二.持久化类及注解

@Entity@Table (name= "news_inf")publicclass News {         // 消息类的标识属性         @Id         @GeneratedValue(strategy =GenerationType.IDENTITY)         private Integer id;         // 消息标题         private String title;         // 消息内容                  private String content;                  //省略所有的getter和setter方法

         ·类级注解

         @Entity注解声明该类是一个Hibernate的持久化类

         @Table 指定该类映射的表。此处name指定该类映射的表是news_inf表

         @Id 用于指定该类的标识属性,标识属性通常映射到数据库的主键列

@GeneratedValue 用于指定主键生成策略,其中strategy指定了主键生成策略为IDENTITY,也就是自动增长的主键生成策略。

·属性级注解

@Column 指定某个属性所映射的数据列的详细信息,如列名、列字段长度等

@Formula 该注解的value属性可指定一个SQL表达式,指定该属性的值将根据表达式来计算。拥有该注解的属性不保存在数据库里。

@Generated 为属性指定该注解后,每当Hibernate执行一条insert或update语句时,Hibernate会立即执行一条select语句来获得该数据列的值。

@Translent 修饰不想持久化保存的属性

@Enumerated 修饰枚举类型的属性,该注解的value值为EnumType.STRING或EnumType.ORDINAL

@Lob、@Basic注解来保存图片等大数据类型

@Temporal 修饰日期类型的属性,value属性支持TemporalType.DATE、TemporalType.TIME和TemporalType.TIMESTAMP。

         date : yyyy-MM-dd  time : hh:mm:ss   timestamp : yyyy:MM:dd hh:mm:ss

 

三.获取Session,打开事务

 

package keynes;import org.hibernate.*;import org.hibernate.service.*;import org.hibernate.boot.registry.*;import org.hibernate.cfg.*;public class HibernateUtil {public static final SessionFactory sessionFactory;static {try {// 使用默认的hibernate.cfg.xml配置文件创建Configuration实例Configuration cfg = new Configuration().configure();// 以Configuration实例来创建SessionFactory实例ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();sessionFactory = cfg.buildSessionFactory(serviceRegistry);} catch (Throwable ex) {System.err.println("Initial SessionFactory creation failed." + ex);throw new ExceptionInInitializerError(ex);}}// ThreadLocal可以隔离多个线程的数据共享,因此不再需要对线程同步public static final ThreadLocal<Session> session = new ThreadLocal<Session>();public static Session currentSession() throws HibernateException {Session s = session.get();// 如果该线程还没有Session,则创建一个新的Sessionif (s == null) {s = sessionFactory.openSession();// 将获得的Session变量存储在ThreadLocal变量session里session.set(s);}return s;}public static void closeSession() throws HibernateException {Session s = session.get();if (s != null)s.close();session.set(null);}}

 

打开事务:

Transaction tx =sess.beginTransaction();

四.用面向对象的方式操作数据库

1.      持久化对象的状态:瞬态、持久化、脱管

2.      改变持久化对象状态的方法

3.      加载、更新、删除持久化实体

1 0