1~13讲:
1、hibernate/etc/hibernate.properties中有所有cfg配置属性
2、hibernate.cfg.xml中
hbm2ddl.auto表示是否由hibernate自动创建表
create-drop 运行前创建,运行结束删除
create 先drop后create
update 比较映射文件和表结构的区别,不一样的情况下update数据库表结构
validate 同3,但是不是update,而是报错
show_sql表示是否打印sql语句
3、domain对象必须要有默认构造方法
4、Session几个主要方法
save,persist保存数据,没开启事务(transaction)时,persist不会产生insert语句,而save会先insert后发现无事务,然后又回滚。当事务开启时,这两个方法含义一致,都是保存。
delete 删除对象
update 更新对象。如果数据库中没有记录,会报异常
get 立即访问数据库
load 懒加载 (只在使用时才真正查询,但是要保证在session未关闭前使用查询过,否则在其他处直接使用该数据时就会报错)
saveorupdate hibernate根据id是否有值来决定是save瞬时对象还是update脱管对象。merge也是此含义,但是区别在于调用merge后对象还是脱管的。
5、瞬时,持久,脱管
6、两种查询方式
HQL:对象名区分大小写
hql=from User as user where user.name=? //?可以使用别名:n代替?,便于程序维护 ,则query.setString("n",name)
Query query = s.createQuery(hql)
query.setString(0,name)
list = query.list() //如果确认查询结果只有一个,那就用 User u = query.uniqueResult()
分页方法:在query.list()前加上如下两条语句
query.setFirstResult(200)
query.setMaxResult(10) //表示从结果的第200条开始取10条
Criteria条件查询:
Critical c = s.createCriteral(User.class)
c.add(Restrictions.eq("name",name))
c.add((Restrictions.lt("birthday",new Date()))
c.setFirstResult(200)
c.setMaxResult(10)
list = c.list()