mybatis-学习笔记

简介: mybatis-学习笔记

正文


一、我的笔记


一.mybatis、hibernate及传统jdbc的对比?


1.1 传统jdbc连接数据库经过的过程


(1)使用jdbc编程需要连接数据库,注册驱动和数据库信息


(2)操作Connection,打开Statement对象


(3)通过Statement对象执行SQL,返回结果到ResultSet对象


(4)使用ResultSet读取数据,通过相关的代码转换成具体的POJO对象


(5)关闭数据库的相关资源


1.2 传统jdbc的弊端


(1)工作量相对较大。需要先建立数据库连接,然后处理jdbc底层事务,处理数据类型。还需要操作Connection对象、Statement对象和ResultSet对象去获取数据,并准确关闭它们。


(2)对jdbc编程可能产生的异常进行捕获处理并正确关闭资源,这个操作太复杂且繁琐,对于更复杂的应用程序就不适用。


*ORM模型:数据库的表和java对象的映射关系模型,通过这层映射关系,可以将数据库表的数据转换化为java对象,以便更加容易理解和应用java程序。


2.1 hibernate简介


为了解决数据库数据和POJO对象的相互映射,通过POJO可以直接操作数据库的数据,它提供一种全表映射模型,全表映射只需要提供POJO和映射关系即可


2.2 hibernate的优势


(1)消除代码的映射规则,它被分离到XML或者注解里面去配置


(2)无需再管理数据库连接,它也配置在XML里面


(3)一个会话中,不用操作多个对象,只要操作Session即可


(4)关闭资源只需要关闭一个Session即可


2.3 hibernate的劣势


(1)全表映射带来的不便,比如更新时需要发送所有的字段


(2)无法根据不同的条件组装不同的SQL


(3)对多表关联和复杂的SQL查询支持较差。需要自己写SQL,返回后,需要自己将数据组装为POJO


(4)不能有效支持存储过程


(5)虽然有HQL,但是性能较差。大型互联网系统往往需要优化SQL,而hibernate做不到。


2.4 hibernate模型(素材来自:process on)


333.png


3.1 mybatis简介


为了解决hibernate的不足,半自动映射的框架产生,半自动映射需要提供POJO、SQL和映射关系


3.2 mybatis的优势


(1)简单易学和容易掌握


(2)sql写在xml里,方便统一管理和优化


(3)提供xml标签,支持编写动态sql


(4)解除sql与程序代码的耦合


(5)提供映射标签,支持对象与数据库的ORM字段关系映射


3.3 mybatis的劣势


(1)编写sql语句工作量较大,尤其是字段多、关联多表时,更是如此


(2)sql语句依赖数据库,导致数据库移植差,不能更换数据库


(3)编写动态sql时,不方便调试,尤其逻辑复杂时


(4)缓存使用不当,容易产生脏数据


3.4 mybatis模型(素材来自:process on)


222.png


二、mybatis的基本构成


1. SqlSessionFactoryBuilder(构造器):根据XML配置或java编码来生成工厂接口SqlSessionFactory


2. SqlSessionFactory(工厂接口):创建会话SqlSession(单例模式)


3. SqlSession(会话):类似JDBC的Connection对象,既可以发送SQL去执行并返回结果,也可以获取Mapper的接口


4. SQL Mapper:mybatis新设计的组件,由一个Java接口和XML文件(或注解)构成的,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果


111.png


目录
相关文章
|
5月前
|
SQL Java 关系型数据库
MyBatisPlus学习笔记(SpringBoot版)
MyBatisPlus学习笔记(SpringBoot版)
494 0
|
XML Java 数据库连接
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-mybatis的概述2
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-mybatis的概述2
50 0
java202304java学习笔记第六十六天-ssm-mybatis-接口代理方法实现
java202304java学习笔记第六十六天-ssm-mybatis-接口代理方法实现
41 0
|
SQL Java 关系型数据库
|
SQL Java 关系型数据库
java202304java学习笔记第六十六天-ssm-mybatis的dao层实现1
java202304java学习笔记第六十六天-ssm-mybatis的dao层实现1
34 0
java202304java学习笔记第六十六天-ssm-mybatis中dao层实现-动态sql-foreach之2
java202304java学习笔记第六十六天-ssm-mybatis中dao层实现-动态sql-foreach之2
53 0
java202304java学习笔记第六十六天-ssm-mybatis中dao层实现-动态sql-if之1
java202304java学习笔记第六十六天-ssm-mybatis中dao层实现-动态sql-if之1
34 0