要实现Spring Data JPA查询结果返回Map或自定义的实体类,需要完成以下步骤:
1.定义自定义实体类
创建一个自定义实体类,在其中定义需要查询的属性,对应数据库中的列:
@Entity
public class CustomEntity {
@Id
private Long id;
private String name;
@Column(name = "created_time")
private Date createdTime;
// getter、setter 方法
}
2.编写自定义查询方法
在Repository接口中定义自定义查询方法,通过@Query注解指定查询语句,使用SELECTE NEW的方式返回自定义实体类:
public interface CustomEntityRepository extends JpaRepository<CustomEntity, Long> {
@Query("SELECT NEW com.example.CustomEntity(u.id, u.name, u.createdTime) FROM User u WHERE u.name LIKE %?1%")
List<CustomEntity> findCustomEntities(String nameKeyword);
}
其中SELECT NEW语句中的com.example.CustomEntity是自定义实体类的全类名。
3.查询并返回结果
在Service层调用自定义查询方法,将查询结果返回:
@Service
public class CustomEntityService {
@Autowired
private CustomEntityRepository customEntityRepository;
public List<CustomEntity> findEntities(String keyword) {
return customEntityRepository.findCustomEntities(keyword);
}
}
至此,就可以通过自定义实体类和自定义查询方法,返回Map或自定义实体类形式的查询结果了。
下面给出两个示例,以更好地理解上述步骤:
示例一
假设存在一个用户表,其中有id、name和created_time三个列,需要查询所有姓名含有“张”的用户信息,并以自定义实体类形式返回。则可以按照以下步骤进行:
1.定义自定义实体类
@Entity
public class CustomEntity {
@Id
private Long id;
private String name;
@Column(name = "created_time")
private Date createdTime;
// getter、setter方法
}
2.编写自定义查询方法
public interface CustomEntityRepository extends JpaRepository<CustomEntity, Long> {
@Query("SELECT NEW com.example.CustomEntity(u.id, u.name, u.createdTime) FROM User u WHERE u.name LIKE %?1%")
List<CustomEntity> fiindCustomEntities(String nameKeyword);
}
3.查询并返回结果
@Service
public class CustomEntityService {
@Autowired
private CustomEntityRepository customEntityRepository;
public List<CustomEntity> findEntities(String keyword) {
return customEntityRepository.findCustomEntities(keyword);
}
}
示例二
假设存在一个学生表,其中有id、name、gender和age四个列,需要查询所有年龄大于18岁的学生信息,并以Map形式返回。则可以按照以下步骤进行:
1.编写自定义查询方法
public interface StudentRepository extends JpaRepository<Student, Long> {
@Query("SELECT new map(s.name as name, s.age as age, s.gender as gender) FROM Student s WHERE s.age > 18")
List<Map<String, Object>> findStudentsByAge();
}
2.查询并返回结果
@Service
public class StudentService {
@Autowired
private StudentRepository studentRepository;
public List<Map<String, Object>> findStudentsByAge() {
return studentRepository.findStudentsByAge();
}
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Data JPA实现查询结果返回map或自定义的实体类 - Python技术站