一,带参查询(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语句。
如下截图是既有动态参数,又有固定参数,还有分页功能的部分截图,有问题可以留言讨论