首页 > 编程知识 正文

java内存机制,java事务的四大特性

时间:2023-05-04 19:58:54 阅读:175659 作者:1932

MyBatis是Apache下的开源项目,原名iBatis。 之后,为了转移项目管理平台,改名为MyBatis。 MyBatis是使用配置文件动态管理SQL语句,包括输入输出型映射、数据库连接池配置的持久层框架。

1、MyBatis 整体架构

MyBatis包含数据源配置文件、SQL映射配置文件、会话工厂、会话、执行器和底层封装对象。

包含选择、更新和插入标记的SQL映射文件。 parameterType指定输入参数类型,resultType指定返回类型。

resultMap用于定义包含其他Bean的复杂Java Bean对象,并与association、collection结合使用以实现多表关联。

2、MyBatis 运行流程

从资源负载类中读取MyBatis全局配置文件mybatis-config.xml,生成SqlSessionFactory会话工厂,会话工厂为SqlSession会话在Executor界面内部,封装依赖于MappedStatement的基础封装对象,即SQL语句ID、输入参数和输出结果类型的映射信息。

3、MyBatis 基本执行器

基本执行机构有三种:简单执行机构、资源执行机构和batch执行机构,默认为简单执行机构。

打开一个从未执行过SimpleExecutor、简单执行器或select/update语句的Statement对象,使用完毕后立即关闭。

ReuseExecutor,可复用的执行器。 缓存同一sql的语句对象(如果存在,则使用),如果不存在,则创建它,使用后不关闭,供下次使用。

将BatchExecutor、用于运行更新的批处理效应器和所有sql添加到批处理中并等待批量运行。

如果执行器是SimpleExecutor和ReuseExecutor,则可以使用insert、update和delete方法的返回值来确定sql执行是否成功。 0表示执行失败,非零表示sql执行所影响的条目数。

对于BatchExecutor,这三种方法返回的结果值为-2147482646,不能用于确定sql语句是否成功执行。

4、MyBatis 插件

在MyBatis中,针对某种方法的呼叫监听结构成为插件,允许监听方法的接口有: Executor、ParameterHandler、ResultSetHandler、ststate

要实现plugin,必须继承Interceptor接口,并为需要侦听的方法(如mybatis-plus提供的PaginationInterceptor分页插件)创建签名。

@ intercepts ({ @ signature (type=statement handler.class,method='prepare ',args={Connection.class, integer.class } }在注册publicclasspaginationinterceptorextendsabstractsqlparserhandlerimplementsinterceptor { }后,注册此插件

5、MyBatis 高级映射及延迟加载

主要用于多表的相关查询时,可以通过首先查询表,根据需要进行相关表的查询,通过延迟加载提高查询的效率。

关联、集合具有延迟加载功能,使用时必须打开延迟加载功能。 在Spring Boot中设置以下属性:

my batis :配置:启用的:真#延迟加载aggressive-lazy-loading 3360故障#按需加载http://ww3358

MyBatis提供l1缓存和l2缓存机制,MyBatsi默认支持l1缓存。

1 )一级缓存

一级缓存是SqlSession级别的缓存,每个SqlSession类实例对象内部都有用于存储缓存数据的HashMap数据结构,执行commit操作时一级缓存空间将为空

如果在查询缓存数据之前执行了某些操作(如添加或删除),SqlSession实例将清空其一级缓存空间。

2 )二级高速缓存

二级缓存是映射器级别的缓存,跨越SQL会话。 当多个SqlSession类的对象操作同一Mapper配置文件中的SQL语句时,将共享一个Mapper缓存。 SqlSession类的实例对象首先查询Mapper的缓存区域,如果不存在,则检查数据库,将结果放置在缓存区域中,然后在下次查询同一数据时直接从缓存区域中提取。 当SqlSession类的实例对象执行添加或删除等操作时,Mapper实例将清空次缓存。

6、MyBatis 缓存

实现Mapper动态代理需要遵守某些开发规范。 这样,只需创建DAO层接口和相应的Mapper映射文件,交互方式由MyBatis框架完成,开发更加简单。

接口中的方法名称、参数和返回类型与Mapper映射文件中定义的id、输入类型和输出类型相同,只需指定映射文件中的namespace为Mapper接口路径即可。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。