生动形象MyBatis:JDBC和MyBatis评价转载

原创
小哥 3年前 (2022-10-27) 阅读数 40 #大杂烩

JDBC相关概念

Java已经制定了程序JDBC连接到数据库,SQL数据库编程,JDBC是由SUN公司提出的一些栏目规范,只定义了接口规范,具体实现由各数据库厂商来实现,是一种典型的桥接模式。

桥接模式是一种结构化的设计模式,其主要特点是将抽象和行为实现分离,分别定义接口,能够保持各部分的独立性,并能应对它们的功能扩展。

JDBC规范

所谓规范,就是我定义了标准接口,并进行了如下抽象:Connection代表与数据库之间的联系。Statement执行SQL,用ResultSet表示SQL返回的结果为数据提供了方便。从…Connection可以创建Statement,Statement执行查询以获取。ResultSet。

上面说的Connection、Statement、ResultSet所有这些都应该是接口,具体实现由每个数据库提供程序提供。有了该规范,您可以通过一个统一的界面访问多种类型的数据库,并可以随意切换数据库。

数据库驱动

如上所述,接口的实现是由每个供应商提供的,因此实现类的类名将不会是统一的,将被创建。Connection对象,代码会写一个死的实现类,切换数据库,需要修改代码,这不是很好。为了解决这个问题,抽象的Driver驱动的概念。

Connection con=MySqlConnectionImpl("127.0.0.1",3306,"mi_user",userName,pwd);
复制代码

每个数据库都需要实施Driver接口,Driver数据库连接可用。Connection,通过反射机制动态创建。

Class.forName("com.mysql.jdbc.Drier");
复制代码

同一个程序可以通过访问不同的数据库。DriverManager为了管理驱动器,Driver在初始化时,您需要注册。DriverManager中。

DriverManager提供了一种getConnection方法,用于构建数据库。Connection:

Connection con=DriverManager.getConnection("127.0.0.1",3306,"mi_user",userName,pwd);
复制代码

如果有多个数据库驱动程序,DriverManager如何区分它,需要在数据库中连接url在中指定,如mysql需要添加jdbc:mysql前缀:

String url= "jdbc:mysql://127.0.0.1:3306/mi_user";
Connection con=DriverManager.getConnection(url,userName,pwd)
复制代码

数据源

数据源DataSource包括连接池和连接池管理。2部件,通常称为连接池。在系统初始化期间,数据库连接作为对象存储在内存中,当需要访问数据库时,将从连接池中删除已建立的空闲连接对象。

使用数据源,获取其DataSource对象,通过该对象动态获取数据库连接。此外,DataSource对象可以注册到名称服务。(JNDI)可以通过名称服务获取。DataSource对象,则不需要硬编码驱动器。

DriverManager是JDBC1提供的,DataSource是JDBC2新功能提供了连接数据源的更好方式。

对比Hibernate和MyBatis

通过上面的介绍,传统的JDBC编程给我们提供了连接到数据库的能力,但它的工作量相对较大,先连接,然后处理。JDBC基础事务处理数据类型,但也捕获可能发生的异常并正确关闭资源。

在实践中,它很少被使用。JDBC编程,建议的ORM模型,主要针对数据库数据和POJO对象的相互映射。

Hibernate和Mybatis都是ORM模型,Hibernate提供了一种全表映射的模型、对JDBC封装度比较高。但Hibernate也有很多不足之处,列举如下:

  • 全表映射带来的不便,如更新时发送所有字段;
  • 不可能根据不同的条件进行不同的组装。SQL;
  • 用于多表关联和复杂SQL查询支持能力差,需要自己编写。SQL,回来后,需要自己组装数据。POJO;
  • 不能有效地支持存储过程;
  • 虽然有HQL,但性能不佳,大型互联网系统往往需要优化。SQL,而Hibernate做不到。

在大型互联网环境中,灵活、SQL优化,减少数据传输是最基本的优化方法,Hibernate无法满足要求,而MyBatis它为您提供了一种灵活方便的方式。它是一个半自动映射的框架。

MyBatis需要手动匹配才能提供POJO、SQL和映射关系,而整个表映射Hibernate只需提供POJO以及映射关系。

MyBatis可以配置动态SQL,可以解决Hibernate表名因时间而异。不同的条件说明不同的问题。可以进行优化SQL,由配置决定SQL映射规则还可以支持存储过程,对于一些复杂和需要优化性能的。SQL查询起来更加方便。

核心组件

核心组件包括以下内容:

  • SqlSessionFactoryBuilder:基于配置信息或代码生成。SqlSessionFactory;
  • SqlSessionFactory:依靠工厂生产SqlSession;
  • SqlSession:是一个可以发送的。SQL要执行并返回结果,还可以获取。Mapper的接口;
  • SQL Mapper:是MyBatis新设计的组件,由Java接口和XML文件组成,相应的SQL和映射规则。它负责发送SQL执行并返回结果。

构建SqlSessionFactory

每个MyBatis应用程序基于SqlSessionFactory的实例是中心,其任务是创建。SqlSession。SqlSesion类似于JDBC的Connection对象。

提供了2创造的方法SqlSessionFactory:一种是XML配置的一种方法是编码,推荐使用。XML如何配置。

定义mybatis-config.xml这些文件如下:





 
 

 
 
 
 

 
 
    
    
        
        
            
            
            
            
        
    
 

 
 
 

创建SqlSession

SqlSession是一个接口类,角色的扮演者门面,真正的工作是Executor界面。它需要保证每次用完时都能正常关闭。

SqlSession sqlSession=null;
try{
    sqlSession=sqlSessionFactory.openSession();
    //some code
    sqlSession.commit();
} catch(Exception ex){
    sqlSession.roolback();
} finally{
    if(sqlSession!=null){
        sqlSession.close();
    }
}
复制代码

映射器

测图仪已制作完成Java接口和XML文件(或注释)组合在一起,功能如下:

  • 定义参数类型
  • 描述缓存
  • 描述SQL语句
  • 定义查询结果和POJO映射关系

第一,定义Java接口:

public interface RoleMapper{
    public Role getRole(Long id);
}
复制代码

然后,定义映射XML文件,RoleMapper.xml




 
    
 
复制代码

POJO对象Role定义比较简单,不会列出来。#{id}为这条SQL的参数,SQL列别名和POJO该语句的属性名称是一致的,并且该语句的查询结果自动映射到Role属性,这是自动映射。

执行查询

RoleMapper roleMapper=sqlSession.getMapper(RoleMapper.class);
Role role=roleMapper.getRole(1L);
String roleName=role.getRoleName();
复制代码

组件生命周期

SqlSessionFactory在MyBatis在应用程序的整个生命周期中,每个数据库只对应一个数据库。SqlSessionFactory,您可以实现一个工具类来在单例模式下获取对象。

SqlSession在请求数据库处理事务的过程中,它是一个线程不安全的对象,尤其是在多线程时。它在一个应用程序的请求和操作中幸存下来,并可以执行多个SQL,以确保交易的一致性。

Mapper该角色是发送SQL,然后返回所需的结果,或执行。SQL修改数据库的数据,因此它应该在一个数据库中。SqlSession在交易方法中,JDBC中一条SQL语句的执行、其最大范围和SqlSession都是一样的。

这本书的总体结构

本书分为3章节,这反过来又介绍了MyBatis基本应用,原理和插件开发,实际应用。

基础应用

主要介绍了如何有效地使用它。MyBatis:

  • MyBatis特性
  • 核心组件及其生命周期
  • MyBatis配置
  • 映射器
  • 动态SQL

MyBatis原理

深入了解来源MyBatis内部工作原理和插件开发方法和技术:

  • 介绍MyBatis将理解解析和运行的原理。SqlSession施工方法,以及四大对象如何工作。
  • 介绍MyBatis的插件

实战应用

主要讲解MyBatis以下是一些实际场景:

  • 介绍MyBatis-Spring,解释如何进入。Spring项目中的集成MyBatis应用
  • 介绍MyBatis实际场景,选择一些典型场景,分析每个场景下开发者需要避免的一些错误和性能损失。

下一篇文章将介绍MyBatis相关配置,更好的配置MyBatis适用于不同的业务场景,以及为我们提供的扩展。

作者:Love Said
链接:https://juejin.im/post/5ab7bd11f265da23906bfbc5
来源:掘金
版权归作者所有。请联系作者以获得商业转载的授权,并注明非商业转载的来源。

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门