工作上对JPA的使用记录

JPA定义:

JPA是Java Persistence API的简称,中文名Java持久层API,JPA的宗旨是为POJO提供持久化标准规范
JPQL(Java Persistence Query Language)中文名Java持久化查询语言,是JPA定义的一种独特的查询语言,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库中的表

注解

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@PersistenceContext
private EntityManager em;

单表查询

StringBuilder sb = new StringBuilder("select g.* from goods g where 1=1 ");
StringBuilder sum = new StringBuilder("select count(*) from goods g where 1=1 ");

if (StringUtils.isNotBlank(name)) {
     sb.append(" and g.name like ? ");
     sum.append(" and g.name like ? ");
}

// 总数量
Query sumQuery = em.createNativeQuery(sum.toString());
sumQuery .setParameter(1, String.format("%%%s%%", name));
Integer count = ((BigInteger)sumQuery .getSingleResult()).intValue();

Query query = em.createNativeQuery(sb.toString(), Goods.class);
// 第一个参数指的是占位符的位置(从1开始)
// 第二个参数指的是占位符的取值
query.setParameter(1, String.format("%%%s%%", name));

query.setFirstResult( (page-1)*size ); // 起始角标从0开始
query.setMaxResults(10); // 每页大小

PageImpl<Goods> pageImpl = new PageImpl(query.getResultList(), PageRequest.of(page-1,size), count);


## 常见查询方式
### 模糊查询
String name = "zhang";
query.setParameter(1, String.format("%%%s%%", name));
### 日期
String time= "2021-09-12 00:00:00";
Date time = new Date();
Timestamp time = new Timestamp(new Date().getTime());
query.setParameter(1, time)
### in
List<Long> ids = new ArrayList<>();
ids.add(1L);
query.setParameter(1, ids)

拼接原生SQL

StringBuilder pageData = new StringBuilder("select g.* from goods g where isDelete=0 ");
StringBuilder count = new StringBuilder("select count(*) from goods g where isDelete=0 ");
StringBuilder conditions = new StringBuilder();
// 模糊查询
conditions.append(" and name like ").append(String.format("'%%%s%%'", name));
// between(既包含头也包含尾)
conditions.append(" and start_time between ").append(String.format("'%s'", startTime1)).append(" and ").append(String.format("'%s'", startTime2));
// 日期
String timeStr = "2020-12-12 10:10:10"
Date timeDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
conditions.append(" and start_time > ").append(String.format("'%s'", time));
conditions.append(" and start_time > ").append(String.format("'%s'", sdf.format(timeDate)));
// 日期函数
conditions.append(" and start_time > now()");

其它

@PersistenceContext
private EntityManager em;

return new PageImpl<VoteVo>(VoteVos, new PageRequest(page - 1, size), total.size());
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值