parent
40b79677cc
commit
96bca6eace
@ -0,0 +1,101 @@
|
||||
# sqlCommand
|
||||
- `org.apache.ibatis.binding.MapperMethod.SqlCommand`
|
||||
```java
|
||||
/**
|
||||
* 核心内容: sql id , Sql 类型
|
||||
*/
|
||||
public static class SqlCommand {
|
||||
|
||||
/**
|
||||
* sql id
|
||||
*/
|
||||
private final String name;
|
||||
/**
|
||||
* sql 类型select|update|delete|insert|...
|
||||
*/
|
||||
private final SqlCommandType type;
|
||||
|
||||
/**
|
||||
* 根据传递的参数 设置sql的一些属性 , sql id , type .
|
||||
*
|
||||
* @param configuration
|
||||
* @param mapperInterface
|
||||
* @param method
|
||||
*/
|
||||
public SqlCommand(Configuration configuration, Class<?> mapperInterface, Method method) {
|
||||
// 方法名
|
||||
final String methodName = method.getName();
|
||||
final Class<?> declaringClass = method.getDeclaringClass();
|
||||
// Statement 实质是sql
|
||||
MappedStatement ms = resolveMappedStatement(mapperInterface, methodName, declaringClass,
|
||||
configuration);
|
||||
if (ms == null) {
|
||||
if (method.getAnnotation(Flush.class) != null) {
|
||||
name = null;
|
||||
type = SqlCommandType.FLUSH;
|
||||
} else {
|
||||
throw new BindingException("Invalid bound statement (not found): "
|
||||
+ mapperInterface.getName() + "." + methodName);
|
||||
}
|
||||
} else {
|
||||
name = ms.getId();
|
||||
type = ms.getSqlCommandType();
|
||||
if (type == SqlCommandType.UNKNOWN) {
|
||||
throw new BindingException("Unknown execution method for: " + name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public SqlCommandType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mapperInterface mapper.class
|
||||
* @param methodName 方法名
|
||||
* @param declaringClass 可能是 mapper.class
|
||||
* @param configuration
|
||||
* @return
|
||||
*/
|
||||
private MappedStatement resolveMappedStatement(Class<?> mapperInterface, String methodName,
|
||||
Class<?> declaringClass, Configuration configuration) {
|
||||
// 接口名称+方法名
|
||||
String statementId = mapperInterface.getName() + "." + methodName;
|
||||
if (configuration.hasStatement(statementId)) {
|
||||
// 从 configuration 获取
|
||||
return configuration.getMappedStatement(statementId);
|
||||
} else if (mapperInterface.equals(declaringClass)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// new 一个新的实例
|
||||
for (Class<?> superInterface : mapperInterface.getInterfaces()) {
|
||||
if (declaringClass.isAssignableFrom(superInterface)) {
|
||||
MappedStatement ms = resolveMappedStatement(superInterface, methodName,
|
||||
declaringClass, configuration);
|
||||
if (ms != null) {
|
||||
return ms;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
|
||||
![image-20191218191512184](/images/mybatis/image-20191218191512184.png)
|
||||
|
||||
|
||||
|
||||
![image-20191218191550550](/images/mybatis/image-20191218191550550.png)
|
||||
|
||||
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 140 KiB |
After Width: | Height: | Size: 99 KiB |
Loading…
Reference in new issue