注解配置的方式與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 (?)