1,常规查询
@ToString
@Getter
@Setter
@Entity
@Table(name="user")
@ApiModel
@JsonIgnoreProperties
public class User implements Serializable {
@Id
private int qq;
...
//如果命名规范,不加@Column也可以
}
@Repository
public interface UserDao extends JpaRepository<User,Integer> {
//查询数量
long countByArea(int area);
//save和saveAndFlush 都支持插入和更新
// save不会立刻提交到数据库,可能只是修改在内存中的;saveAndFlush则立刻提交生效
//实体包含主键时执行更新,没有被赋值的字段会被null覆盖,所以一般是先获取数据库对象再修改保存,要么就自定义sql
@Override
User saveAndFlush(User user);
//通过指定字段内容查找,可连接AND、OR、LIKE、IS等
//实体属性不加@Column时,数据库字段user_name 必须使用驼峰命名userName
List<User> getByUserName(String s);
//输入字段必须与实体中定义类型保持一致
List<User> getByCreateTimeAfter(Date s);
//在执行update或者delete方法时,必须加上注解@Modifying 和 @Transactional。
@Transactional
@Modifying
@Query("update User set password=:password where qq=:qq ")
Integer updateUserPassword(@Param("qq") int qq, @Param("password") String password);
//分页排序
//like语句传参手动加% pageable的page从0开始
Page<User> getByUserNameLike(String username, Pageable pageable);
List<User> getByUserNameLike(String username, Sort sort);
}
@Test
public void japtest() {
//查询指定时间之后注册的用户
Date a = new Date(2019,3,30);
List<User> aa = dao.getByCreateTimeAfter(a);
//名称包含99,按照prov排序的第一页,,每页2条,默认升序
Page<User> bb = dao.getByUserNameLike("%99",PageRequest.of(0, 2,Sort.by("prov")));
Page<User> cc = dao.getByUserNameLike("%99",PageRequest.of(0, 2,Sort.by(Sort.Direction.DESC,"prov")));
//按照prov和username倒序排列
List<String> sortProperties = new ArrayList<>();
sortProperties.add("prov");
sortProperties.add("username");
Sort sort = new Sort(Sort.Direction.DESC,sortProperties);
List<User> dd = dao.getByUserNameLike("%99",sort);
System.out.println("-----------------"+cc.getSize());
for (User u:cc.getContent()) {
System.out.println(u.toString());
}
}
2,复杂查询
用到再补充
3,接口名关键字
