mybatis回顾-YL2020.06

本文深入讲解MyBatis框架,从其与JDBC的关系到ORM特性,覆盖配置、映射、代理开发、缓存机制及与SSM框架整合等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.mybatis就是一个封装来jdbc的持久层框架,它和hibernate都属于ORM框架,但是具体的说,hibernate是一个完全的orm框架,而mybatis是一个不完全的orm框架。
2.分析原生JDBC代码:
    步骤: 
        1.加载驱动
        2.建立连接
        3.定义sql
        4.预处理statement
        5.设参、执行sql,获取结果集
        6.遍历处理结果集
        7.释放资源
    问题:
        1.在创建连接的时候存在硬编码    ==>>>  配置文件(全局配置文件)
        2.在执行statement时存在硬编码  ==>>>  配置文件(映射文件)
        3.频繁开关数据库,性能低下         ==>>>    数据库连接池(全局配置文件)
3.原始dao的开发方式: dao接口 + dao实现类
    问题:1、有大量的重复的模板代码
          2、存在硬编码
4.Mapper代理的开发方式: 使用的是jdk的代理策略。
    步骤:1、先写一个接口
          2、再写一个mapper.xml文件去写对应的sql
          3、编写的时候注意几个注意事项。
5.全局配置文件
    SqlMapConfig.xml的配置内容和顺序如下(顺序不能乱):
        Properties(属性)
        Settings(全局参数设置)
        typeAliases(类型别名)
        typeHandlers(类型处理器)
        objectFactory(对象工厂)
        plugins(插件)
        environments(环境信息集合)
            environment(单个环境信息)
                transactionManager(事物)
                dataSource(数据源)
        mappers(映射器)
6.映射文件
    1.输入映射:简单类型、pojo类型、包装pojo类型、Map类型
    2.输出映射:resultType、resultMap、动态sql    
7.其他小结:
    1.#{}和${}
        #{}表示占位符?,#{}接收简单类型的参数时,里面的名称可以任意
        ${}表示拼接符,${}接收简单类型的参数时,里面的名称必须是value
        ${}里面的值会原样输出,不加解析(如果该参数值是字符串,有不会添加引号)
        ${}存在sql注入的风险,但是有些场景下必须使用,比如排序后面会动态传入排序的列名
    2.parameterType和resultType
        parameterType指定输入参数的java类型,parameterType只有一个,也就是说入参只有一个。
        resultType指定输出结果的java类型(是单条记录的java类型)
    3.selectOne和selectList
        selectOne查询单个对象
        selectList查询集合对象
8.一对一,一对多,多对多映射
    <collection>
        ...
        <collection>
            ...
            <association>...<association/>
        <collection/>
    <collection/>
9.延时加载,也叫懒加载,也叫按需加载
    在mybatis中,resultMap标签 的association标签和collection标签具有延迟加载的功能。
10.查询缓存
    一级缓存: sqlsession,默认开启
        一级缓存,指的就是sqlsession,在sqlsession中有一个数据区域,是map结构,这个区域就是一级缓存区域。一级缓存中的key是由sql语句、条件、statement等信息组成一个唯一值。一级缓存中的value,就是查询出的结果对象。
    二级缓存: 同一个namespace下的 mapper,需要手动开启
        二级缓存,指的就是同一个namespace下的mapper,二级缓存中,也有一个map结构,这个区域就是二级缓存区域。二级缓存中的key是由sql语句、条件、statement等信息组成一个唯一值。二级缓存中的value,就是查询出的结果对象。

11.整合SSM
    1.原始dao开发:
        1.lib导入jar包。
        2.编写mybatis的文件: sqlMapConfig.xml 和 sqlmap下的XxxMapper.xml
        3.编写dao 和 daoImpl: 继承 SqlSessionDaoSupport
        4.为了测试,去配置UserDao的bean
        5.测试类测试
    2.Mapper代理开发:
        1.lib导入jar包
        2.编写mybatis的文件: sqlMapConfig.xml
        3.编写mapper: mapper接口 + mapper.xml,放在同一包下
        4.为了测试,单个mapper代理类配置
        5.测试类测试
12.逆向工程
    mapper已经存在的时候,会追加!!
 

13.解答之前的一个疑惑

Q: 配置mapperScannerConfigurer 这一部分是如何在整合中被省略掉的???  (我发现fesher/ cloudnote:只要配置了sqlSessionTemplate 就没有 配置mapperScannerConfigurer)

其实这个问题是不正确的,实际是配置mapperScannerConfigurer,从而省去sqlSessionFactory注入与MapperFactoryBean

参考:MyBatis MapperScannerConfigurer
Spring与MyBatis 整合时关于SqlSessionTemplate的用法和映射器的使用(MapperFactoryBean,MapperScannerConfigurer)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值