优点:
- SQL被统一提取出来,便于统一管理和优化
- SQL和代码解耦,将业务逻辑和数据访问逻辑分离
- 提供映射标签,支持对象和数据库的ORM字段关系映射
- 提供对象关系映射标签,支持对象关系组件维护
- 灵活书写动态SQL,支持各种条件的动态SQL生成
缺点:
- 编写SQL语句时工作量大,尤其是字段多、关联表多的时候更是如此
- SQL语句以来数据库,导致数据库移植性差
工作流程
1、加载Mapper配置的SQL映射文件或SQL注解
2、通过读取配置文件,创建会话工厂SqlSessionFactory
3、根据非法工厂创建会话对象SqlSession,会话对象是一个接口,包含CRUD数据库操作的方法
4、创建Executor接口帮助会话对象执行操作
5、执行器将待处理的SQL信息封装到MappedStatement对象中
6、操作数据库,返回结果,结束流程
简单配置:
- mybatis.config-location:配置mybatis-config.xml路径,其中配置MyBatis基础属性
- mybatis.mapper-locations:配置Mapper对应的XML文件路径
- mybatis.type-aliases-package:配置项目中实体类的包路径
- mybatis.configuration.map-underscore-to-camel-case:下划线与驼峰时候对应
- spring.datasource.*:数据源配置
- Spring Boot启动时数据源会自动注入到SqlSessionFactory中,使用SqlSessionFactory构建SqlSession,再自动注入到Mapper中,编程直接使用Mapper即可
操作标签定义:
- insert标签的属性
1、id:命名空间中的唯一标识符
2、useGeneratedKeys:开启主键自增回显,将自增长的主键值回显到形参中
3、parameterType:参数类型
4、keyColumn:数据库中主键的字段名称
5、keyProperty:pojo中主键对应的属性 - update和delete标签的属性
1、parameterType:参数类型
注解:
- 数据库操作注解:
1、@Select:查询时使用
2、@Insert:插入数据库时使用,直接传入实体类会自动解析属性到对应的值
3、@Update:处理数据更新
4、@Delete:处理数据删除 - 参数传递:
1、使用@Param定义自定义参数名
2、使用Map传送多个参数
3、直接使用对象
架构分解:
- API接口层:提供给外部使用的接口API
- 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等
- 基础支撑层:负责最基础的功能支撑,包括链接管理、事务管理、配置加载和缓存处理