JPA EntityManager 自定义语句执行方法:createQuery/createNativeQuery

EntityManager.createQuery()/createNativeQuery()函数的好处是可以根据参数匹配条件,动态生产sql语句去执行。
几个通用方法:
1.生产Query对象:
Query query=EntityManager.createQuery(sql)/createNativeQuery(sql)
2.设置分页:
query.setFirstResult(第几页offset)
query.setMaxResult(每页容量limit)
3.执行Query:
query.getResultList()
query.getSingleResult()
query.executeUpdate

createQuery:执行非原生sql
1.可以调用类,将查询的值封装到一个新的实体类中,类似JpaRepository中非native的@Query使用方式。注意new 类的时候需要补齐类的全名(包路径),否则找不到该类的构造函数。
2.如果遇到数据库内置函数,例如pg:ST_Intersects(‘参数1’,‘参数2’),直接写原生语句会报错,需要借助function函数:
function('ST_Intersects','参数1','参数2')='t'

createNativeQuery:执行原生sql
1.数据库里能用这里就能用
2.想将查询结果放到一个新的类中会报错:这个不是个实体类,通过.umwrap()方法解决

Query dataQuery=entityManager.createNativeQuery(sql);
List<T> result=dataQuery.unwrap(org.hibernate.query.internal.NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).getResultList();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值