1.1 回顾
session提供 map容器,用于执行一些指定的操作时,进行相应PO对象缓存的。
例如:get(User.class,1)
证明:两次执行get方法,第二次时候不进行select查询。
跟数据库的交互少了,性能就高了
1.2 save方法
状态之前的转变
将瞬时态 转换 持久态。
当OID类型为:代理主键,执行save方法时,将触发insert语句,确定OID的值。直到commit数据才进入数据库。
当OID类型为:自然主键,执行save方法时,此时不触发insert语句,直到commit才触发insert语句,数据进入数据库。
如果OID在数据库中已经存在记录将抛异常。
1.3 saveOrUpdate方法
对象时瞬时态,执行saveOrUpdate,底层执行save方法。如果对象时脱管态,执行saveOrUpdate,底层执行update方法。
OID 代理主键,OID如果没有值,执行save方法;如果有值(setUid(,,)),执行update方法。
如果设置oid,但数据库中没有对应记录,将抛异常。
<id name="uid" unsaved-value="3">
判断OID是否存在,与“unsaved-value”设置内容进行比较,如果没有设置,此内容为类型对应默认值。例如:String null ; int 0等
OID 自然主键(assigned : 自然主键,生成手动设置。例如身份证),先执行select查询,获得主键的值,OID不存在save,OID存在update。