Base.java
package cn.itcast.hibernate;
import java.util.Date;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import cn.itcast.hibernate.domain.User;
public class Base {
public static void main(String[] args) {
User user = new User();
user.setBirthday(new Date());
user.setName("name");
addUser(user);
}
//下面两种添加的方法效果是相同的
static void addUser(User user) {
Session session = null;
Transaction transaction = null;
try {
session = HibernateUtil.getSession();
transaction = session.beginTransaction();
session.save(user);
transaction.commit();
} catch (HibernateException e) {
if (transaction != null) {
// 事务回滚
transaction.rollback();
throw e;
}
} finally {
if (session != null) {
session.close();
}
}
}
static void addUser1(User user) {
Session session = null;
Transaction transaction = null;
try {
session = HibernateUtil.getSession();
transaction = session.beginTransaction();
session.save(user);
transaction.commit();
} finally {
if (session != null) {
session.close();
}
}
}
}
HibernateUtil.java
package cn.itcast.hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
//final类不让别的类继承
public final class HibernateUtil {
private static SessionFactory sessionFactory;
// 私有的构造方法,不能进行实例化
private HibernateUtil() {
}
static {
// 初始化hibernate
Configuration configuration = new Configuration();
configuration.configure();
sessionFactory = configuration.buildSessionFactory();
}
// 获取sessionFactory对象方法
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
// 获取session对象的方法
public static Session getSession() {
return sessionFactory.openSession();
}
}
hibernate注意的事项
对DoMain Object即实体类的限制
1.必须有无参构造方法(必须的)
2.有无意义的表示符id(主键)(可选)
3.非final时,对懒加载有影响(可选)
User.hbm.xml映射文件的分析
<class name="User">
<id name="id" column="id"(可写可不写)>
<generator class="native"/>
</id>
<property name="name"/>
<property name="birthday"/>
</class>
1.class name="User(实体类的名称)" table="表名"
2.id generator class="native"表示id自增长
一个类有私有的构造方法,别处就不能进行new了。