Spring Data Jpa 查询

来源:互联网 发布:磁铁车牌号码贴 淘宝 编辑:程序博客网 时间:2024/05/22 04:47

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将使用关键字拼接进行查询

@Repositorypublic 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,使用数组将无效

0 0
原创粉丝点击