Hibernate基础配置:
1.hbm2dll.auto:取值 validate|update|create|create-drop.
update 更新。使用create-drop时,在显示关闭sessionFactory时,将drop掉数据库schema.
Validate,当你创建好表了,往里插数据,在操作任何数据之前,都会帮你检查数据库里的表是不是能和hbm文件和配置能对应上。
实现自动建表。要不Annotation要不.hbm.xml
2. 先建表还是实体类。纯理论:先写类,根据Annotation建好表。
实际,先表后类。对数据库优化有好处。
3. 搭建日志环境显示DDL语句。
Slf4j可以认为是一个日志的框架,可以用各种各样的具体实现。可以用slf自己的实现,log4j,jdk logging api,apache commons-logging.Hibernate3.3.2用的是slf。Slf就是个接口。
我们要把slf的接口转换成log4j的接口,包。 用了adapter的设计模式。
Junit:调试出来没有错误,但是程序就是有问题有两种解决办法。
在Junit中:
public static void main(){
beforeClass();
}
try {
sf=new org.hibernate.cfg.Configuration().configure().buildSessionFactory();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
<!-- 显示SQL-->
<property name="hibernate.show_sql">true</property>
<!-- 格式化SQL-->
<property name="hibernate.format_sql">true</property>
Show_sql是true的话,打印sql语句。
Formate_sql按sql语句的格式打印。
如果表名和类名不一致怎么办?
Annotation:在表名上加@Table(_Teacher) javax.persistence
Xml:在class标签中加table=”_Teacher”
字段名和属性名相同,Annotation:只写一个Id就好了。如果没有加@Id,就相当于加了@Basic,这个注解加不加是没有关系的。字段名和属性名不同,Annotation:在属性上写@Column(name=”_name”).xml中:在property标签中加column=” ”.
如果不想让属性持久化,Annotation:就在getXXX()上加@Transient.透明的,存储的时候透明人。数据库中的表就没有这个属性。xml:中不用property标签就行了。
映射日期和时间的类型:Date是包括日期和时间的。
@Temporal(TemporalType.DATE)
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
TemporalType里有三个常量:DATE只记日期 TIME TIMESTANP(默认)时间和日期都记下来。
大多数情况时间和日期都记下来。
Xml:
映射枚举类型:用xml配置会非常麻烦,
EnumType.STRING的话按字符串把职称的名字写进去,如果是EnumType.ORDINAL会按int类型也就是按数组的下标值、
Annotation字段映射位置:
@Id可以放在field下也可以放在get/set方法下。有很多人放在field上,这样看起来更清晰,但是如果这样放就破坏了java 的封装性,原因是我们的字段都是private的,如果你在private上写私有的话,那么就意味着hibernate 就可以访问你私有的成员变量。Java的反射机制就可以做到这一点。从设计的角度不推荐这样。因为我们设置为私有的就是不希望别人来拿我们私有的东西。建议写在get方法上。