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对所有的关联关系都起作用(因为关联关系就是指对象之间的关联关系)。
cascade决定是否把对对象的改动反映到数据库中,所以cascade对所有的关联关系都起作用(因为关联关系就是指对象之间的关联关系)。
26.refresh(obj)刷新缓存中对象的状态
27.串行化(不可并发),读已提交,读为提交,重复读
28.一对一关联基于主键的无法维护关联关系,因为主键不能为null。
29.Hibernate.initialize();立即加载,解决懒加载异常问题
30.关联关系,类,集合中都可以使用懒加载属性。数组不可以,因为无法生成代理对象
31.一级缓存(session):一次连接的缓存,时间很短。二级缓存(sessionfactory):时间长。
32.一级缓存其实主要用来管理对象。真正提高效率在二级缓存,默认不开启。
33.hql查询:
34.对Blob类型进行操作(图片存入和读出)
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());
}
存入: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]);
}
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);