这两种SessionFactoryBean是配置hibernate配置实体及字段与表的映射时的两种不同方法。他们的使用与否在applicationContext.xml中配置。
一、annotation是注释、注解 的意思,在hibernate配置实体及字段与表的映射时,annotationSessionFactoryBean提供一种注解的方式来映射,它可以依赖@注解通过实体类生成表(包括字段、主键···)。这种方法是spring2.5以后才有的。
Spring中annotationSessionFactoryBean的定义如下:
public class AnnotationSessionFactoryBean extends LocalSessionFactoryBean implements ResourceLoaderAware
利用注解的简单例子如下:
package com.pm.model;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="tb_userlogin")
public class UserLogin implements Serializable{
private int id;
private String loginName;
private String pwd;
private String type;
private String mail;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
}
对应的beans.xml中的配置:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
<value>com.pm.model.UserLogin</value>
<!--多个时要在这里进行配置-->
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
注:@Entity 、@Table(name=“····”) 这些以@开头的就是注解,他们需要引入相应的类、包,如import javax.persistence.Entity;
@Column(name="***")的注解用在字段的get方法上。另外还有很多@注解,如@ManyToOne @JoinColumn(name="****")等等。
二、LocalSessionFactoryBean
LocalSessionFactoryBean,在applicationContext.xml或beans.xml中配置之后,需要另外一个***.hbm.xml的配置文件对实体和表的具体映射进行配置。
beans.xml中配置:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>com/pm/model/UserLogin.hbm.xml</value>
<!--多个时在这里配置-->
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
貌似Spring2.5后的class一般的都用AnnotationSessionFactoryBean。