springboot中JPA的相关操作

1、dataObject

/**
 * 复合主键
 */
@Data
public class ProjectCompanyKeys implements Serializable{

    private String projectNo;//项目编号

    private String companyNo;//实施单位编号
}

/**
 *
 * 实体类
 */
@Data
@Entity
@Table(name = "PROJECT_COMPANY_REL")
@IdClass(ProjectCompanyRelKeys.class)
public class ProjectCompanyRel{

    @Id
    @Column(name="PROJECT_NO")
    private String peojectNo;

    @Id
    @Column(name="COMPANY_NO")
    private String companyNo;

    @Column(name="COMPANY_ACCNO")
    private String companyAccno;


    @Coloumn(name="STATUS")
    private String status;
}

 

2、repository

public interface ProjectCompanyRelRepository extends JpaRepository<ProjectCompanyRel,ProjectCompanyRelKeys>,JpaSpecificationExcutor<ProjectCompanyRel>{
    
}

3、service

 a、predicate实现多条件以及分页查询

private Object getPageData(Map<Stirng,Object> map,Pageable pageable){
    
    Specification<Company> specification =new Specification<companyInfo>(){
        @Overide
        public Predicate toPredicate(Root<CompanyInfo> root,CriteriaQuery<?> query,CriteriaBuilder criteriaBuilder){
            Predicate predicate =null;
            ArrayList<Predicate> predicate = new ArrayList<>();
            //获取predicate
            Object companyNo=map.get("companyNo");
            Object CompanyName=map.get("companyName");
            Object status=map.get("status");
            if(companyNo != null && !"".equals(companyNo.toStirng()))
                predicate.add(criteraBuilder.equal(root.get("companyNo").as(String.class),companyNo));
            if(companyName!=null && !"".equals(companyName.toStirng()))
                predicate.add(criteraBUilder.like(root.get("companyName").as(String.class),"%"+companyName+"%"));
            //添加in条件,字段status
            if(status != null){
                ArrayList<String> statustring=(ArrayList<String>)status;
                Path<String> statusPath=Root.get("status");
                CriteriaBulder.In<String> in = criteriabuilder.in(statusPath);
                for(String s:statustring){
                    in.value(s);
                }
                predicate.add(in);
            }

            predicate=criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
            
            return predicate;
        
        }
    }

    //判断是否需要分页
    if(pageable == null){
        return companyInfoRepository.findAll(specification);
    }else{
        return companyInfoRepository.findAll(sprcification,pagecble);
    }
}
//调用getPageData()方法

HashMap<String,Object> map=new HashMap<>;
map.put("companyNo","123");
companyService.selectByMapPage(map,new PageRequest(currPage-1,pagesize));//currPage当前页码,pagesize页面条数

b、自定义查询语句

//serviceImpl中引入

@PersistenceContext
private EntityManager entityManager;
//自定义sql语句实现


//基础sql
StringBuffer dataBuffer = new StringBuffer("select *  from COMPANY_INFO where 1=1");

//聚合sql
StirngBuffer countBuffer =new StringBuffer("select count(*) from COMPANY_INFO where 
 1=1");

Object companyNo=paraMap.get("companyNo");
Object companyName=paraMap.get("companyName");

//条件构造
StringBuffer paramBuffer = new StringBuffer();
if(companyNo!=null && !"".equals(companyNo))
    paramBuffer.append(" and companyNo like '%"+companyNo+"%'");
...

//排序字段
StringBuffer orderBuffer=new StringBuffer(" order by company_no asc");

//sql拼接
String datasql = (dataBuffer.append(paramBuffer).append(orderBuffer)).toString();
String countsql = (dataBuffer.append(paramBuffer)).toString();

//执行sql
Query dataQuery = entityManager.createNativeQuery(datasql);
Query dataQuery = entityManager.createNativeQuery(countsql);

dataQuery.setFirstResult((int)pageable.getOffset());
dataQuery.setMaxResults(pageable.getPagesize());
Bigdecimal count = (Bigdecimal)countQuery.getSignleResult();
Long total = count.longValue;
List<Object[]> content = total > pageable.getOffset()?dataQuery.getResultList() : Collections.emptyList();

PageImpl<Object[]> objects = new PageImpl<>(content,pageable,total);

if(objects == null || objects.getTotalElments() == 0L)
    return null;

List<Object[]> returnData = Objects.getContent();//本页数据
long totalElements=objects.getTotalElements();//总数量
int totalPage=objects.getTotalPages();//总页数

//封装数据
List<Object> returnList = new ArrayList<>();

for(Object[] row objects){
    HashMap<String,Object> returnMap=new HashMap<String>();
    map.put("companyNo",row[0])
    returnList.add(returnMap);
}

MyPage<Object> objectMyPage = new MyPage<>();
objectMyPage.setContent(returnList);
objectMyPage.setTotalNum(totalElements);
objectMyPage.setTotalPage(totalPage);

return objectMyPage;
//调用

HashMap<Stirng,Object> map =new HashMap<String,Object>();
map.put("companyNo","123");

companySerivce.selectByMyPage(map,new PageRequest(currPage-1,pagesize));

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot集成JPA是一种常用的开发方式,可以方便地使用JPA操作数据库。通过引入相应的依赖项,可以实现Spring Boot与JPA的整合。具体步骤如下: 1. 在项目的pom.xml文件添加以下依赖项: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ``` 2. 在application.properties或application.yml配置文件配置数据库连接信息,如数据库URL、用户名、密码等。 3. 创建实体类,使用JPA注解标注实体类和字段,以映射到数据库表和字段。 4. 创建Repository接口,继承自JpaRepository,可以直接使用Spring Data JPA提供的方法,无需手动编写SQL语句。 5. 在业务逻辑层或控制层使用Repository接口,调用相应的方法进行数据库操作。 总结起来,通过引入相应的依赖项,配置数据库连接信息,创建实体类和Repository接口,即可实现Spring Boot集成JPA。这样就可以方便地进行数据库操作,提高开发效率。 需要注意的是,JPAJava Persistence API的简称,是一种ORM(Object-Relational Mapping)框架,可以实现Java对象与数据库表之间的映射,简化了数据库操作的编写。Spring Boot集成JPA可以更加便捷地进行数据库操作,对于新手来说是一个很好的学习实践。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [springboot 集成jpa案例](https://download.csdn.net/download/wu_213616/12506883)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [springboot整合JPA](https://blog.csdn.net/weixin_44740485/article/details/124904112)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [SpringBoot集成JPA](https://blog.csdn.net/csdnerM/article/details/121873780)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值