SpringDataJpa数据库操作

SpringDataJpa数据库操作_第1张图片
通过上面,基本CRUD和基本的业务逻辑操作都得到了解决,我们要做的工作少到仅仅需要在UserRepository接口中定义几个方法,其他所有的工作都由spring-data-jpa来完成。

        那么我们传统的JDBC的做法是使用很多的if语句根据传过来的查询条件来拼sql,mybatis的做法也类似,由于mybatis有强大的动态xml文件的标签,在处理这种问题的时候显得非常的好,但是二者的原理都一致,那spring-data-jpa的原理也同样很类似,这个道理也就说明了解决多表关联动态查询根儿上也就是这么回事。

        那么spring-data-jpa的做法是怎么的呢?有两种方式。可以选择其中一种,也可以结合使用,在一般的查询中使用其中一种就够了,就是第二种,但是有一类查询比较棘手,比如报表相关的,报表查询由于涉及的表很多,这些表不一定就是两两之间有关系,比如字典表,就很独立,在这种情况之下,使用拼接sql的方式要容易一些。下面分别介绍这两种方式。

        a.使用JPQL,和Hibernate的HQL很类似。

        在“Repository文件夹”说道了在UserRepository接口的同一个包下面建立一个普通类UserRepos-itoryImpl来表示该类的实现类,同时前面也介绍了完全不需要这个类的存在,但是如果使用JPQL的方式就必须要有这个类。


>public class StudentRepositoryImpl {

    @PersistenceContext

    private EntityManager em;

    @SuppressWarnings("unchecked")

    public Page search(User user) {

        String dataSql = "select t from User t where 1 = 1";

        String countSql = "select count(t) from User t where 1 = 1";

        if(null != user && !StringUtils.isEmpty(user.getName())) {

            dataSql += " and t.name = ?1";

            countSql += " and t.name = ?1";

        }

        Query dataQuery = em.createQuery(dataSql);

        Query countQuery = em.createQuery(countSql);

        if(null != user && !StringUtils.isEmpty(user.getName())) {

            dataQuery.setParameter(1, user.getName());

            countQuery.setParameter(1, user.getName());

        }long totalSize = (long) countQuery.getSingleResult();

        Page page = new Page();

        page.setTotalSize(totalSize);

        List data = dataQuery.getResultList();

        page.setData(data);

        return page;

    }

}


你可能感兴趣的:(SpringDataJpa数据库操作)