hibernate笔记

1.出现这个java.lang.exceptionininitializererror就要去看下静态代码块了。

2.hibernate-core-5.0.6.Final.jar里的org.hibernate.dialect包下类名都是方言。
3.mysql要保存图片时<property name="phote" type="binary" length="102400"></property>,类中用byte[] photo。
4.web项目名右键build path里的source栏的src目录,myeclipse会编译复制下面的文件到classpath下。
5.try{
tx = session.beginTransaction();
//操作
tx.commit();
}catch(Exception e){
tx.rollback();
throw e;
}finally{

session.close();

}
6.session的方法:save,delete,update,get(class,id),createQuery(hql),saveOrUpdate()
7.mysql -uroot -p;use 库(进入库);desc 表名(看表信息);show create table 表名(看建表语句);

8.native属性会自动选择三种中的一种作为主键方式,identity,sequence,hilo。uuid主键必须是string类型
9.TreeSet,TreeMap中的对象许实现Compare接口,用于比较大小,集合内部元素会升序排列
10.应为set无序,所以对应表中记录无序。用list相当于给对应表中加了一层有序的限制。
11.有序集合:可以通过key或索引获得的集合。无序集合:只能通过遍历获得。
12、inverse为true表示不维护关联关系,外键就是表之间的关系,涉及到外键改变就要注意inverse的值。
13.维护的关联关系并不是表现在数据库里的,如部门里的员工,数据库里并没有一列这样的元数据,在java端会有一个集合来表示,这样方便操作如删除部门里的一个员工这样的操作。
14.list-index cloume=“idx”注意用list集合外键那方要多一个idx属性。
15.<set name= table=>
<key cloume=>
<many-to-many class= cloume=>
</set>
16.多对多关联时有一边inverse属性为true,解除和关联起来都和inverse有关,关联是通过外键完成的。
17.cascade=‘delete’级联删除,删除主对象是也删除关联对象。save-update,all,none。多个用逗号隔开
18.sort,order-by排序的属性
19.删除态:数据库中删除记录。持久态。游离:session中一级缓存里会保存记录,调用close会清空。临时状态。
20.evict(obj)清除缓存中一个,clear(),close()
21.删除更新都在flush执行,save在之前,因为它要马上的到数据库生成的主键值。
22.数据库中有,session中没有就是游离的。
23.load()是懒加载,在第一次使用查询对象的属性是才会加载,返回的是一个代理对象,如果类是final,则懒加载失效,或者设置lazy属性。与get()区别。
24.没有主键的表通常没有实体类。
25. inverse 决定是否把对对象中集合的改动反映到数据库中,所以inverse只对集合起作用,也就是只对one-to-many或many-to-many有效(因 为只有这两种关联关系包含集合,而one-to-one和many-to-one只含有关系对方的一个引用)。
cascade决定是否把对对象的改动反映到数据库中,所以cascade对所有的关联关系都起作用(因为关联关系就是指对象之间的关联关系)。
26.refresh(obj)刷新缓存中对象的状态
27.串行化(不可并发),读已提交,读为提交,重复读
28.一对一关联基于主键的无法维护关联关系,因为主键不能为null。
29.Hibernate.initialize();立即加载,解决懒加载异常问题
30.关联关系,类,集合中都可以使用懒加载属性。数组不可以,因为无法生成代理对象
31.一级缓存(session):一次连接的缓存,时间很短。二级缓存(sessionfactory):时间长。
32.一级缓存其实主要用来管理对象。真正提高效率在二级缓存,默认不开启。
33.hql查询:

Query query = session
    .createQuery("from User where id not between 200 and 2000");
  List<User> list = query.list();

  for (User user : list) {
   System.out.println(user.getId() + user.getUsername());
  }

34.对Blob类型进行操作(图片存入和读出)
存入:FileInputStream fis = new FileInputStream(new File(" "));
photo = Hibernate.createBlob(fis);
读出:FileInputStream fis = user.getPhoto().getBinaryStream();
FileOutputStream fos = new FileOutputStream(" ");
byte[] buf = new byte[1024];
int len = 0;
while((len = fis.read(buf)) != -1){
fos.write(buf, 0, len);
}
35.遍历文件夹: File file = new File("C:\Users\Administrator\Desktop\图片素材\T恤");
File[] f = file.listFiles();
for(int i = 0; i < f.length; i++){
addPicture(f[i]);
}
36. 注意byte[]--binary--blob三者的映射,对于blob还有一个clob字段容易混淆,blob一般用于保存二进制图片文件,clob用于保存大的文本文件
37.文件转byte[]:
FileInputStream fis = new FileInputStream(new File(" "));
byte[] buf = new byte[fis.available()]
fis.read(buf);
37:byte[]转文件:
FileOutputStream fos = new FileOutputStream(new File(" "));
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write(buf);



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值