jpa动态sql拼接_springboot中JPA使⽤动态SQL查询
spring boot中的jpa⾮常好⽤,但是在创建动态查询时稍微有些⿇烦。基本上有以下两种办法:乌龟怎么养
⽅法⼀:⽤criteria查询
import iteria.CriteriaBuilder;
import iteria.CriteriaQuery;
import iteria.Predicate;
import iteria.Root;
CriteriaBuilder接⼝⽤来构建Predicate,⽽Predicate接⼝⽤来连接⼦句,每次添加到predicate之前都要进⾏参数⾮空判断。
//dao层需继承JpaSpecificationExecutor
public interface BeanRepository extends JpaRepository, JpaSpecificationExecutor {
}
------------------
//关键代码apec是什么组织
@Override
public Predicate toPredicate(Root root, CriteriaQuery> query, CriteriaBuilder cb) {
List predicates = new ArrayList();
//参数⾮空判断
if (("Key值") != null && StringUtils.isNotBlank((String) ("Key值"))) {
predicates.add(cb.("bean中的变量,eg.age").as(Integer.class), ("age对应的参数Map中的Key")));
}
return query.Array(new Predicate[predicates.size()]));
}
自处
⽅法⼆:直接使⽤原⽣SQL,构建query来执⾏
由于本⼈涉及到的前台传回来的sql长短和条件都不固定,并且参数较多,写起来很⿇烦。因此选择这种办法,将前台的数据拼接为sql,直接创建查询。
导⼊的包:
仓库的分类
import jpa.LocalContainerEntityManagerFactoryBean;
import javax.persistence.EntityManager;
import javax.persistence.Query;
EntityManager直接创建原⽣查询,createNativeQuery的参数(string sql,info.class)写⼊Bean.class,就直接可以⽤List接收了
private LocalContainerEntityManagerFactoryBean entityManagerFactory;
public void exec(){
EntityManager em = NativeEntityManagerFactory().createEntityManager();
StringBuilder sqljoint=new StringBuilder(300);
sqljoint.append("SELECT * ity where 1=1");
//sqljoint.apped("附加的where⼦句")
珠宝世界
String String();
纹头发图片男
//创建原⽣查询的时候,将info.class类即第⼆个参数,写成要传回的bean,这样就可以直接⽤List接收Query query = em.createNativeQuery(sql,EntityBean.class);
List ResultList();
}
低耗Ps:链接备忘
spring boot jpa 使⽤原⽣sql查询
一诺千金的故事
mapbox教程
⼿写汉字识别