Mybatis mapper取得sql
今日は少し時間をかけて、ネットでmybatisを探してsqlを実行するツールクラスを取得して、ツールクラスが上手だと思っています.sqlを取得する目的は非同期のインポートエクスポートを行うことであり、ページがインポートエクスポートをクリックすると、ページのパラメータとバックグラウンドmybaitisが実行するsqlを組み合わせて完全な実行sql入庫を行い、もう1つのサービスはこのsqlを読み込んでインポートエクスポートに関する操作を行う.メッセージ・サービスの基礎がすでにある場合、この2つのサービスは、メッセージ・ミドルウェアを介して通信することができる.ページインポートエクスポート時には、sqlを保存してメッセージを別のサービスに送信し、インポートエクスポートサービスはメッセージ実行処理を受け取り、完了後にメッセージでページにフィードバックし、インポートサービスはインポート成功かどうか、エクスポートサービスはダウンロードファイルを生成するリンクを実行し、ページにフィードバックする.
上は2つの主要な実装mybatis実行sqlのコードを取得して、ネット上で検索して、ここは作者に感謝して、私は原文のリンクを貼るのを忘れて、後ろは補充することを覚えていて、ほほほ.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MyBatisSql {
/**
* sql
*/
private String sql;
/**
*
*/
private Object[] parameters;
public void setSql(String sql) {
this.sql = sql;
}
public String getSql() {
return sql;
}
public void setParameters(Object[] parameters) {
this.parameters = parameters;
}
public Object[] getParameters() {
return parameters;
}
@Override
public String toString() {
if (parameters == null || sql == null) {
return "";
}
List
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.mapping.ParameterMode;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.reflection.property.PropertyTokenizer;
import org.apache.ibatis.scripting.xmltags.ForEachSqlNode;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import java.util.List;
import java.util.Map;
public class MyBatisSqlUtils {
/**
* MyBatis SQL
*
* @param id Mapper xml select Id
* @param parameterMap
* @param sqlSessionFactory
* @return
*/
public static MyBatisSql getMyBatisSql(String id, Map parameterMap, SqlSessionFactory sqlSessionFactory) {
MyBatisSql ibatisSql = new MyBatisSql();
MappedStatement ms = sqlSessionFactory.getConfiguration().getMappedStatement(id);
BoundSql boundSql = ms.getBoundSql(parameterMap);
ibatisSql.setSql(boundSql.getSql());
List parameterMappings = boundSql.getParameterMappings();
Configuration configuration = sqlSessionFactory.getConfiguration();
if (parameterMappings != null) {
Object[] parameterArray = new Object[parameterMappings.size()];
ParameterMapping parameterMapping = null;
Object value = null;
Object parameterObject = null;
MetaObject metaObject = null;
PropertyTokenizer prop = null;
String propertyName = null;
String[] names = null;
for (int i = 0; i < parameterMappings.size(); i++) {
parameterMapping = parameterMappings.get(i);
if (parameterMapping.getMode() != ParameterMode.OUT) {
propertyName = parameterMapping.getProperty();
names = propertyName.split("\\.");
if (propertyName.indexOf(".") != -1 && names.length == 2) {
parameterObject = parameterMap.get(names[0]);
propertyName = names[1];
} else if (propertyName.indexOf(".") != -1 && names.length == 3) {
parameterObject = parameterMap.get(names[0]); // map
if (parameterObject instanceof Map) {
parameterObject = ((Map) parameterObject).get(names[1]);
}
propertyName = names[2];
} else {
parameterObject = parameterMap.get(propertyName);
}
metaObject = parameterMap == null ? null : MetaObject.forObject(parameterObject,configuration.getObjectFactory(),configuration.getObjectWrapperFactory(), configuration.getReflectorFactory());
prop = new PropertyTokenizer(propertyName);
if (parameterObject == null) {
value = null;
} else if (ms.getConfiguration().getTypeHandlerRegistry().hasTypeHandler(parameterObject.getClass())) {
value = parameterObject;
} else if (boundSql.hasAdditionalParameter(propertyName)) {
value = boundSql.getAdditionalParameter(propertyName);
} else if (propertyName.startsWith(ForEachSqlNode.ITEM_PREFIX) && boundSql.hasAdditionalParameter(prop.getName())) {
value = boundSql.getAdditionalParameter(prop.getName());
if (value != null) {
value = MetaObject.forObject(value,configuration.getObjectFactory(),configuration.getObjectWrapperFactory(), configuration.getReflectorFactory()).getValue(propertyName.substring(prop.getName().length()));
}
} else {
value = metaObject == null ? null : metaObject.getValue(propertyName);
}
parameterArray[i] = value;
}
}
ibatisSql.setParameters(parameterArray);
}
return ibatisSql;
}
}
上は2つの主要な実装mybatis実行sqlのコードを取得して、ネット上で検索して、ここは作者に感謝して、私は原文のリンクを貼るのを忘れて、後ろは補充することを覚えていて、ほほほ.