MyBatis应用分析与最佳实践

1)为什么要用MyBatis?
    (1)JavaEE的规范,用JDBC

    (2)JDBC的问题
        代码重复:和业务逻辑无关的代码,十分重复。

        结果集处理太复杂:
            需要啊自动转化为Pojo对象,十分麻烦。

        连接管理:
            忘记关闭导致连接被消耗完毕

        SQL语句的硬编码:
            sql和业务处理的代码放在一起,十分麻烦。

    (3)现成的工具框架
        Apache: DbUtils
            支持数据源
            反射
            QueryRunner
            ResultSetHandler

        SpringJDBC: JDBCTemplate
            方法封装:
                JDBCTemplate

            资源管理:
                dataSource

            结果集的处理:
                RowMapper、mapRow
                结果集转化为Object

                但是需要定义RowMapper,每一张表,不是特别方便--》传入泛型,直接用BaseRowMapper 解决


        但是,sql和业务的操作还是耦合在一起的。
                条件参数的话,必须用参数传入,无法传入一个对象。
                save一个方法,直接保存到数据库。
                没有提供缓存等功能。

    (4)O对象 R映射 M关系型数据库--》对象与数据库的映射。 

    (5)Hibernate
        hbm.xml
        session.save(blog)

        问题:
            不能指定部分字段
            无法自定义SQL,优化困难: SQL是自动生成的。
            不支持动态SQL:动态变更表名的话,无法自动变更。


        JPA也是对Hibernate的封装

2)MyBatis: 半自动的ORM框架
    (1)使用连接池对连接进行管理
    (2)SQL和代码分离,集中管理
    (3)参数映射和动态SQL
    (4)结果集映射
    (5)缓存管理:一、二级别管理
    (6)重复SQL的提取
    (7)插件机制

3)选择什么ORM框架?
    1.业务简单的,用Hibernate
    2.需要灵活SQL的,用MyBatis
    3.对象呢要求高的,可以用JDBC
    4.Spring JDBC可以和ORM框架混用

4)MyBatis编程式开发
    (1)mybatis和MySQL jar包依赖
    (2)全局配置文件mybatis-config.xml
    (3)映射器Mapper.xml
    (4)Mapper接口

5)4个对象
    SqlSessionFactoryBuilder: 创建工厂类。 生成了工厂类对象,就没有作用了,生成完工厂类,就可以丢弃了,生命周期是方法内。
    SqlSessionFactory:创建会话,一直存在,需要不断创建SqlSession,是单例模式。
    SqlSession:一次会话。每一次请求,一个方法里面存在。
    Mapper:SqlSession的getMapper产生的,和SqlSession生命周期一样,存在于事务的方法里面。

6)mybatis-config.xml全局配置文件解析-->Configuration

7)TypeHandler: String--》varchar
    Java类型和JDBC类型的映射关系。

8)自定义ObjectFactory--》注册到全局配置文件中来,实现某猫数据量*3

9)插件--》可以拦截四大对象

10)最佳实践
    (1)动态sql
    (2)批量操作。是根据动态sql,生成符合数据库语法的sql语句。
        而不是一个for循环搞,太消耗性能。
        默认拼接sql操作最大是4M。 
    (3)Batch Executor

11)关联查询问题,N+1

12)字段出现变化时
    (1)继承
    (2)通用Mapper

    MyBatis-Plus


========================

========================
1)JDBC的缺点
    (1)代码重复

    (2)硬编码: 驱动连接地址

    (3)连接管理
            连接管理需要手动释放

    (4)不优雅:
        sql和业务代码有耦合。 集中地方维护。
        对结果处理,需要new对象,判断类型手动赋值,想要指定类型后自动判断。

2)核心对象
    (1)配置类
    (2)执行器
    (3)应用层的API
    (4)代理对象: id查找sql的硬编码

    SQL id 方法
    namespace 接口类型
    statement
    动态代理

3)操作流程
    SQL语句: 接口类型 + 接口参数

    BlogMapper
        getBlogById(id)

    代理对象去代理接口:MapperProxy

    Configuration

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值