| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 为什么使用mybatis -> 正文阅读 |
|
[Java知识库]为什么使用mybatis |
话不多说进入主题 为什么要使用Mybatis在Mybatis出现以前,乃至于与mybatis相似的框架出现以前,我们是怎么连接数据库的?
那么身为程序员,我们自然而然就想写一个工具类来帮助我们做这些繁琐又枯燥无味的工作,把重复的代码和资源管子的代码封装进去,只传sql就行了。 Apache 的DbUtilsApache在2003年的时候发布了一个叫Commons DbUtils的工具类,可以简化对数据库的操作。 DbUtils提供了一个QueryRunner类,它对数据库的增删改查的方法进行了封装。先创建一个QueryRunner对象。
在QueryRunner的构造函数里面,可以传入一个数据源,比如这里用Hikari,这样我们就不需要再去写各种创建和释放连接的代码了。
我们通过这个工具类,提供获取QueryRunner 实例的方法。 方法封装解决了重复代码的问题,传入数据源解决了资源管理的问题。 怎么把结果集转换成对象呢?比如转换成POJO或者List或者Map?肯定不能一个个属性去set或者put 了。 我希望做到的是,只要指定一个类型,它就可以自动把结果集给我转换成这种类型。这个怎么实现呢? 为了避免给每种类型创建一个自动转换类,在DbUtils里面提供了一系列的支持泛型的ResultSetHandler,比如用来把结果集转换成JavaBean的,转换成List的,转换成Map的,等等。 只要在DAO层调用QueryRunner封装好的查询方法,传入一个指定了类型的Handler,它就可以自动把结果集转换成实体类Bean 或者List或者Map,不过这种自动映射,要求数据库的字段跟对象的属性名称完全一致,才可以实现自动映射。 Spring 的DbUtils除了DbUtils之外,Spring 也对原生的JDBC进行了封装。
通过这种方式,无论在多少个地方查询tbl_emp表,都不需要重复处理ResultSet,只要在每一个需要映射的地方传入这个RowMapper就可以了,减少了很多的重复代码。 我们可以自己写一个支持泛型的 BaseRowMapper实现RowMapper接口,通过反射的方式自动获取所有属性,把表字段全部赋值到属性。这样,我们在使用的时候只要传入我们需要转换的类型就可以了,不用再单独创建一个个的RowMapper。 DbUtils和Spring JDBC,这两个对JDBC做了轻量级封装的框架,或者说工具类里面,帮助我们解决的问题:
这两个工具已经可以帮助我们解决很大的问题了,但是还是存在一些不足:
要解决这些问题,使用这些工具类还是不够的,这个时候用到ORM框架了。 什么是ORMORM的全拼是Object Relational Mapping,也就是对象与关系的映射,对象是程序里面的对象,关系是它与数据库里面的数据的关系。也就是说,ORM框架帮助我们解决的问题是程序对象和关系型数据库的相互映射的问题。 比如 Hibernate 它是一个曾经很流行的ORM框架,2001年的时候就出了第一个版本。在使用Hibernate的时候,我们需要为实体类建立一些hbm的xml映射文件。 Hibernate的特性:
但是Hibernate在业务复杂的项目中使用也存在一些问题: 于是,我们需要一个更加灵活的框架。 mybatismybatis应运而生,它是一个半自动化的ORM框架。 MyBatis的前身是ibatis,2001年开始开发,是“internet”和“abatis (障碍物)”两个单词的组合。04年捐赠给Apache。2010年更名为MyBatis。 既然 MyBatis的目的是简化JDBC的操作,那么它必须要提供一个可以执行增删改查的对象,这个对象就是SqlSession接口,我们把它理解为跟数据库的一个连接,或者一次会话。 所以我们通常会使用第二种方式,也是新版的 MyBatis里面推荐的方式:定义一个Mapper接口的方式。这个接口全路径必须跟 Mapper.xml里面的namespace对应起来,方法也要跟Statement lD ——对应。通过执行接口方法,来执行映射器中的SQL语句。 总结一下,MyBatis的核心特性,或者说它可以解决哪些主要问题:
Hibernate和MyBatis 跟 DbUtils、Spring JDBC一样,都是对JDBC的一个封装,我们去看源码,最后一定会看到Connection、Statement和ResultSet这些对象。 有这么多的工具和不同的框架,在实际的项目里面应该怎么选择? 在一些业务比较简单的项目中,我们可以使用Hibernate; 如果需要更加灵活的SQL,可以使用MyBatis,对于底层的编码,或者性能要求非常高的场合,可以用JDBC; 实际上在我们的项目中,MyBatis和Spring JDBC是可以混合使用的; 当然,我们也根据项目的需求自己写ORM框架。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 1:42:20- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |