1.查询关键字
限制结果数量可以使用top first关键字
findFirst10ByName() findTop10ByName() 皆为查询前10条数据
2.@NamedQuery查询
此注解用于标识类(特指带@Entity的实体类),执行的jpql语句
@NamedQueries({
@NamedQuery(name="Adminuser.findByName",query="select * from Adminuser where name=?1 "),
@NamedQuery(name="Adminuser.findByCcc",query="select * from Adminuser where name=?1 "),
@NamedQuery(name="Adminuser.findByBbb",query="select * from Adminuser where name=?1 ")
})
public class Adminuser implements Serializable {}
前三个方法将会调用AdminUser类上标识的@NamedQuery方法进行查询 findByLoginId将使用关键字拼接进行查询
@Repository
public interface AdminUserRepository extends JpaRepository<Adminuser,String>,JpaSpecificationExecutor<Adminuser>{
Adminuser findByName(String loginId);
Adminuser findByCcc(String loginId);
Adminuser findByBbb(String loginId);
Adminuser findByLoginId(String loginId);
}
3.@NamedNativeQueries
执行多组原生SQL
@NamedNativeQueries({
@NamedNativeQuery(name = "countGroup",
query = "SELECT g.`C_GROUP_ID` id,g.`C_NAME` name,COUNT(m.N_ID) count FROM `t_wx_group` g
LEFT JOIN `t_wx_material` m ON g.`C_GROUP_ID`=m.`C_GROUP_ID`
WHERE g.`C_TYPE`=?1 GROUP BY g.`C_GROUP_ID` ORDER BY g.`N_ID` ",
resultSetMapping = "returnMap")
})
@SqlResultSetMappings({ @javax.persistence.SqlResultSetMapping(name = "returnMap",
classes = {@ConstructorResult(
targetClass = GroupVO.class,
columns = { @ColumnResult(name = "id", type = String.class),
@ColumnResult(name = "name", type = String.class),
@ColumnResult(name = "count", type = Integer.class) }) }), })
public class Group implements Serializable {}
resultSetMapping表示结果集映射,使用@SqlResultSetMappings来填充;此处表示将结果集封装成GroupVO对象,
@ConstructorResult表示使用的构造器,即此处为 new GroupVO(id,name,count)
还有可选为@EntityResult 即返回一个带@Entity注解的实体,实体所有属性必须存在,否则报错
@ColumnResult即只返回结果集,Object[] ;spring data jpa默认查询返回就是Object[] List
@Query("select from Adminuser where loginId = ?1 ")
Adminuser findByLoginId(String loginId);
@Query(value="delete from t_role_user where c_userid = ?1 ",nativeQuery=true)
@Modifying
void delRole(String uId);
@Query(name="countGroup")
List<GroupVO> countGroup(String type);
@Query(value=" UPDATE `t_wx_material` SET C_GROUP_ID=:gid WHERE C_MID in(:mids) ",nativeQuery=true)
@Modifying
void updateGroup(@Param(value = "mids") List<String> mids,@Param(value = "gid") String gid);
默认使用JPQL进行查询,nativeQuery=true表示使用原生sql进行查询,当sql操作为更新操作(增删改)时,需要加入@Modifying标注(因为事务默认是只读的)
执行某个定义好的NamedNativeQuerie NamedQuery,当没有name属性时,默认寻找此Repository对应的实体里与方法名对应的数据 即类似上面的Adminuser.findByName
@Param表示查询里的占位参数名,如果对同一个参数有多个值时,使用List,使用数组将无效