All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.cassite.daf4j.jpa.JPQLConditionParser Maven / Gradle / Ivy

The newest version!
package net.cassite.daf4j.jpa;

import net.cassite.daf4j.Parameter;
import net.cassite.daf4j.ParameterAggregate;
import net.cassite.daf4j.ParameterComparable;
import net.cassite.daf4j.PreResult;
import net.cassite.daf4j.ds.*;

/**
 * 将所有条件解释为JPQL语句
 */
public class JPQLConditionParser implements ConditionParser {
        private ObjectResolver objectResolver;

        @Override
        public String gt(JPQLContext jpqlContext, ParameterComparable parameterComparable, Object o) throws Exception {
                return objectResolver.resolve(jpqlContext, parameterComparable) + " > " + objectResolver.resolve(jpqlContext, o);
        }

        @Override
        public String lt(JPQLContext jpqlContext, ParameterComparable parameterComparable, Object o) throws Exception {
                return objectResolver.resolve(jpqlContext, parameterComparable) + " < " + objectResolver.resolve(jpqlContext, o);
        }

        @Override
        public String eq(JPQLContext jpqlContext, Parameter parameter, Object o) throws Exception {
                return objectResolver.resolve(jpqlContext, parameter) + " = " + objectResolver.resolve(jpqlContext, o);
        }

        @Override
        public String ge(JPQLContext jpqlContext, ParameterComparable parameterComparable, Object o) throws Exception {
                return objectResolver.resolve(jpqlContext, parameterComparable) + " >= " + objectResolver.resolve(jpqlContext, o);
        }

        @Override
        public String le(JPQLContext jpqlContext, ParameterComparable parameterComparable, Object o) throws Exception {
                return objectResolver.resolve(jpqlContext, parameterComparable) + " <= " + objectResolver.resolve(jpqlContext, o);
        }

        @Override
        public String ne(JPQLContext jpqlContext, Parameter parameter, Object o) throws Exception {
                return objectResolver.resolve(jpqlContext, parameter) + " <> " + objectResolver.resolve(jpqlContext, o);
        }

        @Override
        public String between(JPQLContext jpqlContext, ParameterComparable parameterComparable, Object o, Object o1) throws Exception {
                return objectResolver.resolve(jpqlContext, parameterComparable) + " BETWEEN " + objectResolver.resolve(jpqlContext, o) + " AND " + objectResolver.resolve(jpqlContext, o1);
        }

        @Override
        public String in(JPQLContext jpqlContext, Parameter parameter, PreResult preResult) throws Exception {
                return objectResolver.resolve(jpqlContext, parameter) + " IN(" + objectResolver.resolve(jpqlContext, preResult) + ")";
        }

        @Override
        public String notIn(JPQLContext jpqlContext, Parameter parameter, PreResult preResult) throws Exception {
                return objectResolver.resolve(jpqlContext, parameter) + " NOT IN(" + objectResolver.resolve(jpqlContext, preResult) + ")";
        }

        @Override
        public String like(JPQLContext jpqlContext, Parameter parameter, Object[] objects) throws Exception {
                String str = objectResolver.resolve(jpqlContext, parameter) + " LIKE ";
                for (int i = 0; i < objects.length; ++i) {
                        Object o = objects[i];
                        if (o instanceof String && o.equals("%") || o.equals("_")) {
                                if (i == 0 && objects.length == 1) str += "'" + o.toString() + "'";
                                else if (i == 0) str += ("'" + o.toString() + "'||");
                                else if (i == objects.length - 1) str += ("||'" + o.toString() + "'");
                                else str += "||'" + o.toString() + "'||";
                        } else {
                                str += objectResolver.resolve(jpqlContext, o);
                        }
                }
                return str;
        }

        @Override
        public String isNull(JPQLContext jpqlContext, Parameter parameter) throws Exception {
                return objectResolver.resolve(jpqlContext, parameter) + " IS NULL";
        }

        @Override
        public String isNotNull(JPQLContext jpqlContext, Parameter parameter) throws Exception {
                return objectResolver.resolve(jpqlContext, parameter) + " IS NOT NULL";
        }

        @Override
        public String member(JPQLContext jpqlContext, Parameter parameter, ParameterAggregate parameterAggregate) throws Exception {
                return objectResolver.resolve(jpqlContext, parameter) + " MEMBER " + objectResolver.resolve(jpqlContext, parameterAggregate);
        }

        @Override
        public String reverseMember(JPQLContext jpqlContext, ParameterAggregate parameterAggregate, Object o) throws Exception {
                return objectResolver.resolve(jpqlContext, o) + " MEMBER " + objectResolver.resolve(jpqlContext, parameterAggregate);
        }

        @Override
        public String notMember(JPQLContext jpqlContext, Parameter parameter, ParameterAggregate parameterAggregate) throws Exception {
                return objectResolver.resolve(jpqlContext, parameter) + " NOT MEMBER " + objectResolver.resolve(jpqlContext, parameterAggregate);
        }

        @Override
        public String reverseNotMember(JPQLContext jpqlContext, ParameterAggregate parameterAggregate, Object o) throws Exception {
                return objectResolver.resolve(jpqlContext, o) + " NOT MEMBER " + objectResolver.resolve(jpqlContext, parameterAggregate);
        }

        @Override
        public void setObjectResolver(ObjectResolver objectResolver) {
                this.objectResolver = objectResolver;
        }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy