MyBatis详细源码解析(上篇)】的更多相关文章

前言 我会一步一步带你剖析MyBatis这个经典的半ORM框架的源码! 我是使用Spring Boot + MyBatis的方式进行测试,但并未进行整合,还是使用最原始的方式. 项目结构 导入依赖: mybatis:mybatis mysql-connector-java:mysql-connector-java Payment表: Payment实体类: @Data public class Payment implements Serializable { private Integer i…
一.SqlSessionFactory 对象初始化 //加载全局配置文件 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); //1.获取SqlSessionFactory对象 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(…
最近在项目中,使用springmvc 进行上传文件时,出现了一个问题: org.springframework.web.multipart.MultipartException: The current request is not a multipart request .... 以上堆栈信息省略. 乍看一下,没啥值得讨论的地方,就是说当前这个请求不是一个multipart request,也就是说不是上传文件的请求.但是,这结果还是令我稍感意外,为什么呢?因为,我本意是将文件这个参数作为非必…
锁机制学习笔记 目录: CAS的意义 锁的一些基本原理 ReentrantLock的相关代码结构 两个重要的状态 I.AQS的state(int类型,32位) II.Node的waitStatus 获取锁(AQS)的流程 I.获取锁总操作 II.tryAcquire(尝试获取锁) III.添加到等待队列 IIII.自旋请求锁 IIIII.释放锁 JUC的并发包功能强大,但也不容易理解,大神果然是用来膜拜的.经过一段时间的研究和理解,我把自己所了解的关于JUC中锁的相关知识整理下来,一方面给自己做…
四.MyBatis 查询实现 Employee empById = mapper.getEmpById(1); 首先会调用MapperProxy的invoke方法 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (Object.class.equals(method.getDeclaringClass())) { try { return method…
1.ForEachSqlNode mybatis的foreach标签可以将列表.数组中的元素拼接起来,中间可以指定分隔符separator <select id="getByUserId" resultMap="BaseMap"> select <include refid="BaseFields"></include> from user <where> user_id in <foreac…
As you may already know, to use MyBatis with Spring you need at least an SqlSessionFactory and at least one mapper interface. MyBatis-Spring-Boot-Starter will: Autodetect an existing DataSource. Will create and register an instance of a SqlSessionFac…
目录 Condition的概念 大体实现流程 I.初始化状态 II.await()操作 III.signal()操作 3个主要方法 Condition的数据结构 线程何时阻塞和释放 await()方法 signal()和signalAll()方法 Condition示例:生产者和消费者 JUC提供了Lock可以方便的进行锁操作,但是有时候我们也需要对线程进行条件性的阻塞和唤醒,这时我们就需要condition条件变量,它就像是在线程上加了多个开关,可以方便的对持有锁的线程进行阻塞和唤醒. Con…
三.getMapper获取接口的代理对象 1.先调用DefaultSqlSession的getMapper方法.代码如下: @Override public <T> T getMapper(Class<T> type) { return configuration.<T>getMapper(type, this); } 2.实际上是调用了configuration的getMapper方法.具体代码如下: public <T> T getMapper(Clas…
二.获取SqlSession对象 1.首先调用DefaultSqlSessionFactory 的 openSession 方法,代码如下: @Override public SqlSession openSession() { //configuration.getDefaultExecutorType 是调用configuration的Executor执行器的类型,默认simple return openSessionFromDataSource(configuration.getDefau…