注解配置的方式与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改为引用实体类:
即把:
改为:
(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">rootproperty> 11 <property name="connection.password">123456property> 12 <property name="connection.driver_class"> 13 com.mysql.jdbc.Driver 14 property> 15 <property name="myeclipse.connection.profile">MyDBAccountproperty> 16 <property name="show_sql">trueproperty> 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 (?)