Spring——控制反转、面向切面编程,整合MyBatis

阅读全文 »

MyBatis:基本使用,动态SQL,逆向工程MBG

概述

  • 一个ORM(持久层)框架

    • JDBC(JavaDataBase Connectivity)是 Java 数据库连接——用 Java 操作数据库
    • Mybatis 针对 JDBC 中重复操作做了封装,扩展并优化部分功能
    • ORM:对象关系映射(Object Relational Mapping),通过描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中——ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁;ORM会牺牲程序的执行效率,因为ORM是面向对象的,并且应用于多层系统
  • 与其他ORM的对比:

    • JDBC:
      • SQL 夹杂在代码中,修改SQL需要重新编译 Java 类
      • 维护不易
      • 无连接池
    • Hibernate:
      • 内部自动生产的 SQL 不容易做特殊优化
      • 反射操作多
    • MyBatis:
      • SQL 和 Java 代码分开
  • 架构图:

    image-20220903124455760
    • MyBatis xml配置文件:
      • mybatis-config.xml是MyBatis的主配置文件,是全局的,保存数据库的连接信息、运行环境等
      • mapper.xml 是 sql 映射文件,记录对数据库进行增删改查的sql语句,映射文件需要在主配置文件mybatis-config.xml里显式的加载(见后文的xml配置)
    • SqlSessionFactory会话工厂:
      • SqlSessionFactory创建各种会话,实际上是一个接口,接口中定义了openSession的不同的加载方法
      • 一般用单例模式来管理SqlSessionFactory,便于重复使用
      • 工厂模式:如果创建某一个对象,使用的过程基本固定,可以把创建这个对象的相关代码封装到一个“工厂类”中,以后使用工厂类“生产”需要的对象
    • SqlSession会话:面向用户的,即一个用户对应一个会话,定义数据库的操作方法,类似于JDBC中的Connection对象
      • 每个线程都应有自己的SqlSession实例。SqlSession的实例不能共享使用,因为不是线程安全的
      • 打开了一个SqlSession,则在使用完毕后需要关闭它。通常sqlsession.close()关闭操作,放到finally{}块里,以确保每次都能正确关闭
    • executor执行器:MyBatis底层自定义了Execuor执行器接口操作数据库(执行SQL语句),包括2个执行器:基本执行器、缓存执行器
    • MappedStatement映射器:
      • MyBatis定义的一个底层封装对象,包装了xml配置信息、sql映射信息等
      • 在Mapper.xml里,一个sql语句对应一个MappedStatement映射器对象,sql的id也是MappedStatement映射器的id——接收输入映射(SQL语句中的参数),返回输出映射(即将SQL查询的结果映射成相应的结果)

范例

阅读全文 »