mybatis学习笔记四mybatis的延迟加载延迟加载懒加载就是在需要用到数据时才进行加载不需要用到数据时就不加载数据。好处 先从单表查询需要时再从关联表去关联查询大大提高数据库性能因为查询单表要比关联查询多张表速度要快。坏处因为只有当需要用到数据时才会进行数据库查询这样在大批量数据查询时查询工作也要消耗时间所以可能造成用户等待时间变长造成用户体验下降。account表FieldTypeCommentIDint(11) NOT NULL编号主键UIDint(11) NULL用户编号MONEYdouble NULL金额user表FieldTypeCommentidint(11) NOT NULL主键usernamevarchar(32) NOT NULL用户名称birthdaydatetime NULL生日sexchar(1) NULL性别addressvarchar(256) NULL地址使用 assocation 实现延迟加载assocation 适用于一对一和多对一根据表创建实体类 User 类和 Account 类在 Account 类中添加 User 类的引用AccountDao 持久层 xml 文件resultMaptypeaccountidaccountMapidcolumnaidpropertyid/resultcolumnuidpropertyuid/resultcolumnmoneypropertymoney/!-- 它是用于指定从表方的引用实体属性的 --associationpropertyuserjavaTypeuserselectcom.leihui.dao.UserDao.findByIdcolumnuid/association/resultMapselectidfindAllresultMapaccountMapselect * from account/selectUserDao 持久层xml文件selectidfindByIdresultTypeuserparameterTypeintselect * from user where id #{uid}/selectSQLMapConfig.xml 文件中添加延迟加载设置settings!--开启延迟加载的全局开关--settingnamelazyLoadingEnabledvaluetrue/settingnameaggressiveLazyLoadingvaluefalse//settings使用 Collection 实现延迟加载collection 适用于一对多和多对多根据表创建实体类 User 类和 Account 类在 User 类中添加 Account 类的引用UserDao 持久层xml文件resultMaptypeuseriduserMapidcolumnidpropertyid/resultcolumnusernamepropertyusername/resultcolumnsexpropertysex/resultcolumnaddresspropertyaddress/resultcolumnbirthdaypropertybirthday/collectionpropertyaccountofTypeaccountselectcom.leihui.dao.AccountDao.findByUidcolumnid//resultMapselectidfindAllresultMapuserMapselect * from USER/selectAccountDao 持久层 xml 文件selectidfindByUidresultTypeaccountselect * from account where uid #{uid}/selectSQLMapConfig.xml 文件中添加延迟加载设置settings!--开启延迟加载的全局开关--settingnamelazyLoadingEnabledvaluetrue/settingnameaggressiveLazyLoadingvaluefalse//settingsmybatis 缓存Mybatis中的一级缓存和二级缓存一级缓存​ 它指的是Mybatis中SqlSession对象的缓存。​ 当执行查询之后查询的结果会同时存入到SqlSession提供一块区域中。该区域的结构是一个Map。 当再次查询同样的数据mybatis会先去sqlsession中查询是否有有的话直接拿出来用。​ 当SqlSession对象消失时mybatis的一级缓存也就消失了。而且SqlSession 去执行 commit 操作执行插入、更新、删除和 clearCache 操作清空 SqlSession 中的一级缓存这样做的目的为了让缓存中存储的是最新的信息避免脏读。二级缓存​ 它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。​ 二级缓存的使用步骤​ 第一步让Mybatis框架支持二级缓存在SqlMapConfig.xml中配置​ 第二步让当前的映射文件支持二级缓存在UserDao.xml中配置​ 第三步让当前的操作支持二级缓存在select标签中配置​ 注意二级缓存中存储的是数据而不是对象。当在使用二级缓存时所缓存的类一定要实现 java.io.Serializable 接口这种就可以使用序列化方式来保存对象。