/** * * Copyright 2014 The Darks ORM Project (Liu lihua) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package darks.orm.core.executor; import java.sql.SQLException; import darks.orm.app.QueryEnumType; import darks.orm.app.SqlSession; import darks.orm.core.aspect.AspectQueryContext; import darks.orm.core.data.xml.DMLData; import darks.orm.core.data.xml.DMLQueryData; import darks.orm.core.data.xml.QueryAspectWrapper; import darks.orm.core.factory.ExecutorFactory; public class SqlMapQueryExecutor extends SqlMapExecutorAdapter { private DMLData dmlData; private DMLQueryData queryData; private QueryAspectWrapper queryWrapper; private QueryEnumType queryEnumType; private SqlSession session; private AspectQueryContext aspectQueryContext; public SqlMapQueryExecutor() { } public SqlMapQueryExecutor(DMLData dmlData, DMLQueryData queryData, QueryAspectWrapper queryWrapper, QueryEnumType queryEnumType, SqlSession session) { this.dmlData = dmlData; this.queryData = queryData; this.queryWrapper = queryWrapper; this.queryEnumType = queryEnumType; this.session = session; } @Override public boolean initialize() { aspectQueryContext = new AspectQueryContext(queryData.getAspectData()); return true; } @Override public boolean afterInvoke() { if (queryData.getAspectData() != null) return aspectQueryContext.afterInvoke(session, queryData.getAspectData(), queryWrapper, queryEnumType); return true; } @Override public Object bodyInvoke() throws SQLException { String sql = queryWrapper.getSql(); Object[] params = queryWrapper.getParams(); int page = queryWrapper.getPage(); int pageSize = queryWrapper.getPageSize(); boolean autoCascade = true; if (queryWrapper.getAutoCascade() <= 0) autoCascade = false; SqlMapExecutor exec = ExecutorFactory.getSqlMapCascadeQueryExecutor(session, autoCascade, queryData.getResultClass(), sql, params, queryEnumType, dmlData.getCacheId(), page, pageSize, dmlData.isAutoCache(), queryWrapper.getAttribute(), queryWrapper.getAlias()); Object obj = exec.invoke(); queryWrapper.setResult(obj); return obj; } @Override public boolean beforeInvoke() { if (queryData.getAspectData() != null) return aspectQueryContext.beforeInvoke(session, queryData.getAspectData(), queryWrapper, queryEnumType); return true; } public DMLData getDmlData() { return dmlData; } public void setDmlData(DMLData dmlData) { this.dmlData = dmlData; } public DMLQueryData getQueryData() { return queryData; } public void setQueryData(DMLQueryData queryData) { this.queryData = queryData; } public QueryAspectWrapper getSqlMapAspectData() { return queryWrapper; } public void setSqlMapAspectData(QueryAspectWrapper queryWrapper) { this.queryWrapper = queryWrapper; } public QueryEnumType getQueryEnumType() { return queryEnumType; } public void setQueryEnumType(QueryEnumType queryEnumType) { this.queryEnumType = queryEnumType; } public SqlSession getSession() { return session; } public void setSession(SqlSession session) { this.session = session; } public AspectQueryContext getAspectQueryContext() { return aspectQueryContext; } public void setAspectQueryContext(AspectQueryContext aspectQueryContext) { this.aspectQueryContext = aspectQueryContext; } }