Hibernate:配置文件和ORM文件

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语句中不出现相应的字段

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

发布了202 篇原创文章 · 获赞 37 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/lovecuidong/article/details/99325276
今日推荐