MyBatis分享

MyBatis分享

MyBatis简介
  • MyBatis是Java开发中非常流行的ORM(对象关系映射)框架,封装了JDBC并解决了Java对象输入参数和结果集的映射,同时又能够让用户方便地手写SQL语句.
ORM简介
  • ORM(Object Relational Mapping)框架采用元数据来描述对象与关系映射的细节,元数据一般采用XML格式,并且存放在专门的对象一映射文件中。
JDBC简介
  • 是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序
JDBC操作数据库的步骤
  • 注册数据库驱动类 ,明确指定数据库 URL 地址、数据库用户名、密码等连接信息
  • 通过 DriverManager 打开数据库连接
  • 通过数据库连接创建 Statement 对象
  • 通过 Statement 对象执行SQL 语句,得到 ResultSet 对象
  • 通过 ResultSet 读取数据,并将数据转换成 JavaBean 对象
  • 关闭 ResultSet Statement 对象以及数据库连接,释放相关资源。
Hibernate的缺点
  • 全表映射,在进行更新时需要发送所有字段
  • 无法根据不同条件组装不同的SQL
  • 对多表关联和复杂SQL查询支持较差,需要自己写SQL,返回的数据需要自己组装为POJO
  • 不能有效支持存储过程
  • HQL性能较差,Hibernate无法优化SQL
MyBatis基础功能介绍
  • 简化开发步骤
    • 在JDBC操作数据库时,除了数据转化出来的JavaBean不同其余步骤均为重复性操作,而MyBatis和其他持久化框架一样可以帮我们屏蔽这些重复的底层原生JDBC代码,从而降低我们的开发周期
    • 通过MyBatis的映射配置文件或相应的注解,可以讲ResultSet映射为Java对象,且映射规则可以嵌套其他映射规则一级子查询,从而实现复杂的映射逻辑,也可以实现一对一、一对多、多对多、及双向映射
  • 可控性高
    • 使用MyBatis时我们可以直接在映射配置文件中编写待执行的原生SQL语句,我们可以通过选择合适的索引来提升系统性能
    • 也可以自定义需要查询的某一部分字段而不是全部字段
  • 支持动态SQL可以确保自动的在需要的地方添加 “where ”、“ and ”、“ in ”等 SQL 语句的关键字以及空格、 逗号、等号等分隔符 从而节约大量的开发时间
MyBatis的结果集映射
ResultSetHandler
  • MyBatis 会将结果集按照映射配置文件中定义的映射规则,
    例如<resultMap>节点、 resultType 属性等,映射成相应的结果对象。这种映射机制是 MyBatis的核心功能之一,可以避免重复的 JDBC 代码。

  • StatementHandler 接口在执行完指定的 select 语句之后, 会将查询得到的结果集交给ResultSetHandler 完成映射处理。 ResultSetHandler 负责映射 select 语句查询得到的结果集。

  • ResultSetHandler是一 个接口,其定义如下:

    public interface ResultSetHandler {
    //处理结采集,生成相应的结果对象集合
    <E> List<E> handleResultSets(Statement stmt) throws SQLException ;
    //处理结采集,返回相应的游标对象
    <E> Cursor<E> handleCursorResultSets(Statement stmt) throws SQLException;
    //处理存储过程的输出参数
    void handleOutputParameters(CallableStatement cs) throws SQLException ; }
    
  • DefaultResultSetHandler 是 MyBatis 提供的 ResultSetHandler 接口的唯一实现 用来关联配置文件处理结果集ResultHandler对象以及处理结果集时的对象工厂反射工厂等

  • handleResultSets ()方法 是通过select语句查询数据库得到的结果集由 DefaultResultSetHandler handleResultSets ()方法进行处理,

    • 首先将查询到的结果对象存入集合得到一个 List
    • 获取第一个ResultSet对象,再获取由标签解析后的多个resultMap对象
    • 如果结果集不为空,那么遍历resultMaps,找到与结果集相同的resultMap
    • 根据resultMap中定义的映射规则对ResultSet(select从数据库查出来的数据)进行映射,并将映射的结果对象添加到一个新的multpleResults集合中进行保存
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UcD7XAe2-1597217111900)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1577345391008.png)]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值