zoukankan      html  css  js  c++  java
  • hibernate的AnnotationHelloWorld

    来龙去脉:

    最开始sun这个土鳖设计了EJB2.0EJB2.1那个时代。后来有人发现设计的很烂,不好用,就设计了hibernate,,人们发现用hibernate反而比EJB2.02.1好,hibernate迅速流行。土鳖一看,这事不好办呀,主流的被山寨的打倒了,他就把hibernate的创始人给挖过去定义了EJB3,所以hibernate的作者现在在但是EJB的项目组里。怎么定呢?牛就牛在,sun是官方,干脆定义一套标准,我不实现。我定义一套标准,大家的实现必须在我的这个框框里头。三流的公司卖产品,二流的公司卖服务,一流的公司卖标准。sun这个准一流就定义了标准,这个标准就叫JPAhibernate一看,你这官方都定义了标准了,我不实现也不好意思呀,就写了Annotation支持官方的标准。由于参考了hibernate的实现,(作者就在那呢),所以这个标准 定义和hibernate非常符合。标准定义好后,可以不用hibernate,可以换成其他的具体实现。由于参考了和hibernate,定义的也不错,简单容易写功能强大,所以有流行趋势。Hibernate  AnnotationJPA  Annotation是一回事,但Hibernate  Annotation有一些自特定的扩展,只有在非常特殊的情况才能用上。

    Annotation使用@+名字如:@override   @SuppressWarnings

    Hibernate3.0后支持Annotation,目标是建立符合JPA标准的Annotation

    除了一般的包,需要另外加入三个包:

    hibernate-annotations-3.2.0.ga.jar.zip

    hibernate-commons-annotations-3.3.0.ga.jar    进行反射时需要的包

    ejb3-persistence-3.3.1.jar.zip       符合JPA标准的Annotation的实现

    这三个包在hibernate-annotations-3.4.0.GA里,可以去网上下一个。

    写一个Teacher类:

    package com.oracle.hibernate.model;
    
    import javax.persistence.Entity;
    import javax.persistence.Id;
    
    //@Entity,这是个实体类,hibernate可以替我管起来,跟数据库里某个表是对应的。不写任何东西,表示数据库里的表就叫Teacher
    @Entity
    public class Teacher {
    
        private int id;
        private String name;
        private String title ;
        
        //主键,加在相应的get方法
        @Id
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
        
        
    }

    可以看到,写了@Entity后会自动导入javax.persistence,很明显,它不再依赖于hibernate,他就是JPA的一个标准,hibernate是他的一个实现,也可以是别的实现如Toplink、JDO等,百度去看。

    测试类:

    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.hibernate.cfg.Configuration;
    
    import com.oracle.hibernate.model.Student;
    import com.oracle.hibernate.model.Teacher;
    
    
    public class TeacherTest {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            Teacher  t = new Teacher();
            
            t.setId(1);
            t.setName("teacher1");
            t.setTitle("高级");
            
            
            //配置new  AnnotationConfiguration可以读关于Annotation的配置
            Configuration  cfg = new AnnotationConfiguration();
    
            
            SessionFactory  sf = cfg.configure().buildSessionFactory();
            Session session =  sf.openSession();//打开新的Session
            
            
            session.beginTransaction();
            
            session.save(t);
        
            session.getTransaction().commit();
            
            session.close(); //关闭session
            sf.close();  //关闭工厂
        }
    
    }

    在hibernate.cfg.xml里加一句话:

    <mapping class="com.oracle.hibernate.model.Teacher"/>

    我们先在数据库建一个Teacher表,id是主键,也可以不建表,hibernate会自动帮你建。

    效果:

  • 相关阅读:
    Privacy & Logic
    Rules of Evidence
    Court terms & Judicial opinions
    Objections in Court
    US Trial Procedures
    Jeremy Jaynes v. Va.
    C++\CLI编程(一、命名空间)
    C++\CLI编程(一、命名空间)
    C++关于#include 两种 引用方式
    C++关于#include 两种 引用方式
  • 原文地址:https://www.cnblogs.com/lihaoyang/p/4844818.html
Copyright © 2011-2022 走看看