Spring Data Jpa 查询

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值