深入Mybatis框架

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

Python微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475

深入Mybatis框架

学习了Spring之后,我们已经了解如何将一个类作为Bean交由IoC容器管理,也就是说,现在我们可以通过更方便的方式来使用Mybatis框架,我们可以直接把SqlSessionFactory、Mapper交给Spring进行管理,并且可以通过注入的方式快速地使用它们。

因此,我们要学习一下如何将Mybatis与Spring进行整合,那么首先,我们需要在之前知识的基础上继续深化学习。

了解数据源

在之前,我们如果需要创建一个JDBC的连接,那么必须使用DriverManager.getConnection()来创建连接,连接建立后,我们才可以进行数据库操作。

而学习了Mybatis之后,我们就不用再去使用DriverManager为我们提供连接对象,而是直接使用Mybatis为我们提供的SqlSessionFactory工具类来获取对应的SqlSession通过会话对象去操作数据库。

那么,它到底是如何封装JDBC的呢?我们可以试着来猜想一下,会不会是Mybatis每次都是帮助我们调用DriverManager来实现的数据库连接创建?我们可以看看Mybatis的源码:

public SqlSession openSession(boolean autoCommit) {
    return this.openSessionFromDataSource(this.configuration.getDefaultExecutorType(), (TransactionIsolationLevel)null, autoCommit);
}

在通过SqlSessionFactory调用openSession方法之后,它调用了内部的一个私有的方法openSessionFromDataSource,我们接着来看,这个方法里面定义了什么内容:

private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {
    Transaction tx = null;

    DefaultSqlSession var8;
    try {
      	//获取当前环境(由配置文件映射的对象实体)
        Environment environment = this.configuration.getEnvironment();
      	//事务工厂(暂时不提,下一板块讲解)
        TransactionFactory transactionFactory = this.getTransactionFactoryFromEnvironment(environment);
      	//配置文件中:
      	//生成事务(根据我们的配置,会默认生成JdbcTransaction),这里是关键,我们看到这里用到了environment.getDataSource()方法
        tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
      	//执行器,包括全部的数据库操作方法定义,本质上是在使用执行器操作数据库,需要传入事务对象
        Executor executor = this.configuration.newExecutor(tx, execType);
      	//封装为SqlSession对象
        var8 = new DefaultSqlSession(this.configuration, executor, autoCommit);
    } catch (Exception var12) {
        this.closeTransaction(tx);
        throw ExceptionFactory.wrapException("Error opening session. Cause: " + var12, var12);
    } finally {
        ErrorContext.instance().reset();
    }
		
    return var8;
}

也就是说,我们的数据源配置信息,存放在了Transaction对象中,那么现在我们只需要知道执行器到底是如何执行SQL语句的,我们就知道到底如何创建Connection对象了,就需要获取数据库的链接信息了,那么我们来看看,这个DataSource到底是个什么:

public interface DataSource  extends CommonDataSource, Wrapper {

  Connection getConnection() throws SQLException;

  Connection getConnection(String username, String password)
    throws SQLException;
}

我们发现,它是在javax.sql定义的一个接口,它包括了两个方法,都是用于获取连接的。因此,现在我们可以断定,并不是通过之前DriverManager的方法去获取连接了,而是使用DataSource的实现类来获取的,因此,也就正式引入到我们这一节的话题了:

数据库链接的建立和关闭是极其耗费系统资源的操作,通过DriverManager获取的数据库连接,

一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完后立即关闭连接,频繁的打开、关闭连接会持续消耗网络资源,造成整个系统性能的低下。

因此,JDBC为我们定义了一个数据源的标准,也就是DataSource接口,告诉数据源数据库的连接信息,并将所有的连接全部交给数据源进行集中管理,当需要一个Connection对象时,可以向数据源申请,数据源会根据内部机制,合理地分配连接对象给我们。

一般比较常用的DataSource实现,都是采用池化技术,就是在一开始就创建好N个连接,这样之后使用就无需再次进行连接,而是直接使用现成的Connection对象进行数据库操作。

点击查看源网页

当然,也可以使用传统的即用即连的方式获取Connection对象,Mybatis为我们提供了几个默认的数据源实现,我们之前一直在使用的是官方的默认配置,也就是池化数据源:

<dataSource type="POOLED">
      <property name="driver" value="${driver}"/>
      <property name="url" value="${url}"/>
      <property name="username" value="${username}"/>
      <property name="password" value="${password}"/>
    dataSource>

一共三个选项:

  • UNPOOLED 不使用连接池的数据源
  • POOLED 使用连接池的数据源
  • JNDI 使用JNDI实现的数据源

解读Mybatis数据源实现

那么我们先来看看,不使用池化的数据源实现,它叫做UnpooledDataSource,我们来看看源码:

public class UnpooledDataSource implements DataSource {
    private ClassLoader driverClassLoader;
    private Properties driverProperties;
    private static Map registeredDrivers = new ConcurrentHashMap();
 private String driver;
 private String url;
 private String username;
 private String password;
 private Boolean autoCommit;
 private Integer defaultTransactionIsolationLevel;
 private Integer defaultNetworkTimeout;

首先这个类

python调用Mybatis Python中调用MyBatis时,需要先创建MyBatis客户端对象,然后使用该对象执行SQL查询或插入、更新、删除等操作。在Python中调用MyBatis之前,需要先编写MyBatis映射文件,该文件描述了如何将数据库表中的数据映射到Python对象上。在Python中调用MyBatis之前,需要先配置MyBatis的连接信息,包括数据库连接信息、MyBatis配置文件的位置等。您可以根据您的实际情况修改示例代码,例如使用不同的Mapper方法、插入、更新或删除数据等。 阅读详情

相关推荐

告别原生SQL!手把手教你用Python+MyBatis实现ORM映射(附完整配置示例)

本文详细介绍了如何在Python项目中集成MyBatis,实现ORM映射以替代繁琐的原生SQL开发。通过环境搭建、核心配置、XML映射文件编写及Python代码调用的完整示例,展示了如何清晰分离SQL与业务逻辑,提升代码可维护性和开发效率,特别适合对SQL有精细控制需求的场景。

grafana8visual的博客 203

python实现的mybatis实体生成工具

需要安装python2.7和MySQLdb,可以自动生成实体类和对应的xml文件,包含增删改查基本操作

MybatisMybatis-plus框架

3、PageHelper插件:引入依赖、开启分页(PageHelper.startPage(pageNum,pageSize))、分装结果(PageInfo<~> pageInfo = new PageInfo<>(结果对象))通过XML或注解的方式将statement配置起来,用java对象与动态参数进行映射形成最终的执行语句,由Mybatis执行SQL语句,并将结果映射为java对象。半ORM(对象关系映射)框架,内部封装JDBC,只需关注SQL,严格控制SQL执行性能,灵活性高。

weixin_51877265的博客 1652

python有类似mybatis框架_【MyBatisMyBatis入门

1、MyBatis简介MyBatis是这个框架现在的名字,而此框架最早的名字是IBatis,其名字的含义是“internet”、“abatis”两个单词的组合,是在2002年的时候开始的一个开源项目,在2010年6月16日Apache将项目交与Google进行管理,更名MyBatis。所以2010年之后,MyBatis框架逐渐成为主流,比Hibernate发展更快。IBatis和MyBatis两者...

weixin_39917811的博客 4775

Python版的Mybatis ORM:mybatis-py(类似javamybatis

python版的mybatis,类似javamybatis,可以用装饰器或者xml文件来定义函数

moontourse的博客 3200

MyBatis 框架

使用sqlSession.commit()提交事务,是因为在连接池中取出的连接,都会将调用connection.setAutoCommit(false)方法,这样我们就必须使用sqlSession.commit()方法,相当于使用了JDBC中的connection.commit()方法实现事务提交。代表占位符,类似jdbc中的?框架是我们使用软件开发中的一套解决方案,不同的框架能解决不同的问题,在框架中封装了很多的细节,使开发者可以使用极为简便的方式实现功能,大大的提升了开发的效率。

2501_90255619的博客 4818

Mybatis框架的学习

MyBatis 是一款优秀的框架,它支持定制化以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

zhujuanlideyang7的博客 1615

mybatis框架

MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github。MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发。它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

2401_85217463的博客 2076

Mybatis框架

频繁创建和打开、关闭数据连接,太消耗资源Sql语句存在硬编码,不利于维护Sql参数设置硬编码,不利于维护结果集获取与遍历复杂,存在硬编码,不利于维护,期望能够查询后返回一个java对象。

qq_64011014的博客 1207

造个轮子之实现python-mybatis和SqlTemplate

py_mybatis pythonmybatis实现 python的SqlTemplate实现 项目起源 特别鸣谢:mybatis-mapper2sql 借助这位大佬使我快速实现了py_mybatis,mapper xml解析主体代码都是 hhyo大佬的 本人是位javaer,刚刚开始学习python,当开始学习数据库相关api时,发现python中并未有很好的开发包, 重型orm 直接淘汰,不要问为什么,问就是我喜欢写sql,虽然sql写的不咋的 急需一种轻型的,开箱即用的类似mybatis开发

都市桃源 6496

【亲测免费】 PyMyBatis 使用指南

PyMyBatis 使用指南 项目介绍 PyMyBatis 是一个基于 PythonMyBatis 实现,旨在提供类似于 JavaMyBatis 的轻量级、开箱即用的 ORM 解决方案。它允许开发者通过 XML 或注解方式定义 SQL 映射,从而在享受 Python 的灵活性的同时,维持对复杂 SQL 查询的控制力。项目灵感来源于 mybatis-mapper2sql,核心解析逻辑借鉴...

gitblog_00936的博客 925

pythonjava实现api接口提供(二)

前言 上一章,我学习到建自己的业务模块了,今天我们继续学习,djangoAdmin的使用,配置自己的业务后端界面,以及提供python接口供调用 一、models.py与数据库表 上一张讲到我们自己的业务模块时通过命令执行,一次性建立的,相关py文件就都生成了。那么现在怎么补充models.py的内容呢? 先说正向生成: 正向生成(models.py生成/更新表) 1、将app加到settings的INSTALLED_APPS里 打开Terminal命令框,执行命令 2、执行:python manage

zwrlj527的专栏 2898

python有类似mybatis框架_框架学习之Mybatis学习(三)

系列文章目录第三章 Mybatis映射器方式的增删改查前言Mybatis原始的增删改查操作在第一、二章的时候已经介绍过了,本文重点介绍Mybatis映射器接口方式的增删改查。在使用映射器接口方式的时候,建议安装Free Mybatis插件。一、通过映射器接口实现添加首先创建一个接口类UserMapper,子配置文件UserMapper.xml和主函数UserMapperTest,将子配置文件和主配...

weixin_42506884的博客 2199

Python与MySQL交互

select cate_name from goods group by cate_name;select round(avg(price),2) as avg_price from goods;select cate_name,avg(price) from goods group by cate_name;select cate_name,max(price),min(price),avg(price),count(* ) from goods group by cate_name;select id,

2401_84048521的博客 507
上一篇: 聊聊第一个开源项目(内网穿透) - CProxy
下一篇: 使用kind快速搭建本地k8s集群
pythonxxoo
博客等级 码龄5年 337粉丝 670原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值