Hibernate中使用注解

来源:互联网 发布:有顶天家族知乎 编辑:程序博客网 时间:2024/06/06 17:39

Annotation在项目中的使用越来越多,同样hibernate中支持Annotation,如果在hibernate中使用注解,从而轻XML配置,从下面简单的小例子加以说明。

1、实体类Emp.java

package com.yy.hibernate.model;import javax.persistence.Entity;import javax.persistence.Id;@Entity// 实体类public class Emp {private int id;private String name;@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;}}
2、hibernate.cfg.xml文件

<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory ><property name="hibernate.connection.url">jdbc:mysql://127.0.0.1/hibernate</property><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.username">root</property><property name="hibernate.connection.password">root</property><property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><property name="hibernate.show_sql">true</property><!-- <property name="hibernate.hbm2ddl.auto">update</property> --><property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property><mapping class="com.yy.hibernate.model.Emp"/> <!--使用注解--></session-factory></hibernate-configuration>
3、客户端
public class EmpTest {public static void main(String[] args) {//使用注解Configuration config = new AnnotationConfiguration().configure();SessionFactory factory = config.buildSessionFactory();Session session = factory.openSession();Emp emp = new Emp();emp.setId(11);emp.setName("yy");try{session.beginTransaction();session.save(emp);session.getTransaction().commit();}catch(Exception e){session.getTransaction().rollback();}finally{session.close();factory.close();}}}
注意:

在该简单示例中,实体类和数据库表是对应的,字段也是统一的。

如果表名和实体类不一致,则需加如下注解:

@Table(name="_emp")
如果数据库表中字段名和实体类中字段名保持相同,默认在getXXX方法上加如下注解:

@Basic

如果数据库表中字段名和实体类中字段名不一致,则需在getXXX方法上加如下注解:

@Column(name="_name")public String getName() {return name;}

如果某个字段不想持久化,则则getXXX方法上加如下注解:

@Transientpublic String getName() {return name;}
对应的,如果在XML配置中不想持久化,则需要在hbm.xml文件中不配置该字段即可。

如果是枚举类型,则需要在getXXX方法上加如下注解:

@Enumerated(EnumType.ORDINAL)public Level getLevel() {return level;}
此时EnumType.ORDINAL映射字段为整形,如果为EnumType.STRING则映射为varchar类型。



0 1