草庐IT

MyBatis源码第一天

一、MyBatis解析全局配置文件1.MyBatis介绍MyBatis是一个持久层的ORM框架,使用简单,学习成本较低。可以执行自己手写的SQL语句,比较灵活。但是MyBatis的自动化程度不高,移植性也不高,有时从一个数据库迁移到另外一个数据库的时候需要自己修改配置,所以称只为半自动ORM框架。2.传统JDBC和Mybatis相比的弊病2.1传统JDC传统JDBC的问题如下:1.数据库连接创建,释放频繁造成资源的浪费,从而影响系统性能,使用数据库连接池可以解决问题。2.sql语句在代码中硬编码,造成代码的不易维护,实际应用中sql的变化可能较大,sql代码和java代码没有分离开来维护不方便

初始MyBatis,w字带你解MyBatis

目录一.什么是mybatismybatis的概念mybatis的优势二.mybatis相对于JDBC,框架帮我们做了哪些事情?三.对包含mybatis的程序进行实操1.创建项目2.修改配置文件3.准备数据库相关内容4.准备对应的xml文件和对应的mapper接口5.定义对应的sql语句6.准备对应的java类四.占位符五.多表查询一对多的映射我们引入具体的前后端交互的逻辑关系:一对一映射: 一对多的映射六.动态sql一.什么是mybatismybatis的概念MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。1、Mybatis是一个半ORM(对象关系映射)框架,底

Spring整合Mybatis源码剖析

Spring整合其他框架的核心思路:就是将其他框架生成的类放到Spring容器中。同理,Spring整合Mybatis也是让Mybatis生成的Mapper接口的代理对象作为Bean注册到Spring容器中。解决的核心问题:1)通过FactoryBean创建Mapper接口代理对象,并且指定构造方法参数为Mapper接口class,并且设置BeanDefinition.setAutowireMode(AUTOWIRE_BY_TYPE)。2)通过ImportBeanDefinitionRegistrar或者BeanDefinitionRegistryPostProcessor中创建的扫描器实现对

记录一个@DS注解切换数据源失败的原因

项目场景:一位好友在陈年老代码中想要加入mybatis-plus和boumidou的多数据源来轻松实现crud,但是发现@DS无法成功切换数据源,一直都是访问的主库,于是我开始了漫长的啃源码找原因。以下内容包含两个问题1:配置的数据库没有正常被dynamic框架载入,2:@DS注解切换数据源无效 问题排查过程第一个问题,数据源没有载入根据启动日志里druid打印的信息来看,只载入了一个数据库,并没有把yml配置信息中的两个数据库都加载,YML配置如下。 从源码来看,数据源的配置读取是在AbstractDataSourceProvider类中。 他的调用是在子类YmlDynamicDataSou

mybatis-generator-gui复合主键时生成实体类会两个,一个xxx和一个xxxKey,想生成一个怎么配置,配置方法。

今天使用mybatis-generator-gui生成实体类和mapper的时候,发现有一个表生成的实体类成了两个,其中一个叫XXXKey,另一个是表名对应的XXX,其中XXXKey中的字段是表中的几个主键,而XXX继承了XXXKey,并加上表里面除了主键的其他属性。但是这并不是我想要的效果,我只想生成一个实体类,怎么办呢?加一条配置就好。之前的mybatis-generator是在xml里面配置的,而这个项目是在类中配置的,该类如下:image.png其中增加的为下面这句:tableConfig.setConfiguredModelType("flat");这样生成的就只有XXX一个实体类了

MyBatis 动态SQL之<choose><when><otherwise>标签-

简介MyBatis中动态语句choose-when-otherwise类似于Java中的switch-case-default语句。由于MyBatis并没有为if提供对应的else标签,如果想要达到……的效果,可以借助、、来实现。语法choose>whentest="判断条件1">SQL语句1when>whentest="判断条件2">SQL语句2when>whentest="判断条件3">SQL语句3when>otherwise>SQL语句4otherwise>choose>hoose标签按顺序判断其内部when标签中的判断条件是否成立,如果有一个成立,则执行相应的SQL语句,choose执

MyBatis-Plus,MetaObjectHandler没生效,完美解决

Mybatisplus自动填充功能失效通过SpringBoot框架集成mybatis-plus首先导入需要的依赖 dependency>groupId>com.baomidougroupId>artifactId>mybatis-plus-boot-starterartifactId>version>3.3.2version>dependency>dependency>groupId>com.baomidougroupId>artifactId>mybatis-plus-generatorartifactId>version>3.3.2version>dependency>在appicati

Spring Boot:实现MyBatis动态创建表

在有些应用场景中,我们会有需要动态创建和操作表的需求。比如因为单表数据存储量太大而采取分表存储的情况,又或者是按日期生成日志表存储系统日志等等。这个时候就需要我们动态的生成和操作数据库表了。而我们都知道,以往我们使用MyBatis是需要提前生成包括Model,Mapper和XML映射文件的,显然因为动态生成和操作表的需求一开始表都是不存在的,所以也就不能直接通过MyBatis连接数据库来生成我们的数据访问层代码并用来访问数据库了。MyBatis提供了动态SQL,我们可以通过动态SQL,传入表名等信息然组装成建表和操作语句。本小节中实现的案例中每个用户都会有一个自己日志表,我们的设计思路就是在新

No Spring环境Mybatis-Plus批量插入并返回主键的两种方式

批量插入,可以把Mybatis-Plus看作是Mybatis加强版;故Mybatis中的相关操作都可以在Mybatis-Plus中使用;在mysql数据库中支持批量插入,所以只要配置useGeneratedKeys和keyProperty就可以批量插入并返回主键了。下面是批量插入的Dao层接口  一注解方式:   直接撸代码:  packageorg.jd.data.netty.big.window.chat.frame.ui.room.mapper;importcom.baomidou.mybatisplus.core.mapper.BaseMapper;importorg.apache.i

MyBatis-Plus执行SQL分析打印

一、说明1、本文资料来自MyBatis-Plus官网2、该功能依赖p6spy组件,完美的输出打印SQL及执行时长3.1.0以上版本3、示例工程二、操作步骤2.1p6spy依赖引入p6spyp6spy最新版本2.2application.yml配置spring:datasource:driver-class-name:com.p6spy.engine.spy.P6SpyDriverurl:jdbc:p6spy:h2:mem:test...2.3spy.properties配置#3.2.1以上使用modulelist=com.baomidou.mybatisplus.extension.p6spy