SpringDataJPA - 2:复杂查询

首先使用 spring data jpa ,DAO接口需要继承JpaRepositoryJpaSpecificationExecutor两个接口

操作数据库常用的两个注解@Query@Modifying

@Query
  • 此注解用在接口方法上用来声明方法将进行查询
  • value:查询需要执行的JPQL语句或者SQL语句
  • nativeQuery:是否使用本地查询 值:fasel(使用jpql查询) | true(使用本地查询:sql查询)
    /**
     * 根据占位符:位置 进行查询
     *  ?为占位符 1为索引,对应参数的位置
     *      占位符的索引从1开始,并不是从0开始
     *      一般2个参数以下建议使用
     * @param userName
     * @return
     */
    @Query(value = "from UserDemo where userName like ?1")
    UserDemo findByUserName(String userName);

    /**
     * 根据占位符:参数名称 进行查询
     *  「@Param」注解中的值对应jpql中占位符参数名称,顺序并不影响查询
     *  p1、p2 表示两个参数,建议在项目中见名知意
     * @param p1
     * @param p2
     * @return
     */
    @Query(value = "from UserDemo where userAge = :userAge and userName = :userName")
    UserDemo findByUserNameAndUserAge(@Param("userName") String p1, @Param("userAge") int p2);
@Modifying
  • 此注解和@Query联合使用在接口方法上,声明此方法用来更新
  • 需要调用方法的时候手动添加事务支持
  • 默认在执行结束之后,回滚事务,需要设置自动回滚@Rollback:是否自动回滚,取值范围:false | true
    /**
     * 更新操作
     *      sql:update user_demo set user_age = ? where user_name = ?
     *      jpql:update UserDemo set userAge = ?1 where userName = ?2
     *
     *      * spring data jpa 在执行更新、删除操作注意
     *          1、需要调用方法的时候手动添加事务支持
     *          2、默认在执行结束之后,回滚事务,需要设置自动回滚
     *          @Rollback:是否自动回滚,取值范围:false|true
     *
     * @param age
     * @param name
     */
    @Query(value = "update UserDemo set userAge = ?1 where userName = ?2")
    @Modifying
    @Rollback(value = false)
    void updateAgeByName(int age, String name);

使用sql的形式进行查询

    /*
    使用sql的形式进行查询:查询全部

    sql:select * from user_demo
    Query:配置sql查询
        value:sql语句
        nativeQuery:查询方式
            true:使用本地 sql 查询
            false:使用jpql查询
     */
    @Query(value = "select * from user_demo", nativeQuery = true)
    List<UserDemo> findBySql();

    @Query(nativeQuery = true, value = "select * from user_demo where id = :id")
    UserDemo findByUserId(@Param("id") Integer id);

方法名称规则查询

  • 对jpql查询更加深入一层封装的查询方式,只需要按照springdatajpa提供的方法名称规则定义方法忙不需要配置jqpl语句,就可以完成查询
  • 关键字(例如:findBy)+属性名称(属性名称的首字母大写)+查询条件(首字母大写)。
  • 返回结果根据使用情况而定

其他查询前缀可以参考:org.springframework.data.util.Streamable

    private static final String QUERY_PATTERN = "find|read|get|query|stream";
    private static final String COUNT_PATTERN = "count";
    private static final String EXISTS_PATTERN = "exists";
    private static final String DELETE_PATTERN = "delete|remove";

带有LIKE的查询,注意参数中的%需要手动添加

image-20210706133831149
image-20210706133838313

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值