1)CRUD
① 返回插入的自增长主键
②Mybatis维护非自增长的主键值的插入
signed数据类型:表示有符号的数值,可以存储负数、0、正数
unsigned数据类型:表示无符号的数值,可以存储0、正数
2) 入参处理
如果传入的是对象,则直接#{对象的属性名}获取参数(常用)
如果传入的是Map,则直接通过#{map的key}获取参数
3) 入参处理源码
public Object getNamedParams(Object[] args) {
// names: {0=arg0, 1=arg1} args:[70,30]
final int paramCount = names.size();
if (args == null || paramCount == 0) {
return null;
} else if (!hasParamAnnotation && paramCount == 1) {
return args[names.firstKey()];
} else {
final Map<String, Object> param = new ParamMap<Object>();
int i = 0;
for (Map.Entry<Integer, String> entry : names.entrySet()) {
// 把names的value作为参数map的key
// 把names的key作为args数组下标取到的值作为参数map的value
param.put(entry.getValue(), args[entry.getKey()]);
// add generic param names (param1, param2, ...)
// genericParamName =param1,在参数map中一个值放了两个key:arg0 、 param1
final String genericParamName = GENERIC_NAME_PREFIX + String.valueOf(i + 1);
// ensure not to overwrite parameter named with @Param
if (!names.containsValue(genericParamName)) {
param.put(genericParamName, args[entry.getKey()]);
}
i++;
}
// {arg1=20, arg0=70, param1=70, param2=20}
return param;
}
}
4) #{}、${}的区别
5) JdbcType处理NULL值
6) 返回值类型
7) 映射规则
① 自动映射
② resultMap手动映射
8) 关联关系映射N-1
① 方式一:可以通过连接查询把另一张表中的字段在当前表对应的bean中添加普通属性进行映射即可
② 方式二:在N端bean中添加1端的对象
③ 方式三:association赋值
④ 方式四:分步查询
A、在N端只需根据id查询出外键列
B、在resultmap中配置关联属性,会把aid字段列的值传入select中的参数
C、定义1端根据id查询的对象
⑤ 延迟加载|懒加载策略
即当需要使用哪个对象时才向数据库发送sql请求
在分步查询中可以实现懒加载:
9) 关联关系映射1-N
① 通过collection标签指定集合属性
② 分步查询
A、在1端配置查询
B、在N端配置根据外键列查询的集合
③ 延迟加载
和N-1的一样,在全局配置好即可
④ 延迟加载的另一个属性