标签: JPA

Spring Data JPA 通过 Query DSL查询数据

昨天写 JPA的查询方式,里面关于QueryDSL的部分没有写,当时因为一直报错,现在错误解决了,补上 Spring Data JPA 通过 Query DSL 查询的实现。另2篇:Spring Data JPA 的查询方式You need to run build with JDK or have tools.jar on the classpathpom<dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-apt</artifactId></dependency><dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-jpa</artifactId></dependency><dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.7</version> <scope>system</scope> <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath></dependency>官网和一些其他示例并没有提及tools,但没有这个会报错的,IDE里面就报了。除了上面的配置还要添加构建插件

JPA 实体继承共用一个表

在用JPA的时候,如果每个实体都有一些共通的属性,例如创建时间,最后修改时间,那可以把这些属性放到一个公共实体里,用 @MappedSuperclass 标记,然后其它实体继承这个类即可。这个是简单的方式,下面说一下真正的实体继承。先说一个场景,开发一个产品实体,过几天产品狗告诉你,有个特殊的产品钢笔,这里有2个特殊的属性,品牌和钢笔的粗细,在你还没发火之前,又告诉你还有另外一个特殊的产品订书器,它有长和宽。按照面向对象的思维,你需要创建另外2个实体然后继承之前的实体来实现。代码如下:

Spring Data JPA 分页查询

Spring Data JPA 自带了分页功能,分页功能有2个查询,分别是:查询总记录数;根据每页显示数量和起始位置查询一页数据;查询总记录数的几种方式1、用Spring Data自带的方法查询//没有参数,返回对应类型的所有记录数,这里为什么没说返回整张表的记录数?因为有时候可以多个实体共用一个表。org.springframework.data.repository.CrudRepositorylong count();//下面2个是带条件查询总记录数的方法org.springframework.data.repository.query.QueryByExampleExecutor<S extends T> long count(Example<S> example);org.springframework.data.jpa.repository.JpaSpecificationExecutorlong count(Specification<T> spec);

Spring Data JPA 多条件查询

Spring Data JPA 查询很方便,但做搜索功能时,条件比较多,而且条件可输入可不输入,这时候就不能用方法命名的方式查询,可以自己写JPQL,但条件多了简直就是作死,以前写过下面的代码://条件必填SELECT * FROM UserModel AS u WHERE u.sex = :sex AND u.age = :age//条件可选查询SELECT * FROM UserModel AS u WHERE (u.sex = :sex OR :sex == null) AND (u.age = :age OR :age == null)