
Mybatis
文章平均质量分 67
Mybatis
白鸽呀
这个作者很懒,什么都没留下…
展开
-
Mybatis源码剖析之插件interceptor执行原理
预读mybatis通过插件 对(Executor、StatementHandler、ParameterHandler、ResultSetHandler) 这四个 核心对象创建代理进行拦截对mybatis来说插件就是拦截器,用来增强核心对象的功能,增强功能本质上是借助于底层的 动态代理实现的,换句话说,MyBatis中的四大对象都是代理对象Mybatis核心对象介绍MyBatis的主要的核心部件有以下几个:Configuration 初始化基础配置,比如MyBatis的别名等,一些重要的类型对象原创 2022-01-17 17:24:18 · 1066 阅读 · 0 评论 -
Mybaits源码剖析之自定义插件interceptor
预读我们知道插件默认对Executor,StatementHandler,ParameterHandler,ResultSetHandler 进行拦截.对mybatis来说插件就是拦截器,用来增强核心对象的功能,增强功能本质上是借助于底层的 动态代理实现的,换句话说,MyBatis中的四大对象都是代理对象Mybatis所允许拦截的方法如下:执行器Executor (update、query、commit、rollback等方法);SQL语法构建器StatementHandler (pre原创 2022-01-17 16:11:26 · 414 阅读 · 0 评论 -
Mybatis源码剖析之二级缓存
序言mybatis默认开启一级缓存,一级缓存存在于Executor中,而executor存在于sqlSession中,因此一级缓存可以当作在sqlSession生命周期中。与一级缓存不同,二级缓存和具体的命名空间绑定,一个Mapper中有一个Cache,相同Mapper中的MappedStatement共用一个Cache,一级缓存则是和 SqlSession 绑定。准备启用二级缓存1、开启全局二级缓存配置:<settings><setting name="cacheEnabl原创 2022-01-15 16:10:01 · 472 阅读 · 0 评论 -
Mybatis源码剖析之Mybatis执行流程(proxy 代理)
预读Mybatis在设计上,分为三层:接口层,数据处理层,框架支持层在接口层中,分为传统模式:通过sqlSession + statementId。接口代理模式:sqlSession+mapper接口准备<configuration> <!--加载外部的properties文件--> <properties resource="jdbc.properties"></properties> <!--开启全局的二级原创 2022-01-15 14:48:09 · 607 阅读 · 0 评论 -
mybatis源码剖析之typeAlias类型别名
mybatis默认定义了许多的类型别名,用来简化mapper.xml的编写从mybatis执行流程分析可知,typeAlias是mybatis解析核心配置文件的时候封装的过程分析1、通过classLoader 读取核心配置文件 为输入流注意:只要是流,底层就是数组,那么就存在两个指针 一个position指向数组存储元素的后一个节点,一个limit指向尾节点2、解析配置文件,封装Configuration对象 创建DefaultSqlSessionFactory对象通过XMLCon原创 2022-01-15 13:56:00 · 456 阅读 · 0 评论 -
Mybatis源码剖析之Mybatis执行流程(传统方式)
预读Mybatis在设计上,分为三层:接口层,数据处理层,框架支持层在接口层中,分为传统模式:通过sqlSession + statementId。接口代理模式:sqlSession+mapper接口准备userMapper.xmlmybatis核心配置文件<configuration> <!--加载外部的properties文件--> <properties resource="jdbc.properties"></prop原创 2022-01-15 11:59:25 · 436 阅读 · 0 评论 -
Mybatis源码剖析之Mybatis架构设计以及核心组件作用
架构设计核心组件作用原创 2022-01-14 10:40:04 · 186 阅读 · 0 评论 -
Mybatis面试题
MyBatis简介MyBatis是什么?MyBatis 是一款优秀的持久层框架,一个半 ORM(对象关系映射)框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。ORM是什么ORM(Object Relational Mapping),对转载 2021-08-11 11:17:21 · 1004 阅读 · 0 评论 -
mybatis逆向生成
mybatis逆向生成generatorConfig.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd原创 2021-03-23 11:32:34 · 518 阅读 · 0 评论 -
mybatis @Param
@Param作用:用注解来简化xml配置的时候(比如Mybatis的Mapper.xml中的sql参数引入),@Param注解的作用是给参数命名,参数命名后就能根据名字得到参数值,正确的将参数传入sql语句中(一般通过#{}的方式,${}会有sql注入的问题)。实例说明:1,使用@Param注解Mapper接口方法: public int getUsersDetail(@Param("userid") int userid);对应Sql Mapper.xml文件: <select id原创 2021-03-23 11:15:44 · 366 阅读 · 0 评论 -
mybatis 查询方式 与效率高低
<!-- 一对一关联查询 select s.id,s.name,s.age,t.name tname from student s,teacher t where s.tid=t.id; --> <!-- 关联的嵌套 Select 查询 问题: 这种方式虽然很简单,但在大型数据集或大型数据表上表现不佳。这个问题被称为“N+1 查询问题”。 概括地讲,N+1 查询问题是这样子的: 你执原创 2021-03-04 22:18:18 · 1739 阅读 · 1 评论 -
Result Maps collection already contains value for xxx
mybatis逆向工程问题Caused by: java.lang.IllegalArgumentException: Result Maps collection already contains value for com.xiaoxu.blog.mapper.CategoryMapper.BaseResultMap at org.apache.ibatis.session.Configuration$StrictMap.put(Configuration.java:872) ~[mybatis原创 2021-03-04 22:06:18 · 260 阅读 · 1 评论 -
mybatis拦截器实现原理
原文https://blog.youkuaiyun.com/weixin_39494923/article/details/91534658一.背景在很多业务场景下我们需要去拦截sql,达到不入侵原有代码业务处理一些东西,比如:分页操作,数据权限过滤操作,SQL执行时间性能监控等等,这里我们就可以用到Mybatis的拦截器Interceptor二.Mybatis核心对象介绍从MyBatis代码实现的角度来看,MyBatis的主要的核心部件有以下几个:Configuration 初始化基础配置,比如MyBat转载 2021-03-04 22:01:26 · 1736 阅读 · 1 评论 -
mybatis自定义的拦截器,进行分页,会存在并发问题
mybatis自定义的拦截器,会存在并发问题,需要加锁import org.apache.ibatis.executor.parameter.ParameterHandler;import org.apache.ibatis.executor.statement.StatementHandler;import org.apache.ibatis.mapping.BoundSql;import org.apache.ibatis.mapping.MappedStatement;import org.原创 2021-03-04 21:57:16 · 621 阅读 · 3 评论