Hibernate注解配置与XML配置区别

注解配置的方式与xml很很多类似:

首先是需要加入4个jar包:hibernate-commons-annotations.jar 、 hibernate-annotations.jar、ejb3-persistence.jar 、 hibernate-jpa-2.0-api-1.0.1.Final.jar

使用注解和xml配置,获取Session的方法在hibernate4.0版本以后是一样的,方法如下:

1         Configuration configuration=new Configuration();
2         configuration.configure();
3         ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
4         SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);        
5         Session session=sessionFactory.openSession();

下面是不同的地方:

(1)hibernate.hbm.xml 文件中把引用:xxx.hbm.xml改为引用实体类:

          即把:<mapping resource="com/db/entity/Person.hbm.xml"/>

          改为:<mapping class="com.db.entity.Person" />

(2):注解方式不需要在xxx.hbm.xml把实体类与表进行映射。而采用在实体类中进行注解。

注意:(1):实体类属性注解的时候,都注解在get方法前

         (2):如果在实体类中某些属性不注解:(属性和get都不写注解),默认为表字段名与实体类属性名一致。

         (3):如果实体类的某个成员属性不需要存入数据库中,使用@Transient 进行注解就可以了。即类似于:(xxx.hbm.Xml配置中的某些字段不写(就是不需要对这个成员属性进行映射))

         (4):表名称可以在实体类前进行注解。

         (5):所有这些注解在:javax.persistence包下。而不是在hibernate包中。

 

User.java

@Entity
@Table(name="user")
public class User implements Serializable {

    private int id;
    private String name;
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id",nullable=true)
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    
    @Column(name="name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
}

hibernate.cfg.xml

 1 <hibernate-configuration>
 2 
 3 <session-factory>
 4     <property name="dialect">
 5         org.hibernate.dialect.MySQLInnoDBDialect
 6     </property>
 7     <property name="connection.url">
 8         jdbc:mysql://localhost:3306/mydb
 9     </property>
10     <property name="connection.username">root</property>
11     <property name="connection.password">123456</property>
12     <property name="connection.driver_class">
13         com.mysql.jdbc.Driver
14     </property>
15     <property name="myeclipse.connection.profile">MyDBAccount</property>
16     <property name="show_sql">true</property>
17     <mapping class="com.db.entity.User"/>
18 </session-factory>
19 
20 </hibernate-configuration>

Test.java

public class Test{

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Session session=HibernateSessionFactory.getSession();
        User user=new User();
        user.setBname("丽丽");
        session.beginTransaction();
        session.save(user);
        session.getTransaction().commit();
    }

}

执行的sql语句:

Hibernate: insert into user (name) values (?)

原文地址:https://www.cnblogs.com/SaraMoring/p/5634993.html