二 细节分析 入门

写道
开发hibernate 牵扯到实体类的编写 映射文件的编写 表的编写
开发流程 三种方式
 1由Domain object -> mapping->db。(官方推荐)
 2由DB开始,用工具生成mapping和Domain object。(使用较多)
 3由映射文件开始。
Domain Object限制
 1.默认的构造方法(必须的)。
 2有无意义的标示符id(主键)(可选)
 3非final的,对懒加载有影响(可选)
 Domain Java Object(User)
public class User {
 private int id;
 private String name;
 private Date birthDay;
 //getter setter…
}
解释
默认的构造方法 必须要有
id可选 如果实体类没有这个id 那么就不能充分发挥hibernate的作用
实体类修饰符 final 最好不要使用 否则hibernate的懒加载就不能使用

核心文件 映射文件
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 " http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="dao.service">
 <class name="User"> 
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
  <property name="birthday"/> 
 </class>
 
</hibernate-mapping>
分析 class 指定一个实体 对应的表 默认的是实体类的小写 如不指定 将是默认的表名 user
里面有个tabel属性 对应的映射的表名称
id 指定主键 generator属性指定的是主键生成方式 name实体属性名称
property 指定实体属性 name指定实体属性名称
Java代码
 1.初始化代码(只做一次)
  Configuration cfg = new Configuration();
  cfg.configure(“config.cfg.xml”);
  也可以通过cfg.setProperty设置属性。
  SessionFactory sessionFactory = cfg.buildSessionFactory(); 
 2.模板代码
Session session = null;Transaction tx = null;
try{
 session = sessionFactory.openSession();
 tx = session.beginTransaction();
 //…你的代码save,delete,update,get…
 tx.commit();
}catch(Exception e){
 if(tx !=null)tx.rollback();throw e;
}finally{
 if(session != null)session.close();
}
例子程序
工具类
package dao.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
 * 这是个工具类 一般不希望别的类去继承修改的
 * 并且设置为单例模式  private修饰构造方法表示这个类不可以实例化
 * 在这个类中有一断静态的代码块 这样的话,这个类就成为单例模式
 * @author Administrator
 *
 */
public final class HibernateUtil {
    private static SessionFactory sessionFactory;
 private HibernateUtil(){
  
 }
 static {
  Configuration ctf=new Configuration();
        ctf.configure();
        //获取连接工厂
        sessionFactory=ctf.buildSessionFactory();
 }
 public static SessionFactory getSessionFactory() {
  return sessionFactory;
 }
 
 public static Session getSession(){
    return sessionFactory.openSession();
 }
}
测试类
package dao.test;
import java.util.Date;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import dao.service.User;
import dao.util.HibernateUtil;
public class Base {
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  //对hibernate进行初始化操作
//  Configuration ctf=new Configuration();
//        ctf.configure();
//        //获取连接工厂
//        SessionFactory sf=ctf.buildSessionFactory();
//        //获取连接对象
//        Session s=sf.openSession();
//        Transaction tx=s.beginTransaction();
        User user=new User();
        user.setBirthday(new Date());
        user.setName("name");
        addUser2(user);
        System.out.print("end");
 }
   static void addUser1(User user)
   {
       Session s=null;
       Transaction tx=null;
       try{
          s=HibernateUtil.getSession();
          tx=s.beginTransaction();
          s.save(user);
          tx.commit();
       }catch(HibernateException e)
       {
          if(tx!=null){
           tx.rollback();
           throw e;
          }
       }finally
       {
        if(s!=null)
        {
         s.close();
        }
       }
   }
  
  
   static void addUser2(User user)
   {
       Session s=null;
       Transaction tx=null;
       try{
          s=HibernateUtil.getSession();
          tx=s.beginTransaction();
          s.save(user);
          tx.commit();
       }finally
       {
        if(s!=null)
        {
         s.close();
        }
       }
   }
}
完毕!

猜你喜欢

转载自itil-rong.iteye.com/blog/1020549