Mybatis介绍

mybatis是什么

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

为什么要用mybatis

1、最原始的方式是通过JDBC的API去操作数据库,这种方式存在很多重复性的工作(代码),每一次操作数据库都会进行一下操作:
1.注册驱动(前提是引入jar包)
2.通过 DriverManager 获取一个 Connection,参数里面填数据库地址,用户名和密码
3.我们通过 Connection 创建一个 Statement 对象
4.通过 Statement 的 execute()方法执行 SQL,当然 Statement 上面定义了非常多的方法,execute()方法返回一个 ResultSet 对象(结果集)
5.我们通过 ResultSet 获取数据,转换成一个 POJO 对象
6.我们要关闭数据库相关的资源,包括 ResultSet、Statement、Connection,它们的关闭顺序和打开的顺序正好是相反的

2、如果处理业务逻辑和处理数据的代码是耦合在一起的,业务流程复杂的话,跟数据库交互的次数会很多,会消耗太多的资源

3、DbUtils 和 Spring JDBC,这两个对 JDBC 做了轻量级封装的框架(工具),虽然帮我们解决了一些问题
3.1、无论是 QueryRunner 还是 JdbcTemplate,都可以传入一个数据源进行初始化,也就是资源管理这一部分的事情,可以交给专门的数据源组件去做,不用我们手动创建和关闭;
3.2、对操作数据的增删改查的方法进行了封装;
3.3、可以帮助我们映射结果集,无论是映射成 List、Map 还是实体类。

但是也存在缺点:
3.4、SQL 语句都是写死在代码里面的,依旧存在硬编码的问题;
3.5、参数只能按固定位置的顺序传入(数组),它是通过占位符去替换的,不能自动映射;
3.6、在方法里面,可以把结果集映射成实体类,但是不能直接把实体类映射成数据库的记录(没有自动生成 SQL 的功能);
3.7、查询没有缓存的功能。

ORM框架介绍

什么是ORM?
ORM 的全拼是 Object Relational Mapping,也就是对象与关系的映射,对象是程序里面的对象,关系是它与数据库里面的数据的关系。也就是说,ORM 框架帮助我们解决的问题是程序对象和关系型数据库的相互映射的问题。
O:对象(Object) R:关系型数据库(Relational) M:映射(Mapping)

Hibernate

Hibernate是一个全自动化的ORM框架,帮我们自动的生成sql语句(可以兼容各种流行的数据库),自动进行映射。

如果遇到复杂的业务的时候,Hibernate 的问题就显示出来了:
1、比如使用 get()、save() 、update()对象的这种方式,实际操作的是所有字段,没有办法指定部分字段,换句话说就是不够灵活

2、这种自动生成 SQL 的方式,如果我们要去做一些优化的话,是非常困难的,也就是说可能会出现性能比较差的问题。

3、不支持动态 SQL(比如分表中的表名变化,以及条件、参数)。

Mybatis

Mybatis是一个半自动化的ORM架构,“半自动化”相对于“全自动化”来说的话,封装程度没有 “全自动化” 那么高,不会自动生成全部的 SQL 语句,主要解决的是 SQL 和对象的映射问题。

学习成本低: MyBatis 里面,SQL 和代码是分离的,所以会写 SQL 基本上就会用 MyBatis

Hibernate和MyBatis跟 DbUtils、Spring JDBC 一样,都是对 JDBC 的一个封装

Mybatis的核心特性

1、使用连接池对连接进行管理
2、SQL 和代码分离,集中管理
3、结果集映射
4、参数映射和动态 SQL
5、重复 SQL 的提取
6、缓存管理
7、插件机制

关于技术选型问题:

1、在一些业务比较简单的项目中,我们可以使用 Hibernate;
2、如果需要更加灵活的 SQL,可以使用 MyBatis,
3、对于底层的编码,或者性能要求非常高的场合,可以用 JDBC。
4、当然,根据业务需要,也可以MyBatis 和 Spring JDBC 是可以混合使用的。

Mybatis的使用

1.引入jar包
2.创建全局的配置文件,里面的配置是控制mybatis的核心行为,非常重要,并命名为mybatis-config.xml
3.创建映射器文件,一般是一个表对应一个Mapper.xml,在这个Mapper.xml中可以配置我们的CRUD的sql语句、参数和返回的结果集的映射关系

Mybatis核心对象的生命周期

SqlSessionFactoryBuilder(方法局部 method)

这个类用 来 构 建 SqlSessionFactory 的 , 而SqlSessionFactory 只需要一个,所以只要构建了这一个 SqlSessionFactory,它的使命就完成了,也就没有存在的意义了。所以它的生命周期只存在于方法的局部

SqlSessionFactory(单例的,应用级别 application)

SqlSessionFactory 是用来创建 SqlSession 的,每次应用程序访问数据库,都需要创建一个会话。因为我们一直有创建会话的需要,所以 SqlSessionFactory 应该存在于应用的整个生命周期中(作用域是应用作用域)。创建 SqlSession 只需要一个实例来做这件事就行了,否则会产生很多的混乱,和浪费资源,所以可以采用单例模式。

SqlSession(请求和操作 request / method)

SqlSession 是一个会话,因为它不是线程安全的,不能在线程间共享。所以我们在请求开始的时候创建一个 SqlSession 对象,在请求结束或者说方法执行完毕的时候要及时关闭它(作用域:一次请求或者操作中)。

Mapper(方法 method)

mapper实际上是一个代理的对象,从SqlSession中获取,他是用来发送sql来操作数据库的数据的,作用域是在一个SqlSession事务方法之内

核心配置

XML配置.png

Configuration

configuration 是整个配置文件的根标签,实际上也对应着 MyBatis 里面最重要的配置类 Configuration。它贯穿 MyBatis 执行流程的每一个环节。

MyBatis 全局配置文件顺序是固定的,不能随意更改配置的位置,否则启动的时候会报错。

properties

用来配置参数信息,比如最常见的数据库连接信息。

为了避免直接把参数写死在 xml 配置文件中,我们可以把这些参数单独放在properties 文件中,用 properties 标签引入进来,然后在 xml 配置文件中用${}引用就可以了。

可以用 resource 引用应用里面的相对路径,也可以用 url 指定本地服务器或者网络的绝对路径。

独立配置properties 文件的好处:
1、提取,利于多处引用,维护简单;
2、把配置文件放在外部,避免修改后重新编译打包,只需要重启应用;
3、程序和配置分离,提升数据的安全性。



作者:vincent浩哥
链接:https://www.jianshu.com/p/49ae6b32e7d5
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ghvfghnnnh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值