1. 数据的三种状态
1) state(临时状态):当一个新对象被创建时,它处于一个状态(如果程序运行完毕,该对象将被垃圾回收)。
2)持久状态:与之相关的是持久状态。 对持久态对象的任何修改都会影响数据库中相应的数据。
3)托管状态(自由状态):当对象不再受管理时,就脱离了管理,处于托管状态的对象的属性不会对数据库数据产生任何影响。
企业开发中,使用(obj):来替代save(obj)或(obj)方法
避免状态变化导致的方法错误,(obj)
可以根据obj的状态选择是save()还是()
2.load和get的区别
如果数据库中没有对象,如果通过get方法加载,会返回Null; 如果通过Load加载,会返回一个代理对象。 如果以下代码调用用户对象的属性,则会抛出一个离子。
Load支持延迟加载,但get不支持。
三、工作原理
1)类读取并解析.cfg.xml配置文件
2)读取解析映射信息并创建
3)打开
4)创建交易
5)持久化操作
6) 提交交易
8) 关闭
9) 整个应用程序停止并关闭
4. 优点和缺点
优势:
1)对jdbc访问数据库的代码进行了封装,大大简化了数据访问层繁琐重复的代码。
2)是基于JDBC的主流持久化框架,也是优秀的ORM实现。 它极大地简化了DAO的编码工作,使程序更加面向对象,提高了开发效率。
3)程序更加面向对象,提高开发效率
4)提高生产力,无需编写SQL语句
5)采用hql,支持方言配置,方便数据库移植。
6)它是一个轻量级框架,对代码无侵入。
缺点:
1)效率比JDBC稍低
2)不适合批量操作
3)表的操作不够灵活
5. 延迟加载
里面有一些查询方法。 查询时,并不会立即访问数据库查询数据,而是返回一个空对象。 这个对象不为null,而是一个通过new传递过来的对象。 然而,除了ID属性外,对象中的其他属性都是空的。 当程序使用该对象时,实际上会发送语句来查询数据库,并将返回的数据填充到该对象的属性值中。 这种延迟查询形成的机制称为延迟加载。
为什么要使用延迟加载:
1)由于推迟期间没有数据加载,因此可以节省内存空间,提高内存利用率。
2)如果对象被查询而没有被使用,那么延迟加载的对象根本不访问数据库,这样可以减少数据被访问的次数。
如何使用延迟加载
1)里面有一些方法自动支持延迟加载,只要调用就可以使用。
2)采用延迟加载的方法如下:
。加载();
询问。();
关联映射属性加载,属性名称为懒加载,如果查询不存在懒加载,会抛出异常
6. 优化
使用双向一对多关联而不是单向一对多关联
灵活运用单向一对多
不使用一对一,而是使用多对一
配置对象缓存,集合缓存不适用
一对多收集使用bag,多对多收集使用set。
继承类使用显式多态性
表字段要少一些,不要怕表关联太多,要有二级缓存。
7.什么是ORM?
ORM是对象关系映射,类->表,属性->表中的列,对象->表中的每一条数据,
它是一种解决面向对象数据库与关系数据库不匹配的技术。
优点:让我们的编程思维更加面向对象,无需考虑关系数据库
8、主键生成策略
1)、通知框架使用指定的顺序生成主键的值,然后插入到数据库中。 它主要用于
,DB2,无需程序员参与
foo_seq// 必须加上
2)通知框架主键值采用数据库的自动增长机制。 每次执行save()操作时,都会根据(数据库)自增的方法生成一个id值,无需程序员参与。 它主要用于
mysql,
3)uuid(西方常用),每次执行save()操作时,都会随机生成一个32位不重复的字符串。 程序员不需要参与维护。 PO 类的 Id 属性必须是
4)根据方言的不同,有自动选择或智能选择。企业常用
5)不推荐。 程序语言需要自己维护主键的Id值。 当数据量很大时,维护起来很困难。
9. 级联操作
1)操作
all:在所有情况下执行调平操作,保存并
save-:执行save()/()/时进行调平操作
:一边进行调平操作一边继续
all--:适合集合中删除,对返回的集合进行()操作
none:任何情况下都不进行调平操作
2)属性的作用
是否放弃维护关联关系 true 放弃 false 不放弃
10. 核心接口
接口:配置,根据该配置启动并创建对象;
接口:初始化,充当数据存储源的代理,创建对象,是线程安全的,意味着它的同一个实例可以被应用程序的多个线程共享,是重量级的二级缓存;
接口:负责对象的保存、更新、删除、加载和查询。 它是线程不安全的,可以防止多个线程共享同一个线程。 它是一个轻量级的一级缓存;
接口:管理交易;
查询和接口:执行数据库查询。
11、查询方法
主键查找:.get() 或 load()
hql 查询: .("hql")
SQL 查询:.("sql")
查询(QBC):.()