MyBatis入门——了解基本概念

1. 了解MyBatis1.1 MyBatis是什么?

使用Java操作数据库的话,JDK给我们提供了一层对各个数据库的封装,也就是JDBC,它屏蔽了数据库之间的差异,使用JDBC可以统一操作。但是他长期以来被人诟病的就是重复代码太多。封装参数需要一个一个set,还需要你把ResultSet一个一个映射成POJO,这里面充满了重复代码,这里完全可以由模板代码来代替。当然,不仅仅是重复代码,还有其他缺点,比如,性能,安全,扩展性等等。

封装JDBC以求达到更简洁,更优雅,更安全,更高效的方案有很多,MyBatis就是其中之一,这类框架一般被叫做ORM框架(Object Relational Mapping,就是Java中的对象和关系型数据库里的数据映射的一个框架)。

MyBatis通过构造一个Mapper来消除JDBC代码,却又可以实现查询数据库的功能。Mapper是个interface,我们可以指定这个接口里每个方法对应的SQL模板,然后由MyBatis来绑定运行时传入的参数给SQL模板里的占位符,构造成一个可执行的SQL,然后执行,获得结果后再自动封装成方法返回值的类型的对象。

举个例子, :

SQL:

这样查询时的参数绑定,和查询结果的封装都可以由MyBatis来完成。

1.2 为什么使用MyBatis?

知道MyBatis是什么,应该就明白为什么会出现MyBatis之类的ORM框架了,还有常见的Hibernate。对于ORM框架,或者类似的东西,存在的意义就是上面所说的。那么,为什么是MyBatis?而不是其他ORM框架呢?这里我简单的说说,为什么我喜欢MyBatis胜过喜欢Hibernate吧,我更喜欢简洁。说通俗一点,ORM确实有存在的必要,但是真的有必要封装的太过深吗?Hiberante可以达到让用户完全不知道自己在使用数据库的程度,这实现起来肯定比MyBatis更复杂,说明Hibernate的技术含量要更高,可是这也带来了问题,我们真的需要这样吗?

过度的封装,会带来更多的成本,学习成本、故障解决时的成本。而相比Hibernate的高度复杂,MyBatis就显得很简小精悍了。我想这也是很多人喜欢用guice而不是spring吧。

这里随意比较一下两个框架的文档:

2. 基本概念

这里介绍一下MyBatis最核心的几个类,虽然框架帮我们隐藏了很多细节,但是如果对他不够了解,就不能应用的得心应手。这里介绍的几个类都很容易理解,名字起的好也是一种本领啊。

2.1 SqlSessionFactoryBuilder

是根据配置创建 的工厂类,一般来说是通过XML,当然,我们也可以直接用代码来构建。这个类一旦创建出 之后,他的意义就结束了,可以被释放了。一般推荐在方法内定义,用完就释放。当然,你可以用它创建多个不同的 。

2.2 SqlSessionFactory

一旦创建就应该一直存在,一般建议维护在应用级别(不是方法级别,也不是类级别,而是整个应用共享)。一般来说,不需要重复创建这个对象,也不要释放它。可以用单例模式来保证整个应用内的唯一性。

2.3 SqlSession

是线程不安全的,所以每个线程应该维护一个单独的 对象。千万不要用对象的静态变量引用来指向一个 ,这样会导致它泄露到其他线程中。而且,一定要记得关闭 ,常见的使用方式如下:

2.4 Mapper Instances

是我们定义的Mapper接口的实例对象,他包含了SQL绑定关系,需要 创建。所以他的生命周期可以和 一致,也就是线程级别,但是为了简洁,我还是建议放在方法内部,它不需要关闭,使用方法一般如下:

3. 基本使用

代码可直接去Github上下载:https://github.com/dubby1994/mybatis_study

依赖:

3.1 XML版(经典版本)

MyBatis的经典版本就是用XML来配置,并用XML来实现SQL和Java代码的分离。

创建数据库:

插入数据:

编写主配置文件 :

编写启动类 :

编写POJO :

编写Mapper :

运行 结果:

3.2 注解版

可以做到完全没有XML,总共有三个类, , , 。

先准备数据库:

执行 :

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180208G0XJRT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券