mybatis mysql 调用存储过程 多个返回值_MyBatis框架原理分析

c3f3fa9b04a04608fc4ae76d21bfb708.png

MyBatis简介

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)
当前,最新版本是MyBatis 3.5.4 ,其发布时间是2020年2月4日

1.Mybatis开源免费框架.原名叫iBatis,2010在googlecode,2013年迁移到github
2.作用:数据访问层框架、底层是对JDBC的封装
3.mybatis优点之一
使用mybatis时不需要编写实现类,只需要写需要执行的sql命
4.框架:软件的半成品.未解决问题制定的一套约束,在提供功能基础上进行扩充.
5.框架中一些不能被封装的代码(变量),需要使用框架者新建一个xml文件,在文件中添加变量内容.
5.1需要建立特定位置和特定名称的配置文件.
5.2需要使用xml解析技术和反射技术.
6.常用概念
6.1类库:提供的类没有封装一定逻辑.
举例:类库就是名言警句,写作文时引入名言警句
6.2框架:区别与类库,里面有一些约束.
举例:框架是填空题

环境搭建详解1.全局配置文件中内容
1.1<transactionManager/>type属性可取值
1.1.1JDBC,事务管理使用JDBC原生事务管理方式
1.1.2MANAGED把事务管理转交给其他容器.原生JDBC事务
setAutoMapping(false);
1.2<dataSouce/>type属性
1.2.1POOLED使用数据库连接池
1.2.2UNPOOLED不实用数据库连接池,和直接使用JDBC一样
1.2.3JNDI:java命名目录接口技术.

f5252509baadff88cb8aa4ea3924e842.png

数据库连接池1.在内存中开辟一块空间,存放多个数据库连接对象.
2.JDBCTomcatPool,直接由tomcat产生数据库连接池.
3.1active状态:当前连接对象被应用程序使用中
3.2Idle空闲状态:等待应用程序使用MyBatis的配置

MyBatis框架和其他绝大部分框架一样,需要一个配置文件,其配置文件大致如下:

<?

MyBatis的主要成员

  • Configuration
    MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中
  • SqlSession
    作为MyBatis工作的主要顶层API,表示和数据库交互时的会话,完成必要数据库增删改查功能
  • Executor
    MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
  • StatementHandler
    封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数等
  • ParameterHandler
    负责对用户传递的参数转换成JDBC Statement 所对应的数据类型
  • ResultSetHandler
    负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
  • TypeHandler
    负责java数据类型和jdbc数据类型(也可以说是数据表列类型)之间的映射和转换
  • MappedStatement
    MappedStatement维护一条<select|update|delete|insert>节点的封装
  • SqlSource
    负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
  • BoundSql
    表示动态生成的SQL语句以及相应的参数信息

以上主要数据库操作基本都会涉及,在SQL操作中重点需要关注的是SQL参数何时被设置以及结果集怎么转换为JavaBean对象,这两个过程正好对应StatementHandler和ResultSetHandler类中的处理逻辑。

MyBatis 实现新增

1. 概念复习

1.1 功能:从应用程序角度出发,软件具有哪些功能.
1.2 业务:完成功能时的逻辑.对应 Service 中一个方法
1.3 事务:从数据库角度出发,完成业务时需要执行的 SQL 集合,统 称一个事务.
1.3.1 事务回滚.如果在一个事务中某个 SQL 执行事务,希望回 归到事务的原点,保证数据库数据的完整性.

2. 在 mybatis 中默认是关闭了 JDBC 的自动提交功能
2.1 每一个 SqlSession 默认都是不自动提交事务.
2.2 session.commit()提交事务.
2.3 openSession(true);自动提交.setAutoCommit(true);

3. mybatis 底层是对 JDBC 的封装.
3.1 JDBC 中 executeUpdate()执行新增,删除,修改的 SQL.返回值 int, 表示受影响的行数.
3.2 mybatis 中<insert> <delete> <update>标签没有 resultType 属性, 认为返回值都是 int4. 在 openSession()时 Mybatis 会创建 SqlSession 时同时创建一个 Transaction(事务对象),同时 autoCommit 都为 false

4.1 如果出现异常,应该 session.rollback()回滚事务.

5. 实现新增的步骤
5.1 在 mapper.xml 中提供<insert>标签,标签没有返回值类型

<

5.2 通过 session.insert()调用新增方法

int 

d3fe9058edbf67ed11c38e5034fb0d6d.png

MyBatis 实现修改

1. 在 mapper.xml 中提供<update>标签

<

2. 编写代码

People 

mybatis 实现删除

1. 在 mapper.xml 提供<delete>标签

<delete id="del" parameterType="int"> 
delete from people where id = #{0} 
</delete> 

2. 编写代码

int 

关注24小时编程自习室,一起学习吧

欢迎留言讨论哦

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值