黑马程序员技术交流社区
标题:
【厦门校区JavaEE就业6期-每日总结】Mybatis_day04
[打印本页]
作者:
厦门校区
时间:
2019-5-31 11:34
标题:
【厦门校区JavaEE就业6期-每日总结】Mybatis_day04
今天要大家整理的内容是:
1.延迟加载和立即加载的概念
2.什么是mybatis的一级缓存和二级缓存
3.Mybatis如何使用注解开发的(如何配置)
作者:
陈伟彬
时间:
2019-5-31 14:20
1.延迟加载和立即加载的概念
答:
延迟加载:即懒加载,在查询时只有需要用到的数据才会加载出来,否则就不会进行加载;适用于一对多和多对多的查询;
立即加载:在查询时,会将所有数据加载出来;适用于多对一和一对一查询;
2.什么是mybatis的一级缓存和二级缓存
答:
一级缓存;
概念:是Mybatis中SqlSession对象的缓存
;
结构:存入缓存的数据是以Map结构存入的;
生命周期:SqlSession对象消失时,缓存被销毁;
开启方式:默认开启;
清空机制:在进行增删改时,会触发一级缓存的清空机制,自动清空一级缓存里的数据;
二级缓存:
概念:Mybatis中SqlSessionFactory对象的缓存;
结构:存放的是数据,不是对象,在拿取数据时会创建一个对象来存放数据;
开启:
主配置文件:
settings标签:
setting标签:name:cacheEnabled,value:true
映射配置文件:
cache标签:开启二级缓存的支持;
select标签:
useCache="true":表示当前查询要使用二级缓存
3.Mybatis如何使用注解开发的(如何配置)
答:
CRUD注解:直接在Dao接口的方法上写注解:
查询:@Select("SQL语句");
增加:@Insert("SQL语句");
修改:@Update("SQL语句");
删除:#Delete("SQL语句");
别名注解:在CRUD注解下添加注解:
@Results:别名注解
id:标识
value:给各属性名设置别名
@Result:开始设置别名,一个属性名一个Result
id:true(主键),false(非主键,默认值可不写);
column:别名(要和列名一致);
property:属性名;
复用:
@ResultMap(value = {“标识”})
简写:@ResultMap(“标识”)
多表注解:在别名注解的@Result进行配置:
一对一(一对多)注解:
@Result:建立主表实体类内从表属性对象与数据库表列名的对应关系
column:传递到查询从表属性对象的方法的参数
property:从表对象属性名
one=@One:代替映射配置文件的assocation 标签
select:方法全路径名(查询从表属性对象的方法)
fetchType:加载时机
FetchType.LAZY:延迟加载
FetchType.EAGER:立即加载
FetchType.DEFAULT:默认值,默认为立即加载
多对一(多对多)注解:
@Result:建立主表实体类内从表属性集合与数据库表列名的对应关系
column:传递到查询从表属性集合的方法的参数
property:对象属性集合名
one=@One:代替映射配置文件的assocation 标签
select:方法全路径名(查询从表属性集合的方法)
fetchType:加载时机
FetchType.LAZY:延迟加载
FetchType.EAGER:立即加载
FetchType.DEFAULT:默认值,默认为立即加载
作者:
管文祥
时间:
2019-5-31 15:54
今天要大家整理的内容是:
1.延迟加载和立即加载的概念
答:延迟加载就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。延迟加载也称懒加载.
立即加载就是不管会不会用到,在查询时,会将所有数据加载出来;适用于多对一和一对一查询;
2.什么是mybatis的一级缓存和二级缓存
答:一级缓存是 SqlSession 级别的缓存,只要 SqlSession 没有 刷新或 关闭它就存在。
二级缓存是 mapper 映射级别的缓存,多个 SqlSession 去操作同一个 Mapper 映射的 sql 语句,多个
SqlSession 可以共用二级缓存,二级缓存是跨 SqlSession 的。
3.Mybatis如何使用注解开发的(如何配置)
答:使用注解开发,可以免去对xml文件的配置,在使用注解开发时需要借助@Select注解,@Insert注解,@Update注解,@Delete注解,@Results 注解, @Result 注解, @One 注解, @Many 注解。
@Select注解,@Insert注解,@Update注解,@Delete注解分别对应xml配置文件中的<select>,<insert>,<update>,<delete>标签
@Results对应标签<resultMap>,@Result 代替了 <id>标签和<result>标签
@One(一对一)对应<assocation>标签,@Many(多对一)对应<Collection>标签,
作者:
廖艺铭
时间:
2019-6-1 22:48
今天要大家整理的内容是:
1.延迟加载和立即加载的概念
延迟加载:就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据
立即加载:加载一个实体 时,会立即从数据库中查询,与其关联的类也会被同时查询
2.什么是mybatis的一级缓存和二级缓存
一级缓存:SqlSession 级别的缓存,只要 SqlSession 没有 flush 或 close,它就存在
二级缓存:mapper 映射级别的缓存,多个 SqlSession 去操作同一个 Mapper 映射的 sql 语句,多个SqlSession 可以共用二级缓存,二级缓存是跨 SqlSession 的
3.Mybatis如何使用注解开发的(如何配置)
在mapper接口中的方法上配置,比如
一对一:
@Select("select * from account")
@Results(id="accountMap",value = {
@Result(id=true,column = "id",property = "id"),
@Result(column = "uid",property = "uid"),
@Result(column = "money",property = "money"),
@Result(property = "user",column = "uid",one=@One(select="com.itheima.dao.IUserDao.findById",fetchType= FetchType.EAGER))
})
List<Account> findAll();
一对多:
@Select("select * from user")
@Results(id="userMap",value={
@Result(id=true,column = "id",property = "userId"),
@Result(column = "username",property = "userName"),
@Result(column = "address",property = "userAddress"),
@Result(column = "sex",property = "userSex"),
@Result(column = "birthday",property = "userBirthday"),
@Result(property = "accounts",column = "id",
many = @Many(select = "com.itheima.dao.IAccountDao.findAccountByUid",
fetchType = FetchType.LAZY))
})
List<User> findAll();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2