hibernate中使用Annotation

 在hibernate中使用annotation非常方便我们的web开发.下面对比一下使用annotation和和不使用之间的差别吧.

 首先,无论你是否使用annotation,都必须有hibernate的配置文件(hibernate.cfg.xml),这个在hibernate的自带的手册中能找到,这里就不给出了.

 其次建立一个名为Student的实体类,如下:

 1 public class Student {
 2     private int id;
 3     private String name;
 4     private int age;
 5     
 6     public int getId() {
 7         return id;
 8     }
 9     public void setId(int id) {
10         this.id = id;
11     }
12     public String getName() {
13         return name;
14     }
15     public void setName(String name) {
16         this.name = name;
17     }
18     public int getAge() {
19         return age;
20     }
21     public void setAge(int age) {
22         this.age = age;
23     }
24 }

 如果你不使用annotation,那么你就还得写一个Student的xml文件(Student.hbm.xml,一般这个配置文件写在和实体类同一个包中),目的用于和数据库中的表和字段对应.假设数据库中已经建立了一个名为"_student"的表,其字段分别为_id(primary key),_name,_age;那么这个xml文件就应该写成像下面这个样子:

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4         "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 5 
 6 <hibernate-mapping package="com.hibernate">
 7     <class name="Student" table="_student">
 8         <id name="id" colunm="_id"></id>
 9         <property name="name" colunm="_name"></property>
10         <property name="age" colunm="_age"></property>
11     </class>
12 </hibernate-mapping>

 写好这个配置文件之后,我们就可以写Student的测试类了,具体代码如下:

 1 public class studentTest {
 2     public static void main(String[] args) {
 3 
 4         Student student = new Student();
 5         
 6         student.setId(1);
 7         student.setAge(21);
 8         student.setName("Jack");
 9         
10         Configuration cfg = new Configuration();          //创建一个Configuration对象
11         SessionFactory sf = cfg.configure().buildSessionFactory();          //创建一个SessionFactory
12         Session session = sf.openSession();                    //获取Session
13         
14         session.beginTransaction();
15         session.save(student);
16         session.getTransaction().commit();
17                 
18         session.close();
19         sf.close();
20     }
21 }                                 

 然后编译运行这个测试类就可以得到如下结果:

 

 

 这就是没有使用annotation而使用xml文件的方式.和人觉得比较麻烦,所以推荐使用annotation.下面就说说annotation的使用.

 同样建立如上的Student的实体类:

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="_teacher")    //声明与数据库中表明为_teacher的表相对应
public class Teacher {
    private int id;
    private String name;
    private String title;
    
    @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;
    }
}

 然后再在hibernate的配置文件中添加下面一行代码:

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

 之后就可以写你的测试类了,如下:

 1 import org.hibernate.Session;
 2 import org.hibernate.SessionFactory;
 3 import org.hibernate.cfg.AnnotationConfiguration;
 4 import org.hibernate.cfg.Configuration;
 5 
 6 import com.hibernate.Teacher;
 7 
 8 public class studentTest {
 9     public static void main(String[] args) {
10 
11         Teacher teacher = new Teacher();
12         
13         teacher.setId(1);
14         teacher.setAge(1);
15         teacher.setName("zhou");
16         
17         Configuration cfg = new AnnotationConfiguration();  //注意是使用的AnnotationConfiguration
18         SessionFactory sf = cfg.configure().buildSessionFactory();
19         Session session = sf.openSession();
20         
21         session.beginTransaction();
22         session.save(teacher);
23         session.getTransaction().commit();
24      session.close();
25      sf.close();
26     }
27 }

 运行这个测试类就可以得到类似上面的结果.这就是使用hibernate的两种方式.

 

hibernate中使用Annotation,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。