首页 > 技术文章 > SpringData JPA @Query动态SQL语句,且分页

zhangliang88 2020-06-19 15:48 原文

一,带参查询(1、根据参数位置2、根据Param注解)

/**
     * 查询根据参数位置
     * @param userName
     * @return
     */
    @Query(value = "select * from sys_user  where userName = ?1",nativeQuery = true)
    SysUser findSysUserByUserName(String userName);
 
    /**
     * 查询根据Param注解
     * @param userName
     * @return
     */
    @Query(value = "select u from SysUser u where u.userName = :userName")
    SysUser findSysUserByUserNameTwo(@Param("userName") String userName);
  • @Query有nativeQuery=true,表示可执行的原生sql,原生sql指可以直接复制sql语句给参数赋值就能运行
  • @Query无nativeQuery=true, 表示不是原生sql,查询语句中的表名则是对应的项目中实体类的类名
  • 如图
  •  

    动态sql语句如下

  • @Query(value = "select * from project_demand where project_id=?1 and if(?2!='',demand_id in (select demand_id from demand_user where user_id=?2),1=1)",nativeQuery = true)

  • 红色部分,就是生成动态SQL的方法,利用MYSQL的if函数和我们传递的参数去进行判断,然后获取SQL语句。

如下截图是既有动态参数,又有固定参数,还有分页功能的部分截图,有问题可以留言讨论

  •  

     

     

     

推荐阅读