Hibernate第二天,精彩继续······
1.配置 C3P0 数据库连接池:
(1. 配置 hibernate.cfg.xml 文件
(2. 导入 jar 包
(3. 注意配置:
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 属性
2. Hibernate对象实例的三种状态与Session的方法:
瞬时:数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器
回收,一般是new出来且与session没有关联的对象。
持久:数据库中有数据与之对应,当前与session有关联,拥有持久
化标识(相当于主键值),并且相关联的session没有关闭,事务没有提交;
持久对象状态发生改变,最终会同步到数据库中。
游离(托管):数据库中有数据与之对应,但当前没有session与之关联;游离
对象状态发生改变,hibernate不能检测到。
3.集合映射一般需要指定:
1)集合表的表名,在相应元素中使用属性table指定;
2)集合外键,是在子元素key中用属性column属性指定一个列名,他是一个外键
引用了实体表的主键;
3)集合元素,对于值类型集合,使用元素element指定;对于实体类型集合,使
用元素one-to-many或many-to-many。
4)如果是索引集合,如List,数组或Map(bag不是),还需要指定一个集合表中
的索引字段,用于对应到数组索引或List的索引,或者Map的key。
a) 如果是List或数组,需要指定(集合表中的)一个用于保存索引的列,用
元素list-index指定。
b) 如果是Map:key用map-key元素指定;如果key是一个实体引用,则是通过
map-key-many-to-many来配置。
4. HQL是面向对象的查询语言,他查的是对象而不是表。HQL主要通过Query来
操作,Query的创建方式:Query q = session.createQuery(hql)
1)查询所有User实体:from User
2)选择查询User实体:select u from User as u,可以只查询其中几个属性:select u.id,u.name from User u
3)使用where子句进行过滤:from User u where u.id < 10
4)使用order by指定排序:from User u order by u.id desc
5)聚集函数:count(),max(),min()等
5.HQL查询语言中使用参数有两种:
1)使用?占位,例:from User where id > ?,指定参数值使用
Query.setParameter(int position, Object val),位置索引从0开始;
2)使用变量名占位,例:from User where id > :id,指定参数值是使用
Query.setParameter(String name, Object val);