Mybatis-快速上手及其原理-了解什么是Mybatis(一)
什么是Mybatis:
Mybatis是支持普通SQL查询,存储过程和高级映射的优秀的持久层框架,Mybatis几乎消除了几乎所有的JDBC代码和参数手工设置及对所有的JDBC和参数的手工设置及对结果的检索,Mybatis可以使用简单xml或注解用户配置和原始映射,将接口和Java的POJO映射成数据库中的记录
什么是ORM
对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。
对象-关系映射,是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
ORM模型的简单性简化了数据库查询过程。使用ORM查询工具,用户可以访问期望数据,而不必理解数据库的底层结构。
简单来说,我们使用ORM可以将我们的对象(或类)去进行映射,使得我们可以去操作对象就能完成对表的操作。
主流持久层框架比较:
jdbc,mybatis,hibernate各自优缺点及区别
jdbc:
我们使用jdbc编程,大概需要这些步骤
1.使用jdbc需要连接数据库,注册驱动和数据库信息
2.操作connection,打开Statemmn对象
3.通过Statemment对象执行sql,返回结果到ResultSet对象
4.使用ResultSet读取数据,然后通过代码转化为具体的POJO对象
5.关闭数据库相关的资源
// JDBC 驱动名及数据库 URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost:3306/RUNOOB"; // 数据库的用户名与密码,需要根据自己的设置 static final String USER = "root"; static final String PASS = "123456"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; try{ // 注册 JDBC 驱动 Class.forName("com.mysql.jdbc.Driver"); // 打开链接 System.out.println("连接数据库..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); // 执行查询 System.out.println(" 实例化Statement对象..."); stmt = conn.createStatement(); String sql=''SELECT id, name, url FROM user"; ResultSet rs = stmt.executeQuery(sql); // 展开结果集数据库 while(rs.next()){ // 通过字段检索 int id = rs.getInt("id"); String name = rs.getString("name"); String url = rs.getString("url"); // 输出数据 System.out.print("ID: " + id); System.out.print(", 名称: " + name); System.out.print(", URL: " + url); System.out.print("\n"); } // 完成后关闭 rs.close(); stmt.close(); conn.close(); }catch(SQLException se){ // 处理 JDBC 错误 se.printStackTrace(); }finally{ // 关闭资源 conn.close(); }
jdbc缺点:
1:通过上面的代码,就可以知道使用jdbc从数据库获取数据,代码很丑陋,而且你每写一条sql,都需要这样写,所以也比较麻烦
2:操作数据库,每次需要创建连接对象,但是创建后连接对象也不主动释放,这也会极大的造成资源的浪费
hibernate:
hibernate是一个轻量的持久层框架,底层封装的JDBC,hibernate也是减少了jdbc大量操作数据库的代码
Hibernate优点:
1、对象化。人员以面相对象的思想来操作数据库。Hibernate支持许多面向对象的特性,如组合,继承,多态等。
2、更好的移植性.对于不同的数据库,开发者只需要使用相同的数据操作即可.
3、开发效率高。hibernate提供了大量的封装(这也是它最大的缺点),很多数据操作以及关联关系等都被封装的很好,开发者不需写大量的sql语句,这就极大的提高了开发者的开发效率。
4、缓存机制的使用。hibernate提供了缓存机制(session缓存,二级缓存,查询缓存),对于那些改动不大且经常使用的数据,可以将它们放到缓存中,不必在每次使用时都去查询数据库,缓存机制对提升性能大有裨益。
session缓存:
二级缓存:
查询缓存;
Hibernate缺点:
一、由于对持久层封装过于完整,导致开发人员无法对SQL进行优化,无法灵活使用JDBC的原生SQL,Hibernate封装了JDBC,所以没有JDBC直接访问数据库效率高。要使用数据库的特定优化机制的时候,不适合用Hibernate。
二、框架中使用ORM原则,导致配置过于复杂,一旦遇到大型项目,比如300张表以上,配置文件和内容是非常庞大的,另外,DTO满天飞,性能和维护问题随之而来
三、如果项目中各个表中关系复杂,表之间的关系很多,在很多地方把lazy都设置false,会导致数据查询和加载很慢,尤其是级联查询的时候。
四、Hibernate在批量数据处理时有弱势,对于批量的修改,删除,不适合用Hibernate,这也是ORM框架的弱点。Hibernate不适用于小型项目。
五、针对单一对象简单的增删查改,适合于Hibernate,而对于批量的修改,删除,不适合用Hibernate,这也是OR框架的弱点;要使用数据库的特定优化机制的时候,不适合用Hibernate
mybatis优点:
1:Mybatis封装底层封装了JDBC,所以几乎不用我们配置什么,也不会像使用jdbc代码那么丑陋,Myabtis可通过映射关系来关联的(dao和xml进行映射),我们在连接数据库的时候,连接信息写在一个配置文件中,这样也避免和jdbc一样写个sql,要写个配置连接信息
2:mybatis也是将代码耦合度减低了,在dao层只需写个接口然后把参数通过映射的方式带给xml,然后在xml根据需要写sql
3:mybatis使用连接池连接数据库,相比较与jdbc的每次连接就创建连接对象耗费性能,Mybatis使用连接池,mybatis需要从连接,就冲连接池中拿取出一个对象,使用过后就会放会连接池,这样就不会很耗费性能
4:mybatis也支持动态编写sql,提高sql灵活度
5:mybati能很好的处理一对一,一对多,多对多的关系,提供内联和额外sql的方式
6:Mybatis缓存机制,能很好的节约性能,Mybatis默认开启的是一级缓存,二级缓存需要配置开启
mybatis缺点:
1:我们自己在xml手写sql,会因为关联的表太多导致编写sql难度增大
2:对数据库进行操作编写的sql必须和数据库的字段表名对应起来,导致我们对数据库的依赖很大,要是更改字段或更换数据库,就会造成很大的麻烦
SpringBoot 使用Mybatis部分代码
//连接数据库 spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql:///p2p20180531 spring.datasource.username=root spring.datasource.password=admin spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
dao类
public interface PaymentScheduleDetailMapper { int insert(PaymentScheduleDetail record); PaymentScheduleDetail selectByPrimaryKey(Long id); int updateByPrimaryKey(PaymentScheduleDetail record); int batchUpdatePayDate(@Param("psId") Long psId, @Param("now") Date now);}
映射xml
上述代码我们也能发现使用Mybatis是非常方便的
总结:
JDBC:
原生操作数据太过于繁琐,重复代码太多,还需要配置,好的是原生JDBC比较安全.
Hibernate:
hibernate提供了大量的封装,导致不能自定义sql,就不能很好的优化sql语句,也是这一点,慢慢的被Mybatis超越了
Mybatis:
mybatis现在也是持久层的一个主流框架,虽然打手写sql难度要大一些,但是你能控制你写sql的性能,以及行性能优化,对比hibernate Mybatis最大优势也是能够优化sql性能,而hibernate 则是应为封装功能太多,导致不能对sql进行优化,这也是为什么现在Mybatis现在如日中天
- 【插件-前端-bootstrap】快速上手布局web页面用什么?快速制表用什么?bootstrap及其插件(1)
- 第一部份1:JMF基础原理与相关术语介绍 。。。。快速了解JMF有什么相关内容
- AngularJS入门之如何快速上手(详细讲解什么是angular)
- 手机刷机是什么意思?快速了解手机刷机基本概念
- OUYA游戏开发快速入门教程第1章了解OUYA及其设备
- 今日世说新词排行榜-区块,两分钟带你快速了解什么是区块
- 【RL-TCPnet网络教程】第3章 初学RL-TCPnet的准备工作及其快速上手
- 对项目的了解几乎为零?如何快速上手一个新项目
- 快速了解什么是自然语言处理
- Restful快速上手,三分钟理解其原理
- mybatis 注解快速上手
- 快速乘的原理及其代码
- PyTorch深度学习60分钟快速上手(一),什么是PyTorch?
- 什么是ARP及其原理
- AJAX工作原理及其优缺点 1.什么是AJAX? AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页
- 快速了解链码是什么?
- 快速排序 的原理及其java实现(递归与非递归)
- mybatis 注解快速上手
- mybatis 注解快速上手
- 快速了解什么是自然语言处理