首页 > 作文

JPA 使用criteria简单查询工具类方式

更新时间:2023-04-04 03:52:03 阅读: 评论:0

目录
打包jpa动态查询(criteriaquery) eq、ge、gt封装jpa动态查询(criteriaquery)entitymanager管理器,通过spring管理page分页和结果封装类ibadao接口实现了badaoimplibadao接口

以前用jpa写了一个条件筛选的查询数据如下,才知道那么渣渣,就是一个表,根据前端来筛选数据,写的如下

首先就是判断前端传来的参数就写了那么多,现在才发现是渣渣中的渣渣,而且还费时,用criteria很快就搞定

首先创建类并实现specification<t>接口

import java.util.arraylist;import java.util.list; import javax.persistence.criteria.criteriabuilder;import javax.persistence.criteria.criteriaquery;import javax.persistence.criteria.predicate;import javax.persistence.criteria.root; import org.springframework.data.jpa.domain.specification; public class expandcriteria<t> implements specification<t>{      private list<expandcriterion> criterions = new arraylist<expandcriterion>();        public predicate topredicate(root<t> root, criteriaquery<?> query,              criteriabuilder builder) {          if (!criterions.impty()) {              list<predicate> predicates = new arraylist<predicate>();              for(expandcriterion c : criterions){                  predicates.add(c.topredicate(root, query,builder));              }              // 将所有条件用 and 联合起来              if (predicates.size() > 0) {                  return builder.and(predicates.toarray(new predicate[predicates.size()]));              }          }          return builder.conjunction();      }      /**      * 增加简单条件表达式      * @methods name add      * @create in 2012-2-8 by lee      * @param expression0 void      */      public void add(expandcriterion criterion){          if(criterion!=null){              criterions.add(criterion);          }      }          public static void main(string[] args) {     //使用示例demo//     criteria<entity> c = new criteria<entity>();//     c.add(restrictions.like("code", archparam.getcode(), true));  //             c.add(restrictions.eq("level", archparam.getlevel(), fal));  //             c.add(restrictions.eq("mainstatus", archparam.getmainstatus(), true));  //             c.add(restrictions.eq("flowstatus", archparam.getflowstatus(), true));  //             c.add(restrictions.eq("createur.urname", archparam.getcreateur(), true));  //             c.add(restrictions.lte("submittime", archparam.getstartsubmittime(), true));  //             c.add(restrictions.gte("submittime", archparam.getendsubmittime(), true));  //             c.add(restrictions.eq("needfollow", archparam.getisfollow(), true));  //             c.add(restrictions.ne("flowstatus", archparam.getmainstatus() true));  //             c.add(restrictions.in("solveteam.code",teamcodes, true));  //     repository.findall(c);   }}  

新建expandcriterion接口

import javax.persistence.criteria.criteriabuilder;import javax.persistence.criteria.criteriaquery;import javax.persistence.criteria.predicate;import javax.persistence.criteria.root; public interface expandcriterion {  public enum operator {           eq, ne, like, gt, lt, gte, lte, and, or       }       public predicate topredicate(root<?> root, criteriaquery<?> query,               criteriabuilder builder);  }

新建restrictions.java

import java.util.collection; import org.springframework.util.stringutils; import com.sll.iot.dao.ba.criteria.expandcriterion.operator; public class restrictions {         /**      * 等于      * @param fieldname      * @param value      * @param ignorenull      * @return      */      public static simpleexpression eq(string fieldname, object value, boolean ignorenull) {          if(stringutils.impty(value))return null;          return new simpleexpression (fieldname, value, operator.eq);      }            /**      * 不等于      * @param fieldname      * @param value      * @param ignorenull      * @return      */      public static simpleexpression ne(string fieldname, object value, boolean ignorenull) {          if(stringutils.impty(value))return null;          return new simpleexpression (fieldname, value, operator.ne);      }        /**      * 模糊匹配      * @param fieldname      * @param value      * @param ignorenull      * @return      */      public static simpleexpression like(string fieldname, string value, boolean ignorenull) {          if(stringutils.impty(value))return null;          return new simpleexpression (fieldname, value, operator.like);      }          /**      * 大于      * @param fieldname      * @param value      * @param ignorenull      * @return      */      public static simpleexpression gt(string fieldname, object value, boolean ignorenull) {          if(stringutils.impty(value))return null;          return new simpleexpression (fieldname, value, operator.gt);      }        /**      * 小于      * @param fieldname      * @param value      * @param ignorenull      * @return      */      public static simpleexpression lt(string fieldname, object value, boolean ignorenull) {          if(stringutils.impty(value))return null;          return new simpleexpression (fieldname, value, operator.lt);      }        /**      * 大于等于      * @param fieldname      * @param value      * @param ignorenull      * @return      */      public static simpleexpression lte(string fieldname, object value, boolean ignorenull) {          if(stringutils.impty(value))return null;          return new simpleexpression (fieldname, value, operator.gte);      }        /**      * 小于等于      * @param fieldname      * @param value      * @param ignorenull      * @return      */      public static simpleexpression gte(string fieldname, object value, boolean ignorenull) {          if(stringutils.impty(value))return null;          return new simpleexpression (fieldname, value, operator.lte);      }        /**      * 并且      * @param criterions      * @return      */      public static logicalexpression and(expandcriterion... criterions){          return new logicalexpression(criterions, operator.and);      }      /**      * 或者      * @param criterions      * @return      */      public static logicalexpression or(expandcriterion... criterions){          return new logicalexpression(criterions, operator.or);      }      /**      * 包含于      * @param fieldname      * @param value      * @return      */      @suppresswarnings("rawtypes")      public static logicalexpression in(string fieldname, collection value, boolean ignorenull) {          if(ignorenull&&(value==null||value.impty())){              return null;          }          simpleexpression[] s = new simpleexpression[value.size()];          int i=0;          for(object obj : value){              s[i]=new simpleexpression(fieldname,obj,operator.eq);              i++;          }          return new logicalexpression(s,operator.or);      }  

新建simpleexpression.java

import javax.persistence.criteria.criteriabuilder;import javax.persistence.criteria.criteriaquery;import javax.persistence.criteria.expression;import javax.persistence.criteria.path;import javax.persistence.criteria.predicate;import javax.persistence.criteria.root; public class simpleexpression implements expandcriterion{          private string fieldname;       //属性名      private object value;           //对应值      private operator operator;      //计算符     protected simpleexpression(string fieldname, object value, operator operator) {          this.fieldname = fieldname;          this.value = value;          this.operator = operator;      }        public string getfieldname() {          return fieldname;      }      public object getvalue() {          return value;      }      public operator getoperator() {          return operator;      }      @suppresswarnings({ "rawtypes", "unchecked" })      public predicate topredicate(root<?> root, criteriaquery<?> query,              criteriabuilder builder) {          path expression = null;          if(fieldname.contains(".")){              string[] names = fieldname.split(".");              expression = root.get(names[0]);              for (int i = 1; i < names.length; i++) {                  expression = expression.get(names[i]);              }          }el{              expression = root.get(fieldname);          }                    switch (operator) {          ca eq:              return builder.equal(expression, value);          ca ne:              return builder.notequal(expression, value);          ca like:              return builder.like((expression<string>) expression, "%" + value + "%");          ca lt:              return builder.lessthan(expression, (comparable) value);          ca gt:              return builder.greaterthan(expression, (comparable) value);          ca lte:              return builder.lessthanorequalto(expression, (comparable) value);          ca gte:              return builder.greaterthanorequalto(expression, (comparable) value);          default:              return null;          }      }}  

logicalexpression.java

import java.util.arraylist;import jav关于毕业的歌a.util.list; import javax.persistence.criteria.criteriabuilder;import javax.persistence.criteria.criteriaquery;import javax.persistence.criteria.predicate;import javax.persistence.criteria.root; public class logicalexpression implements expandcriterion {      private expandcriterion[] criterion;  // 逻辑表达式中包含的表达式      private operator operator;      //计算符       public logicalexpression(expandcriterion[] criterions, operator operator) {          this.criterion = criterions;          this.operator = operator;      }        public predicate topredicate(root<?> root, criteriaquery<?> query,              criteriabuilder builder) {          list<predicate> predicates = new arraylist<predicate>();          for(int i=0;i<this.criterion.length;i++){              predicates.add(this.criterion[i].topredicate(root, query, builder));          }          switch (operator) {          ca or:              return builder.or(predicates.toarray(new predicate[predicates.size()]));          default:              return null;          }      }    }

使用criteria前提是dao接口必须实现jpaspecificationexecutor<t>接口

改造如下

//条件查询 @override public paging<channel> query(paging<channel> paging,string channelname,string operator) {  pageable pagereq = new pagerequest(paging.getcurrentpage()-1, paging.getpagesize());  page<channel> pagechanel=null;  expandcriteria<channel> criteria = new expandcriteria<channel>();  if(stringutil.isnotempty(channelname)){   criteria.add(restrictions.like("name", channelname, fal));  }  if(stringutil.isnotempty(operator)){   criteria.add(restrictions.eq("operator",operator.valueof(operator), fal));  }  pagechanel=channelrepository.findall(criteria, pagereq);    if(pagechanel!=null){   paging.ttotalcount((int)pagechanel.gettotalelements());   paging.tdata(pagechanel.getcontent());   paging.ttotalpage(pagechanel.gettotalpages());  }  return paging; }

都不用在dao接口写什么东西

使用方法就是demo

public static void main(string[] args) {     //使用示例demo//     criteria<entity> c = new criteria<entity>();//     c.add(restrictions.like("code", archparam.getcode(), true));  //             c.add(restrictions.eq("level", archparam.getlevel(), fal));  //             c.add(restrictions.eq("mainstatus", archparam.getmainstatus(), true));  //             c.add(restrictions.eq("flowstatus", archparam.getflowstatus(), true));  //             c.add(restrictions.eq("createur.urname", archparam.getcreateur(), true));  //             c.add(restrictions.lte("submittime", archparam.getstartsubmittime(), true));  //             c.add(restrictions.gte("submittime", archparam.getendsubmittime(), true));  //             c.add(restrictions.eq("needfollow", archparam.getisfollow(), true));  //             c.add(restrictions.ne("flowstatus", archparam.getmainstatus() true));  //             c.add(restrictions.in("solveteam.code",teamcodes, true));  //     repository.findall(c);   }

打包jpa动态查询(criteriaquery) eq、ge、gt

封装jpa动态查询(criteriaquery)

jpa动态查询(criteriaquery)封装的一段代码:

package com.platform.framework.dao.jpa;    import java.io.rializable;  import java.util.arraylist;  import java.util.collection;  import java.util.date;  import java.util.hashmap;  import java.util.iterator;  import java.util.list;  import java.util.map;  import javax.persistence.entitymanager;  import javax.persistence.criteria.criteriabuilder;  import javax.persistence.criteria.criteriabuilder.in;  import javax.persistence.criteria.criteriaquery;  import javax.persistence.criteria.order;  import javax.persistence.criteria.predicate;  import javax.persistence.criteria.root;   import org.apache.log4j.logger;  /** * query基类<br> *  * @describe:封装jpa criteriabuilder查询条件 * @author:lry * @since:2014-05-23 */  @suppresswarnings({ "unud", "unchecked", "rawtypes", "null", "hiding" })  public class query implements rializable {    private static final long rialversionuid = 5064932771068929342l;    private static logger log = logger.getlogger(query.class);    private entitymanager entitymanager;  /** 要查询的模型对象 */  private class clazz;  /** 查询条件列表 */  private root from;  private list<predicate> predicates;    private criteriaquery criteriaquery;    private criteriabuilder criteriabuilder;  /** 排序方式列表 */  private list<order> orders;  /** 关联模式 */  private map<string, query> subquery;    private map<string, query> linkquery;    private string projection;  /** 或条件 */  private list<query> orquery;    private string groupby;    private query() {  }    private query(class clazz, entitymanager entitymanager) {  this.clazz = clazz;  this.entitymanager = entitymanager;  this.criteriabuilder = this.entitymanager.getcriteriabuilder();  this.criteriaquery = criteriabuilder.createquery(this.clazz);  this.from = criteriaquery.from(this.clazz);  this.predicates = new arraylist();  this.orders = new arraylist();  }  /** 通过类创建查询条件 */  public static query forclass(class clazz, entitymanager entitymanager) {  return new query(clazz, entitymanager);  }  /** 增加子查询 */  private void addsubquery(string propertyname, query query) {  if (this.subquery == null)  this.subquery = new hashmap();  if (query.projection == null)  throw new runtimeexception("子查询字段未设置");  this.subquery.put(propertyname, query);  }  private void addsubquery(query query) {  addsubquery(query.projection, query);  }  /** 增关联查询 */  public void addlinkquery(string propertyname, query query) {  if (this.linkquery == null)  this.linkquery = new hashmap();  this.linkquery.put(propertyname, query);  }  /** 相等 */  public void eq(string propertyname, object value) {  if (isnullorempty(value))  return;  this.predicates.add(criteriabuilder.equal(from.get(propertyname), value));  }  private boolean isnullorempty(object value) {  if (value instanceof string) {  return value == null || "".equals(value);  }  return value == null;  }  public void or(list<string> propertyname, object value) {  if (isnullorempty(value))  return;  if ((propertyname == null) || (propertyname.size() == 0))  return;  predicate predicate = criteriabuilder.or(criteriabuilder.equal(from.get(propertyname.get(0)), value));  for (int i = 1; i < propertyname.size(); ++i)  predicate = criteriabuilder.or(predicate, criteriabuilder.equal(from.get(propertyname.get(i)), value));  this.predicates.add(predicate);  }  public void orlike(list<string> propertyname, string value) {  if (isnullorempty(value) || (propertyname.size() == 0))  return;  if (value.indexof("%") < 0)  value = "%" + value + "%";  predicate predicate = criteriabuilder.or(criteriabuilder.like(from.get(propertyname.get(0)), value.tostring()));  for (int i = 1; i < propertyname.size(); ++i)  predicate = criteriabuilder.or(predicate, criteriabuilder.like(from.get(propertyname.get(i)), value));  this.predicates.add(predicate);  }  /** 空 */  public void isnull(string propertyname) {  this.predicates.add(criteriabuilder.isnull(from.get(propertyname)));  }  /** 非空 */  public void isnotnull(string propertyname) {  this.predicates.add(criteriabuilder.isnotnull(from.get(propertyname)));  }  /** 不相等 */  public void noteq(string propertyname, object value) {  if (isnullorempty(value)) {  return;  }  this.predicates.add(criteriabuilder.notequal(from.get(propertyname), value));  }  /** * not in *  * @param propertyname *            属性名称 * @param value *            值集合 */  public void notin(string propertyname, collection value) {  if ((value == null) || (value.size() == 0)) {  return;  }  iterator iterator = value.iterator();  in in = criteriabuilder.in(from.get(propertyname));  while (iterator.hasnext()) {  in.value(iterator.next());  }  this.predicates.add(criteriabuilder.not(in));  }  /** * 模糊匹配 *  * @param propertyname *            属性名称 * @param value *            属性值 */  public void like(string propertyname, string value) {  if (isnullorempty(value))  return;  if (value.indexof("%") < 0)  value = "%" + value + "%";  this.predicates.add(criteriabuilder.like(from.get(propertyname), value));  }  /** * 时间区间查询 *  * @param propertyname *            属性名称 * @param lo *            属性起始值 * @param go *            属性结束值 */  public void between(string propertyname, date lo, date go) {  if (!isnullorempty(lo) && !isnullorempty(go)) {  this.predicates.add(criteriabuilder.between(from.get(propertyname), lo, go));  }  // if (!isnullorempty(lo) && !isnullorempty(go)) {  // this.predicates.add(criteriabuilder.lessthan(from.get(propertyname),  // new datetime(lo).tostring()));  // }  // if (!isnullorempty(go)) {  // this.predicates.add(criteriabuilder.greaterthan(from.get(propertyname),  // new datetime(go).tostring()));  // }    }  public void between(string propertyname, number lo, number go) {  if (!(isnullorempty(lo)))  ge(propertyname, lo);  if (!(isnullorempty(go)))  le(propertyname, go);  }  /** * 小于等于 *  * @param propertyname *            属性名称 * @param value *            属性值 */  public void le(string propertyname, number value) {  if (isnullorempty(value)) {  return;  }  this.predicates.add(criteriabuilder.le(from.get(propertyname), value));  }  /** * 小于 *  * @param propertyname *            属性名称 * @param value *            属性值 */  public void lt(string propertyname, number value) {  if (isnullorempty(value)) {  return;  }  this.predicates.add(criteriabuilder.lt(from.get(propertyname), value));  }  /** * 大于等于 *  * @param propertyname *            属性名称 * @param value *            属性值 */  public void ge(string propertyname, number value) {  if (isnullorempty(value)) {  return;  }  this.predicates.add(criteriabuilder.ge(from.get(propertyname), value));  }  /** * 大于 *  * @param propertyname *            属性名称 * @param value *            属性值 */  public void gt(string propertyname, number value) {  if (isnullorempty(value)) {  return;  }  this.predicates.add(criteriabuilder.gt(from.get(propertyname), value));  }  /** * in *  * @param propertyname *            属性名称 * @param value *            值集合 */  public void in(string propertyname, collection value) {  if ((value == null) || (value.size() == 0)) {  return;  }  iterator iterator = value.iterator();  in in = criteriabuilder.in(from.get(propertyname));  while (iterator.hasnext()) {  in.value(iterator.next());  }  this.predicates.add(in);  }  /** 直接添加jpa内部的查询条件,用于应付一些复杂查询的情况,例如或 */  public void addcriterions(predicate predicate) {  this.predicates.add(predicate);  }  /** * 创建查询条件 *  * @return jpa离线查询 */  public criteriaquery newcriteriaquery() {  criteriaquery.where(predicates.toarray(new predicate[0]));  if (!isnullorempty(groupby)) {  criteriaquery.groupby(from.get(groupby));  }  if (this.orders != null) {  criteriaquery.orderby(orders);  }  addlinkcondition(this);  return criteriaquery;  }  private void addlinkcondition(query query) {  map subquery = query.linkquery;  if (subquery == null)  return;  for (iterator queryiterator = subquery.keyt().iterator(); queryiterator.hasnext();) {  string key = (string) queryiterator.next();  query sub = (query) subquery.get(key);  from.join(key);  criteriaquery.where(sub.predicates.toarray(new predicate[0]));  addlinkcondition(sub二次曝光电影);  }  }  public void addorder(string propertyname, string order) {  if (order == null || propertyname == null)  return;  if (this.orders == null)  this.orders = new arraylist();  if (order.equalsignoreca("asc"))  this.orders.add(criteriabuilder.asc(from.get(propertyname)));  el if (order.equalsignoreca("desc"))  this.orders.add(criteriabuilder.desc(from.get(propertyname)));  }  public void torder(string propertyname, string order) {  this.orders = null;  addorder(propertyname, order);  }  public class getmodleclass() {  return this.clazz;  }  public string getprojection() {  return this.projection;  }  public void tprojection(string projection) {  this.projection = projection;  }  public class getclazz() {  return this.clazz;  }  public list<order> getorders() {  return orders;  }  public void torders(list<order> orders) {  this.orders = orders;  }  public entitymanager getentitymanager() {  return this.entitymanager;  }  public void tentitymanager(entitymanager em) {  this.entitymanager = em;  }  public root getfrom() {  return from;  }  public list<predicate> getpredicates() {  return predicates;  }  public void tpredicates(list<predicate> predicates) {  this.predicates = predicates;  }  public criteriaquery getcriteriaquery() {  return criteriaquery;  }  public criteriabuilder getcriteriabuilder() {  return criteriabuilder;  }  public void tfetc红颜未老hmodes(list<string> fetchfield, list<string> fetchmode) {  }  public string getgroupby() {  return groupby;  }  public void tgroupby(string groupby) {  this.groupby = groupby;  }    }  
<?xml version="1.0" encoding="utf-8"?>  <beans xmlns="/d/file/titlepic/"  xmlns:xsi="/d/file/titlepic/xmlschema-instance" xmlns:p="http://www.springframework.org/schema/p"  xmlns:tx="/d/file/titlepic/" xmlns:context="/d/file/titlepic/"  xmlns:util="/d/file/titlepic/"  xmlns:aop="/d/file/titlepic/"  xsi:schemalocation="  http://www.springframework.org/schema/beans   /d/file/titlepic/spring-beans-3.1.xsd  http://www.springframework.org/schema/tx   /d/file/titlepic/spring-tx-3.1.xsd  http://www.springframework.org/schema/context  /d/file/titlepic/spring-context-3.1.xsd  http://www.springframework.org/schema/aop   /d/file/titlepic/spring-aop.xsd  http://www.springframework.org/schema/util   http://www.springframework.org/schema/util/spring-util-3.1.xsd">   <!-- jpa entity manager factory -->  <bean id="entitymanagerfactory"  class="org.springframework.orm.jpa.localcontainerentitymanagerfactorybean"  p:packagestoscan="com.**.model" p:datasource-ref="datasource"  p:jpavendoradapter-ref="hibernatevendor" p:jpapropertymap-ref="jpapropertymap"/>  <util:map id="jpapropertymap">  <entry key="hibernate.hbm2ddl.auto" value="update" /><!-- create,update,none -->  <entry key="hibernate.format_sql" value="fal" />  <entry key="hibernate.show_sql" value="fal" />  <entry key="hibernate.current_ssion_context_class" value="org.hibernate.context.internal.threadlocalssioncontext"/>  <entry key="hibernate.dialect" value="org.hibernate.dialect.mysqldialect" />  <!-- to enable hibernate's cond level cache and query cache ttings -->  <entry key="hibernate.max_fetch_depth" value="4" />  <entry key="hibernate.cache.u_cond_level_cache" value="true" />  <entry key="hibernate.cache.u_query_cache" value="true" />  <!-- <entry key="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.ehcacheregionfactory" /> -->  <entry key="hibernate.cache.region.factory_class" value="org.hibernate.cache.singletonehcacheregionfactory" />  </util:map>  <bean id="hibernatevendor"  class="org.springframework.orm.jpa.vendor.hibernatejpavendoradapter"  p:databa="mysql" p:showsql="true" p:generateddl="true"  p:databaplatform="org.hibernate.dialect.mysqldialect" />  <bean id="transactionhandler" class="com.platform.framework.dao.jpa.transactionhandler" >  <property name="txmethod">  <list>  <value>inrt</value>  <value>update</value>  <value>delete</value>  </list>  </property>  <property name="entitymanagerfactory" ref="entitymanagerfactory"/>  </bean>  <aop:config>  <aop:aspect id="tran" ref="transactionhandler">  <aop:pointcut  id="tranmethod"  expression="  execution(* com.*.dao.*.*(..))||  execution(* com.*.rvice.impl.*.*(..))||  execution(* com.*.*.dao.*.*(..))||  execution(* com.*.*.rvice.impl.*.*(..))||  execution(* com.*.*.*.dao.*.*(..))||  execution(* com.*.*.*.rvice.impl.*.*(..))||  execution(* com.*.*.*.*.dao.*.*(..))||  execution(* com.*.*.*.*.rvice.impl.*.*(..))||  execution(* com.*.*.*.*.*.dao.*.*(..))||  execution(* com.*.*.*.*.*.rvice.impl.*.*(..))||  execution(* com.*.*.*.*.*.*.dao.*.*(..))||  execution(* com.*.*.*.*.*.*.rvice.impl.*.*(..))||  execution(* com.platform.framework.dao.jpa.badaoimpl.*(..))"/>  <aop:around method="exec"  pointcut-ref="tranmethod" />  </aop:aspect>  </aop:config>  <bean id="badao" class="com.platform.framework.dao.jpa.badaoi体恤的意思mpl">  <property name="emf" ref="entitymanagerfactory"/>  </bean>  </beans>  
package com.platform.framework.dao.jpa;    import javax.persistence.entitymanager;  import javax.persistence.entitymanagerfactory;  import javax.persistence.entitytransaction;    import org.apache.log4j.logger;  import org.aspectj.lang.proceedingjoinpoint;  import org.aspectj.lang.signature;  /** * @describe jpa事务管理 * @author lry * @since:2014-05-23 *  */  public class transactionhandler {  private static final logger log = logger  .getlogger(transactionhandler.class);    private string[] txmethod;// 配置事务的传播特性方法    private entitymanagerfactory entitymanagerfactory;// jpa工厂    public object exec(proceedingjoinpoint point) throws throwable {  signature signature = point.getsignature();  log.debug(point.gettarget().getclass().getname() + "."  + signature.getname() + "()");  boolean istransaction = fal;  for (string method : txmethod) {  if (signature.getname().startswith(method)) {// 以method开头的方法打开事务  istransaction = true;  break;  }  }  // jpa->hibernate  if (point.gettarget() instanceof entitymanagerfactoryproxy) {  // 获得被代理对象  entitymanagerfactoryproxy emfp = (entitymanagerfactoryproxy) point  .gettarget();  entitymanager em = emfp.getentitymanager();  if (em != null) {// 如果对象已经有em了就不管  return point.proceed();  } el {  em = entitymanagerfactory.createentitymanager();  }  log.debug("jpa->hibernate open connection...");  if (istransaction) {  entitytransaction t = null;  try {  // 打开连接并开启事务  log.debug("jpa->hibernate begin transaction...");  t = em.gettransaction();  if (!t.isactive())  t.begin();  emfp.tentitymanager(em);  object obj = point.proceed();  // 提交事务  log.debug("jpa->hibernate commit...");  t.commit();  return obj;  } catch (exception e) {  if (t != null) {  log.debug("jpa->hibernate error...,rollback..."  + e.getmessage());  t.rollback();  }  e.printstacktrace();  throw e;  } finally {  if (em != null && em.isopen()) {// 关闭连接  em.clo();  log.debug("jpa->hibernate clo connection...");  }  emfp.tentitymanager(null);  }  } el {  try {  emfp.tentitymanager(em);  return point.proceed();  } catch (exception e) {  log.debug("jpa->hibernate error..." + e.getmessage());  e.printstacktrace();  throw e;  } finally {  if (em != null && em.isopen()) {// 关闭连接  em.clo();  log.debug("jpa->hibernate clo connection...");  }  emfp.tentitymanager(null);  }  }  } el {  return point.proceed();  }  }  public string[] gettxmethod() {  return txmethod;  }  public void ttxmethod(string[] txmethod) {  this.txmethod = txmethod;  }  public void tentitymanagerfactory(  entitymanagerfactory entitymanagerfactory) {  this.entitymanagerfactory = entitymanagerfactory;  }    }  

entitymanager管理器,通过spring管理

package com.platform.framework.dao.jpa;   import java.util.collection;    import javax.persistence.entitymanager;  import javax.persistence.entitymanagerfactory;  /** * entitymanager管理器 *  * @author:yangjian1004 * @since:2011-11-30 16:14:24 am */  public class entitymanagerfactoryproxy {    private static threadlocal<entitymanager> emthreadlocal = new threadlocal<entitymanager>();  private static entitymanagerfactory emf;  public void temf(entitymanagerfactory emf) {  entitymanagerfactoryproxy.emf = emf;  }  public static entitymanagerfactory getemf() {  return emf;  }  public entitymanager getentitymanager() {  return emthreadlocal.get();  }  public void tentitymanager(entitymanager em) {  emthreadlocal.t(em);  }  /** * 创建查询条件 *  * @param name *            字段名称 * @param values *            字段值 */  public string createincondition(string name, collection<string> values) {  if (values == null || values.size() == 0) {  return "1<>1";  }  stringbuffer sb = new stringbuffer();  sb.append(name + " in(");  for (string id : values) {  sb.append("'" + id + "',");  }  string hsqlcondition = sb.substring(0, sb.length() - 1) + ")";  return hsqlcondition;  }  }  

page分页和结果封装类

package com.platform.framework.dao.jpa;   import java.io.rializable;  import java.util.arraylist;  import java.util.list;  /** * page基类<br> *  * @describe:分页 */  public class page<t> implements rializable {  private static final long rialversionuid = 665620345605746930l;  /** 总条数 */  private int count;  /** 页码 */  private int pageno;  /** 每页显示多少条 */  private int rowsperpage;  /** 总页数 */  private int totalpagecount;  /** 起始条数 */  private int firstrow;  /** 结束条数 */  private int lastrow;  /** 查询结果集合形式的结果 */  private list<t> result;  /** 查询结果对象形式的结果 */  public object obj;  public integer code; // 返回码  private boolean success = true;  private string message;   public page() {  }  public page(list<t> list) {  this(list.size(), 1, list.size(), list);  }  public page(int count, int pageno, int rowsperpage, list<t> result) {  if (rowsperpage < 1) {  rowsperpage = 1;  }  this.count = count;  this.pageno = pageno;  this.result = result;  this.rowsperpage = rowsperpage;  if (this.result == null)  this.result = new arraylist<t>();  totalpagecount = count / rowsperpage;  if (count - (count / rowsperpage) * rowsperpage > 0)  totalpagecount++;  if (count == 0) {  totalpagecount = 0;  pageno = 0;  }  firstrow = (pageno - 1) * rowsperpage + 1;  if (count == 0) {  firstrow = 0;  }  lastrow = (pageno) * rowsperpage;  if (lastrow > count) {  lastrow = count;  }  }  /** 返回每页的条数 */  public int getcount() {  return count;  }  public list<t> getresult() {  return result;  }  public int getpageno() {  return pageno;  }  /** 返回每页的条数 */  public int getrowsperpage() {  return rowsperpage;  }  /** 返回总的页数 */  public int gettotalpagecount() {  return totalpagecount;  }  public void tpageno(int pageno) {  this.pageno = pageno;  }  public void trowsperpage(int rowsperpage) {  this.rowsperpage = rowsperpage;  }  public int getfirstrow() {  return firstrow;  }  public int getlas春节作文600字trow() {  return lastrow;  }  public void tfirstrow(int firstrow) {  this.firstrow = firstrow;  }  public void tlastrow(int lastrow) {  this.lastrow = lastrow;  }  public void tcount(int count) {  this.count = count;  }  public void ttotalpagecount(int totalpagecount) {  this.totalpagecount = totalpagecount;  }  public void tresult(list<t> result) {  this.result = result;  }  public object getobj() {  return obj;  }  public void tobj(object obj) {  this.obj = obj;  }  public boolean issuccess() {  return success;  }  public void tsuccess(boolean success) {  this.success = success;  }  public string getmessage() {  return message;  }  public void tmessage(string message) {  this.message = message;  }  /** * 计算起始条数 */  public static int calc(int pageno, int rowsperpage, int count) {  if (pageno <= 0)  pageno = 1;  if (rowsperpage <= 0)  rowsperpage = 10;  // 当把最后一页数据删除以后,页码会停留在最后一个上必须减一  int totalpagecount = count / rowsperpage;  if (pageno > totalpagecount && (count % rowsperpage == 0)) {  pageno = totalpagecount;  }  if (pageno - totalpagecount > 2) {  pageno = totalpagecount + 1;  }  int firstrow = (pageno - 1) * rowsperpage;  if (firstrow < 0) {  firstrow = 0;  }  return firstrow;  }    }  

ibadao接口实现了badaoimpl

package com.platform.framework.dao.jpa;    import java.io.rializable;  import java.util.list;    import javax.persistence.entitymanager;  import javax.persistence.criteria.criteriaquery;  import javax.persistence.criteria.predicate;  import javax.persistence.criteria.lection;  import javax.persistence.metamodel.entitytype;    import org.apache.log4j.logger;    import com.google.common.ba.strings;  /** * ibadao接口实现了badaoimpl类<br> */  @suppresswarnings({ "unchecked", "rawtypes" })  public class badaoimpl<t> extends entitymanagerfactoryproxy implements ibadao {  private static logger log = logger.getlogger(badaoimpl.class);  /** 每次批量操作数 */  private int batchsize = 50;  /** 设置每次操作数 */  public void tbatchsize(int batchsize) {  this.batchsize = batchsize;  }  public <e> e get(class clazz, rializable id) {  return (e) getentitymanager().find(clazz, id);  }  /** * 插入记录 *  * @param entity *            要插入的记录 */  public void inrt(object entity) {  if (entity instanceof list) {  inrtlist((list) entity);  return;  } el if (entity instanceof object[]) {  return;  }  try {  getentitymanager().persist(entity);  } catch (exception e) {  e.printstacktrace();  }  }  /** * 批量增加 *  * @param list *            要新增的数据 */  public void inrtlist(list list) {  entitymanager entitymanager = getentitymanager();  if (list == null || list.size() == 0) {  return;  }  int i = 0;  for (object o : list) {  inrt(o);  if (i % batchsize == 0) {  entitymanager.flush();  }  i++;  }  log.debug(list.get(0).getclass() + "批量增加数据" + i + "条");  }  /** * 更新记录 *  * @param entity *            要更新的记录 */  public void update(object entity) {  if (entity instanceof list) {  this.updatelist((list) entity);  return;  }  getentitymanager().merge(entity);  }  /** 更新list */  public void updatelist(list list) {  for (object entity : list) {  this.update(entity);  }  }  /** * 删除记录 *  * @param entity *            要删除的记录 */  public void delete(object entity) {  if (entity instanceof list) {  list list = (list) entity;  for (object o : list) {  getentitymanager().remove(o);  }  } el {  getentitymanager().remove(entity);  }  }  public <e extends rializable> list<e> query(string jpql) {  return getentitymanager().createquery(jpql).getresultlist();  }  public integer updatejpql(string jpql) {  return getentitymanager().createquery(jpql).executeupdate();  }  public integer updatesql(string sql) {  return getentitymanager().createnativequery(sql).executeupdate();  }  public <e extends rializable> list<e> querybysql(string sql) {  return getentitymanager().createnativequery(sql).getresultlist();  }  /** * 查询记录 *  * @param clazz *            要查询的实体类 * @param hqlcondition *            查询条件 */  public <e extends rializable> list<e> query(class clazz, string hqlcondition) {  return getentitymanager().createquery("lect t from " + clazz.getname() + " as t where " + hqlcondition)  .getresultlist();  }  public void delete(class entity, string jpqlcondition) {  if (strings.isnullorempty(jpqlcondition)) {  jpqlcondition = "1=1";  }  int no = updatejpql("delete " + entity.getname() + " where " + jpqlcondition);  log.debug(entity.getname() + "删除" + no + "条数据");  }  /** * 根据ids删除数据 *  * @param entity *            删除实体类 * @param ids *            删除条件 */  public void delete(class entity, list ids) {  string idname = getidname(entity, getentitymanager());  stringbuffer sb = new stringbuffer();  sb.append(idname + " in(");  for (int i = 0; i < ids.size(); i++) {  sb.append("'" + ids.get(i) + "',");  }  string jpqlcondition = sb.substring(0, sb.length() - 1) + ")";  delete(entity, jpqlcondition);  }  public <e extends rializable> list<e> query(string jpql, int firstresult, int maxresults) {  list result = getentitymanager().createquery(jpql).tfirstresult(firstresult).tmaxresults(maxresults)  .getresultlist();  return result;  }  public <e extends rializable> list<e> querybysql(string sql, int firstresult, int maxresults) {  return getentitymanager().createnativequery(sql).tfirstresult(firstresult).tmaxresults(maxresults)  .getresultlist();  }  public <e extends rializable> list<e> queryall(class clazz) {  criteriaquery criteriaquery = getentitymanager().getcriteriabuilder().createquery(clazz);  criteriaquery.from(clazz);  return getentitymanager().createquery(criteriaquery).getresultlist();  }  public page querypagebyjpql(string jpql, int pageno, int rowsperpage) {  if (pageno <= 0)  pageno = 1;  if (rowsperpage <= 0)  rowsperpage = 7;  log.debug("-----开始查询,页码:" + pageno + ",每页显示:" + rowsperpage + "----");  string countjpql = "lect count(*) from (" + jpql + ")";  int count = getcount(countjpql).intvalue();  // 当把最后一页数据删除以后,页码会停留在最后一个上必须减一  int totalpagecount = count / rowsperpage;  if (pageno > totalpagecount && (count % rowsperpage == 0)) {  pageno = totalpagecount;  }  if (pageno - totalpagecount > 2) {  pageno = totalpagecount + 1;  }  int firstresult = (pageno - 1) * rowsperpage;  if (firstresult < 0) {  firstresult = 0;  }  list result = getentitymanager().createquery(jpql).tfirstresult(firstresult).tmaxresults(rowsperpage)  .getresultlist();  return new page(count, pageno, rowsperpage, result);  }  public long getcount(string jpql) {  return (long) getentitymanager().createquery(jpql).getresultlist().get(0);  }  /*** *  * @method updatejpql * @description 根据传入的带有占位符的sql语句, 做增删改操作 例如 *              updatejpql("update ur t t t.name=? where t.id=?" *              ,{[zhongxiang],[23]}) * @author 钟翔/zhongxiang * @date 2012-8-9 下午3:38:35 * @param jpql *            占位符式的sql * @param paramlist *            list里面装有[zhongxiang , 23] */  public void updatejpql(string jpql, list paramlist) {  javax.persistence.query query = getentitymanager().createquery(jpql);  for (int i = 0; i < paramlist.size(); i++) {  query.tparameter(i + 1, paramlist.get(i));  }  query.executeupdate();  }  /** * 统计记录 *  * @param query *            统计条件 */  public long getcount(query query) {  lection lection = query.getcriteriaquery().getlection();  query.getcriteriaquery().lect(query.getcriteriabuilder().count(query.getfrom()));  long count = (long) getentitymanager().createquery(query.newcriteriaquery()).getresultlist().get(0);  query.getcriteriaquery().lect(lection);  return count;  }  /** * 分页查询 *  * @param query *            查询条件 * @param pageno *            页号 * @param rowsperpage *            每页显示条数 */  public page querypage(query query, int pageno, int rowsperpage) {  if (pageno <= 0)  pageno = 1;  if (rowsperpage <= 0)  rowsperpage = 7;  log.debug(query.getclazz() + "-----开始查询,页码:" + pageno + ",每页显示:" + rowsperpage + "----");  log.debug("查询条件:");  for (predicate cri : query.getpredicates())  log.debug(cri);  int count = getcount(query).intvalue();  // 当把最后一页数据删除以后,页码会停留在最后一个上必须减一  int totalpagecount = count / rowsperpage;  if (pageno > totalpagecount && (count % rowsperpage == 0)) {  pageno = totalpagecount;  }  if (pageno - totalpagecount > 2) {  pageno = totalpagecount + 1;  }  int firstresult = (pageno - 1) * rowsperpage;  if (firstresult < 0) {  firstresult = 0;  }  list result = getentitymanager().createquery(query.newcriteriaquery()).tfirstresult(firstresult)  .tmaxresults(rowsperpage).getresultlist();  return new page(count, pageno, rowsperpage, result);  }  /** * 根据query查找记录 *  * @param query *            查询条件 * @param firstresult *            起始行 * @param maxresults *            结束行 */  public <e extends rializable> list<e> query(query query, int firstresult, int maxresults) {  list result = getentitymanager().createquery(query.newcriteriaquery()).tfirstresult(firstresult)  .tmaxresults(maxresults).getresultlist();  return result;  }  /** * 根据query查找记录 *  * @param query *            查询条件 */  public <e extends rializable> list<e> query(query query) {  return getentitymanager().createquery(query.newcriteriaquery()).getresultlist();  }  /** * 获得主键名称 *  * @param clazz *            操作是实体对象 * @param entitymanager *            jpa的entitymanager工厂 * @return 初建名称 * */  public static string getidname(class clazz, entitymanager entitymanager) {  entitytype entitytype = entitymanager.getmetamodel().entity(clazz);  return entitytype.getid(entitytype.getidtype().getjavatype()).getname();  }  }  

ibadao接口

package com.platform.framework.dao.jpa;    import java.io.rializable;  import java.util.list;    import javax.persistence.entitymanager;  /** * ibadao基类<br> *  * @describe:系统基础jpa dao接口 */  @suppresswarnings({ "rawtypes" })  public interface ibadao {        public entitymanager getentitymanager();    public <e> e get(class clazz, rializable id);  /** * 插入记录 *  * @param entity *            要插入的记录 */  public void inrt(object entity);  /** * 更新记录 *  * @param entity *            要更新的记录 */  public void update(object entity);  /** 更新list */  public void updatelist(list list);  /** * 删除记录 *  * @param entity *            要删除的记录 */  public void delete(object entity);  /** * 删除记录 *  * @param entity *            要删除的记录 */  public void delete(class entity, list ids);  /** * 删除记录 *  * @param entity *            要删除的记录 */  public void delete(class entity, string jpqlcondition);  /** * 统计记录 *  * @param query *            统计条件 */  public long getcount(query query);    public long getcount(string jpql);  /** * 分页查询 *  * @param query *            查询条件 * @param pageno *            页号 * @param rowsperpage *            每页显示条数 */  public page querypage(query query, int pageno, int rowsperpage);  /** * 根据query查找记录 *  * @param query *            查询条件 * @param firstresult *            起始行 * @param maxresults *            结束行 */  public <e extends rializable> list<e> query(query query, int firstresult, int maxresults);  /** * 根据query查找记录 *  * @param query *            查询条件 */  public <e extends rializable> list<e> query(query query);  /** * 执行更新操作的jpql语句 *  * @param jpql *            要执行的jpql语句 */  public <e extends rializable> list<e> query(string jpql);    public <e extends rializable> list<e> queryall(class clazz);    public <e extends rializable> list<e> query(string jpql, int firstresult, int maxresults);  /** * 执行查询操作的sql语句 *  * @param sql *            要执行的sql语句 */  public <e extends rializable> list<e> querybysql(string sql);    public <e extends rializable> list<e> querybysql(string sql, int firstresult, int maxresults);  /** * 查询记录 *  * @param clazz *            要查询的实体类 * @param hqlcondition *            查询条件 */  public <e extends rializable> list<e> query(class clazz, string hqlcondition);  /** * 执行更新操作的sql语句 *  * @param sql *            要执行的sql语句 */  public integer updatesql(string sql);    public integer updatejpql(string jpql);    public page querypagebyjpql(string hql, int pageno, int rowsperpage);   public void updatejpql(string jpql, list paramlist);    } 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。

本文发布于:2023-04-04 03:51:54,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/e1f2d58ea103f69047540708bf57485f.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:JPA 使用criteria简单查询工具类方式.doc

本文 PDF 下载地址:JPA 使用criteria简单查询工具类方式.pdf

标签:条件   属性   每页   接口
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图