一.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,则创建一个新的Session
if (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. 加载、更新、删除持久化实体