MyBatis第一讲:MyBatis 基础知识到源码分析
MyBatis 是支持定制化 SQL、存储过程以及高级映射的持久层框架。MyBatis 使用 XML 或注解来配置和映射基本体,将接口和 Java 的 POJO(普通的 Java 对象)映射成数据库中的记录。我们公司团队持久层也是使用MyBatis,结合 MyBatisCodeHelperPro 插件提升开发效率,本文是MyBatis第一讲,介绍了 MyBatis 的一些基本特性及原理剖析,可以作为日常开发指南或面试指导而学习。
文章目录
-
- MyBatis第一讲:MyBatis 基础知识到源码分析
- Action1:Mybatis 能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别。
- Action1:Mybatis 执行批量插入,能返回数据库主键列表吗?
-
-
- 4.3、映射文件-insert-Oracle使用序列生成主键演示
- 4.4、映射文件-insert-获取非自增主键的值-selectKey
- 4.5、映射文件-参数处理-单个参数&多个参数&命名参数
- 4.6、映射文件-参数处理-POJO&Map&TO
- 4.7、映射文件-参数处理-参数封装扩展思考
- 4.8、源码分析-参数处理-参数封装map的过程
- 4.9、映射文件-参数处理-#与$取值区别
- 4.10、映射文件-参数处理-#取值时指定参数相关规则
- 4.11、映射文件-select-返回List
- 4.12、映射文件-select-记录封装map
- 4.13、映射文件-select-resultMap-自定义结果映射规则
- 4.14、映射文件-select-resultMap-关联查询-环境搭建
- 4.14、映射文件-select-resultMap-关联查询-级联属性封装结果
- 4.15、映射文件-select-resultMap-关联查询-association定义关联对象封装规则
- 4.16、映射文件-select-resultMap-关联查询-association分步查询
- 4.17、映射文件-select-resultMap-关联查询-分步查询&延迟加载
-
- Action1:Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
- Action1:需要查询的字段为json类型数据,如何查询?
- Action2:Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
- Action3:mybatis multi-statement not allow问题解决
- Action1:MyBatis 是否可以映射 Enum 枚举类?
-
- 7、简述 Mybatis 的插件(plugin)运行原理,以及如何编写一个插件。
- 8、Mybatis映射文件中,如果A标签通过include引用了B标签的内容,请问,B标签能否定义在A标签的后面,还是说必须定义在A标签的前面?
- 10、简述Mybatis的Xml映射文件和Mybatis内部数据结构之间的映射关系?
- 11、Mybatis 如何将对象转换成 SQL? 阿里 (7分)
- 12、MyBatis upset 用法
- 13、MyBatis的缓存机制?(招银网络科技)
- 14、MyBatis和Jdbc的区别?(浙商银行)
- 15、MyBatis批量操作(可以通过通用Mapper或逆向工程来创建)
- 16、Spring整合mybatis?
- 17、SpringBoot + MyBatis 实现读写
- 18、MyBatis-代码生成器
- Action1、在表查询中,一律不要使用 * 来查询字段列表,需要哪些字段必须明确写明
- Action2、POJO类的布尔属性不能加is,而数据库字段必须加is_,要求在resultMap中进行字段与属性之间的映射
- Action3、不要用 resultClass 当返回参数,即使所有类属性名与数据库字段一一对应,也需要定义< resultMap>;反过来,每一个表也必然有一个 < resultMap>与之对应
- Action4、sql.xml 配置参数使用: #{}, #param# 不要使用 ${} 此种方式容易出现 SQL 注入
- Action5、MyBatis自带的 queryForList(String statement, int start, int size)不推荐使用
- Action6、不允许直接拿 HashMap 与HashTable 作为查询结果集的输出
- Action7、更新数据表记录时,必须同时更新记录对应的 gmt_modified 字段值为当前时间。
- Action8、不要写一个大而全的数据更新接口,传入为POJO类,不管是不是自己的目标更新字段,都进行`update table set c1= value1,c2= value2, c3 = value3;` 这是不对的。执行SQL时,不要更新无改动的字段,一是易出错;二是效率低;三是增加binlog存储。
- Action9、`@Transactional` 事务不要滥用,事务会影响数据库的QPS,另外使用事务的地方需要考虑各方面的回滚方案,包括缓存回滚、搜索引擎回滚、消息补偿、统计修正等、
- Action10、`<isEqual>`中的 compareValue 是与属性值对比的常量,一般为数字,表示相等时带上此条件:`<isNotEmpty>`表示不为空且不为 null时执行;`<isNotNull>` 表示不为null值时执行
- Action11、mybatis拦截器动态代理底层怎么找到XML,怎么执行sql
- Action12、问题描述`org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: The expression 'userIdList' evaluated to a null value`
- Action13、Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6
- Action14、Cause: java.sql.SQLException: Can't find FULLTEXT index matching the column list
- Action15、MyBatis层检查大结果集返回
1、如何学习 MyBatis?(版本MyBatis-3.4.1)
1、什么是 MyBatis?
- ①MyBatis 是支持定制化 SQL、存储过程以及高级映射的持久层框架。MyBatis 使用 XML 或注解来配置和映射基本体,将接口和 Java 的 POJO(PlainOldJava Objects,普通的 Java 对象)映射成数据库中的记录。
- ②MyBatis-plus 2.1.5:非常强大的 MyBatis 增强工具包,只做增强不做改变,在不用编写任何 SQL 语句的情况下即可以极其方便的实现单一、批量、分页等操作;集成 Mybatis-Plus、通用 CRUD、En