spring-data-jpa简单使用(一)

1:可以使用原生态的sql语句查询数据库

    @Query(value = "select meetings.* FROM tenant\n" +
            "LEFT JOIN meeting_domain_binding ON tenant.id = meeting_domain_binding.tenant_id\n" +
            "LEFT JOIN meetings ON meeting_domain_binding.id = meetings.meeting_domain_binding_id\n" +
            "WHERE tenant.id = ?1",nativeQuery = true)
    List<Meeting> findByTenantId(String id);

       需要加上@Query注解,nativeQuery属性表示是否使用原生态sql,默认情况下是false。

   

在使用这个sql的时候还遇到过很多的坑,建议还是不要使用别名;查询的时候用*而不要用表中的一个属性。我之前只查了meetings的name,但是报了tenant.id没有找到。改成*之后就好了

2:如果需要修改数据的话

           1:使用@Query注解

           2:使用@Modifying注解

3:动态分页查询

         需要对象:Sort 用来排序

                           PageRequest 用来分页

                           Specification 拼接查询语句

      

dao层:

public interface UserRepository extends JpaRepository<User,Long>,JpaSpecificationExecutor<User>{
    
}

service层:

   

@Service("userServiceImpl")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;


    @Override
    public List<User> findUsers(User user, int currentPage, int pageSize) {

        Sort sort = new Sort(Sort.Direction.DESC,"age");
        PageRequest pageRequest = PageRequest.of(currentPage,pageSize,sort);

        Specification<User> queryCondition = new Specification<User>() {
            @Nullable
            @Override
            public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
                List<Predicate> predicates = new ArrayList<>();

                if (user.getNickname() != null && user.getNickname().isEmpty()){
                    predicates.add(cb.like(root.get("nickname"),user.getNickname() + "%"));
                }

                if (user.getAge() != 0){
                    predicates.add(cb.greaterThan(root.get("age"),20));
                }

                return cb.and(predicates.toArray(new Predicate[predicates.size()]));
            }
        };

        List<User> users = userRepository.findAll(queryCondition,pageRequest).getContent();

        return users;
    }
}

  运行结果:

[
    {
        "id": 3,
        "nickname": "李四",
        "mobile": "56",
        "age": 54
    },
    {
        "id": 2,
        "nickname": "张三",
        "mobile": "5456143251",
        "age": 32
    },
    {
        "id": 4,
        "nickname": "子龙",
        "mobile": "186376859----",
        "age": 21
    }
]

猜你喜欢

转载自blog.csdn.net/qq_36957587/article/details/84627838