Hibernate的配置文件:hibernate.cfg.xml
针对数据库的中文处理
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">UTF-8</property>
显示SQL语句
<property name="show_sql">true</property>
<property name="format_sql">true</property>
使用C3P0连接池
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
ORM文件中class节点属性:Xxx.hbm.xml
dynamic-update属性
dynamic-update:动态更新
取值:true | false
动态更新:当对象的属性没有发生变化时,Hibernate再生成update语句时就不带相应的字段
dynamic-insert属性
dynamic-insert:动态插入
取值:true | false
动态插入:生成insert into语句时,如果实体类的属性值为null,则生成的insert into语句中不出现相应的字段
扫描二维码关注公众号,回复:
10858729 查看本文章
lazy属性
lazy:延迟加载
取值:true,延迟加载 | false,立即加载
get和load一个实体时,get会立即返回实体,而load返回的是一个代理,只有你访问了该实体的属性,才会真正从数据库里读取,这个你可以看他有没有发出SQL语句就可以证明。
另一个就是映射关系时,比如一对多,一这里定义了一个多的一方的集合,延迟的加载的话就不会加载关联的实体。
public void findById() {
int goodsId = 1;
Configuration c = new Configuration().configure();
SessionFactory sf = c.buildSessionFactory();
Session session = sf.openSession();
Goods goods = (Goods) session.load(Goods.class, goodsId);// load方法lazy有作用
System.out.println(goods.getGoodsId());
System.out.println(goods.getGoodsName());
session.close();
sf.close();
}
延迟加载的要求:延迟加载时session对象(会话,与数据库的连接)不能关闭,如果关闭连接之后再延迟加载时会发生如下异常:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session