QueryDSL结合SpringDataJPA的学习

    科技2024-05-21  76

    目标

    实现QueryDSL通用查询语言整合SpringDataJPA完成单表的查询

    添加依赖

    <!--JPA--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!--querydsl--> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-apt</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-jpa</artifactId> </dependency> <dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-core</artifactId> </dependency>

    快速创建实体类及Q实体

    创基基类JPA

    package com.example.text.base; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.querydsl.QuerydslPredicateExecutor; import org.springframework.data.repository.NoRepositoryBean; /** * 上面的注解@NoRepositoryBean是为了避免SpringDataJPA自动实例化才添加的 */ @NoRepositoryBean public interface BaseJPA<T> extends JpaRepository<T, Long>, JpaSpecificationExecutor<T>, QuerydslPredicateExecutor<T> { }

    创建逻辑JPA

    package com.example.text.mapper; import com.example.text.base.BaseJPA; import com.example.text.entity.Pmarea; import org.springframework.web.bind.annotation.RequestMapping; import java.util.List; public interface Text2Dao extends BaseJPA<Pmarea> { //这里可以写方法 }

    编写查询

    QueryDSL 提供了JPAQueryFactory 和 SQLQueryFactory用来操作数据库。JPAQueryFactory 依赖于JPA,必须要有类似hibernate这种实现了JPA的ORM框架,使用起来比较方便,配置JPAQueryFactory :

    @RestController @RequestMapping("/t/") public class Text2Controller { @Autowired private Text2Dao text2Dao; //实体类管理者 @Autowired private EntityManager entityManager; //JPA查询工程 @Autowired private JPAQueryFactory jpaQueryFactory; @Bean @Autowired public JPAQueryFactory jpaQuery(EntityManager entityManager) { return new JPAQueryFactory(entityManager); } ///通过id查询 @Autowired private TextDao textDao; @RequestMapping("user") public List<Pmarea> user(Integer start){ //使用Queryds1查询 QPmarea Qp = QPmarea.pmarea; //查询返回结果 List<Pmarea> fetch = jpaQueryFactory.selectFrom(Qp)//查询源 .where(Qp.id.eq(start))//根据id查询 .fetch();//执行查询获取数据 return fetch; } //查询 通过名字 @RequestMapping("alg") public List<Pmarea> alg(String name){ QPmarea Qp = QPmarea.pmarea; return jpaQueryFactory .selectFrom(Qp) .where(Qp.name.eq(name)) .fetch(); } //删除 还没成功还 @RequestMapping("ltc") public String ltc(String name){ QPmarea Qp = QPmarea.pmarea; jpaQueryFactory .delete(Qp) .where(Qp.name.eq(name)).execute(); return "delete ok"; } //修改 @RequestMapping("tst") @Transactional public String tst(String name,Integer id){ QPmarea Qp = QPmarea.pmarea; jpaQueryFactory .update(Qp) .set(Qp.name,name) .where(Qp.id.eq(id)) .execute(); return "update ok"; } //根据名字模糊查询 @RequestMapping("like") @Transactional public List<Pmarea> like(String name){ QPmarea Qp = QPmarea.pmarea; return jpaQueryFactory .selectFrom(Qp) .where(Qp.name.like(name)) .fetch(); } }
    Processed: 0.013, SQL: 8