ORM框架篇

定义:

半封装半自动化的orm框架

流程&组件

Mybatis 核心组件/生命周期

SqlsessionFactoryBuilder|创建sqlsession|方法局部

SqlSessionFactory|创建sqlsession|应用的整个生命周期|单例

SqlSession|请求数据库处理事务|线程不安全

SQL Mapper|sqlsession事务之内|方法级别

源码流程:

序号

(重点类)Class

(重点的方法或者属性)Method/attr

获取数据源

1

SqlSessionFactoryBuilder

build

2

XMLConfigBuilder

parse

3

XMLConfigBuilder

parseConfiguration

4

XMLConfigBuilder

environmentsElement

5

TypeAliasRegistry

resolveAlias

执行mapper文件中的sql

6

XMLConfigBuilder

mapperElement

7

XMLMapperBuilder

parse

8

XMLMapperBuilder

configurationElement

9

XMLMapperBuilder

buildStatementFromContext

10

XMLStatementBuilder

parseStatementNode 

11

MapperBuilderAssistant

addMappedStatement

12

MappedStatement

 

操作sql

13

Configuration

newExecutor

14

BaseExecutor

Query

[

Key == id+offset+limit+sql

]

[

有:handleLocallyCachedOutputParameters

无:queryFromDatabase

]

DB<-->映射

15

ResultSetWrapper

attr中包含:columnNames/classNames

16

ResultSetWrapper

ResultSetMetaData

 

基础理论&常见面试题

>>xml中的标签

基础标签:

select/insert/update/delete

关联标签:

一对一:association

一对多:collection

判断标签:

if(场景应用:动态sql)

循环标签:

list(场景应用:批量添加)

>>mappers加载mapper

Mappers加载mapper文件有4种方式

Mappers标签->mapper标签中属性 1>resource/2>url/3>class

Mappers标签->4>package标签(优先级最高)

>>mapper中的设计模式

Builder模式|SqlSessionFactoryBuilder/

工厂模式|SqlSessionFactory/

单例模式|LogFactory/

代理模式|MapperProxy/

组合模式:/

模板方法模式|BaseExecutor

适配器模式/

装饰者模式/

迭代器模式|PropertyTokenizer/

>>mybatis中@param注解使用的四种场景

a方法有多个参数,需要 @Param 注解

b方法参数要取别名,需要 @Param 注解

c XML 中的 SQL 使用了 $ ,那么参数中也需要 @Param 注解

d动态 SQL

>>MyBatis中主键回填的两种实现方式
1>inser标签中添加:useGeneratedKeys/keyProperty属性
2>inser标签中嵌套selectKey标签

>>$#的区别

安全性:#可以防止sql注入

传参区别:$通过传入数据库对象

>>MyBatis中主键回填的两种实现方式
1>inser标签中添加:useGeneratedKeys/keyProperty属性
2>inser标签中嵌套selectKey标签

>>MyBatis的事务管理分为两种形式:
1>JdbcTransaction使用JDBC的事务管理机制
2>ManagedTransaction使用MANAGED的事务管理机制。让程序的容器如(JBOSS,Weblogic)来实现对事务的管理。

>>mybatis缓存

Mybatis默认情况下 只开启一级缓存而且不能关闭。是SqlSession级别的。

一级缓存最多缓存1024条sql。

二级缓存是指可以跨 SqlSession 的缓存。 是 mapper 级别的缓存

>>resultMap resultType 不能同时存在

工作经验部分:

>>Long,Date,BigDecimal类型的mapper.xml方法里,不使用XXX !=''

>>mybatis提示如下异常: apped Statements collection does not contain value for......
解决思路:
1、mapper.xml中没有加入namespace 
2、mapper.xml中的方法和接口mapper的方法不对应
3、mapper.xml没有加入到mybatis-config.xml中(即总的配置文件),例外:配置了mapper文件的包路径的除外 
4、mapper.xml文件名和所写的mapper名称不相同

>>参数 String  推荐加上toString()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值