Jpa之@Query的使用

这段代码主要涉及数据库查询,包括本周注册用户数的统计、按日期分组的用户注册数查询,以及根据KOL认证ID获取音乐人认证ID。同时提供了批量审核同意的操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    /**
     * 本周注册人数
     *
     * @return
     */
    @Query(nativeQuery = true, value = "SELECT COUNT(1) AS num  FROM `user` WHERE YEARWEEK(DATE_FORMAT(create_time,'%Y-%m-%d')) = YEARWEEK(NOW())")
    Integer weekTotalNum();

    /**
     * 查询注册用户数
     *
     * @param startDay
     * @param limitDay
     */
    @Query(nativeQuery = true, value = "SELECT a.create_date AS createDate, IFNULL(b.num, 0) AS num FROM (SELECT @date \\:= DATE_SUB(@date, INTERVAL 1 DAY) AS create_date FROM (SELECT @date \\:= DATE_SUB(CURDATE(), INTERVAL ?1 DAY) FROM `user` LIMIT ?2) t) a LEFT JOIN (SELECT LEFT(create_time, 10) AS date_time, COUNT(1) AS num FROM `user` GROUP BY date_time) b ON a.create_date = b.date_time ORDER BY a.create_date DESC")
    List<Map<String, Object>> registerList(@Param("startDay") Integer startDay, @Param("limitDay") Integer limitDay);


    /**
     * 根据Kol的认证ID查询音乐人认证ID
     *
     * @param idList
     * @return
     */
    @Query(value = "SELECT uak.musicId FROM UserAuthKol uak WHERE uak.id IN ( :idList ) AND uak.musicId>0 ")
    List<Integer> musicIdList(@Param("idList") List<Integer> idList);

    /**
     * 批量审核同意
     *
     * @param idList
     * @param status
     */
    @Modifying
    @Transactional(rollbackFor = Exception.class)
    @Query(value = "UPDATE UserAuthKol uak SET uak.status =:status WHERE uak.id IN ( :idList )")
    void checkAgreeByIdList(@Param("idList") List<Integer> idList, @Param("status") Byte status);

### 使用 `JpaRepository` 和 `@Query` 注解操作 Oracle 数据库 #### 配置依赖项 为了在项目中使用 `JpaRepository` 接口以及 `@Query` 注解,首先需要引入必要的 Maven 依赖。以下是所需的依赖配置: ```xml <dependencies> <!-- Spring Data JPA --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- Oracle JDBC Driver --> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <scope>runtime</scope> </dependency> </dependencies> ``` 这些依赖会自动集成到应用程序中并提供访问关系型数据库所需的功能。 #### 创建实体类 定义一个简单的 Java 类来映射表结构。假设有一个名为 `Employee` 的表格存储员工信息,则对应的实体类如下所示: ```java import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity(name = "EMPLOYEE") // 表名大写是因为大多数情况下 Oracle 默认将对象名称转换成大写字母处理 public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String firstName; private String lastName; } ``` 此代码片段展示了如何创建与特定模式匹配的数据模型[^1]。 #### 定义 Repository 接口 通过继承自 `JpaRepository<T, ID>` 来快速获得一组标准 CRUD 方法的支持。如果想要执行更复杂的查询逻辑可以利用 `@Query` 自定义 JPQL 或者原生 SQL 查询语句。 ```java import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface EmployeeRepository extends JpaRepository<Employee, Long> { // 使用JPQL编写的查询方法 @Query("SELECT e FROM Employee e WHERE LOWER(e.firstName) LIKE %?1% OR LOWER(e.lastName) LIKE %?1%") List<Employee> findEmployeesByName(String namePart); } ``` 上述例子说明了怎样基于条件检索记录列表,并且支持大小写不敏感的模糊匹配功能[^2]。 #### 应用服务层调用 最后,在业务逻辑组件里注入 repository 实例即可轻松完成数据持久化操作。 ```java @Service public class EmployeeService { private final EmployeeRepository employeeRepo; public EmployeeService(EmployeeRepository repo){ this.employeeRepo=repo; } public void addNewEmployee(Employee emp){ employeeRepo.save(emp); } } ``` 以上就是完整的流程介绍,从设置环境直到实现具体的应用场景都进行了详细的描述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值