A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天要大家整理的内容是:
1.延迟加载和立即加载的概念
2.什么是mybatis的一级缓存和二级缓存
3.Mybatis如何使用注解开发的(如何配置)

3 个回复

倒序浏览
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:默认值,默认为立即加载
回复 使用道具 举报
今天要大家整理的内容是:
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>标签,
回复 使用道具 举报
今天要大家整理的内容是:

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();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马