spring cloud 搭建(多JPA,JPA分页)

Posted 正怒月神

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring cloud 搭建(多JPA,JPA分页)相关的知识,希望对你有一定的参考价值。

随着项目的迭代。

我们在老项目中,把service和dao都放在相同module下,已经不合适了。

service和dao越来越臃肿。如下所示

 

 

我们就开始认为每个微服务,都拥有自己的model,dao,service。

而上图的module只是充当基类存在的使用。

 

这个时候JPA就会变成多个。

那么我们需要如何配置呢?

 

正文:

还是以 https://blog.csdn.net/hanjun0612/article/details/105239557 中service1服务举例。

我们在里面创建 model,dao.service

 

 springboot版本

<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.14.RELEASE</version>

 

一,启动类

通过这个指定JPA扫描特定的包!

@EnableJpaRepositories(basePackages = "com.test.service1.dao")

@SpringBootApplication
@EnableEurekaClient
@EnableJpaRepositories(basePackages = "com.test.service1.dao")
public class Service1Application {
public static void main(String[] args) {
SpringApplication.run(Service1Application.class, args);
}
}

 

 二,数据库(只需要id,name)


 

三,Model

@Entity的包:[Maven: org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final] 

@Data
@Entity
@Table(name="test",catalog = "testdb")
public class Test {
private Integer id;
private String name;

@Id
public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

 

四,Dao

JpaRepository的包:[Maven: org.springframework.data:spring-data-jpa:1.11.13.RELEASE]

方法一:(有警告,但不影响使用)

@Repository
public interface TestDao extends JpaRepository<Test,Integer> {
@Query(value="select * from test where name=:name ORDER BY ?#{#pageable}",nativeQuery=true)
Page<Test> findList(@Param("name") String name, Pageable pageable);
}

 

这里有个警告,但是不影响使用:Parameter with that position [1] did not exist

然后我修改成方法二,就可以了

 

方法二

/*#pageable*/   作为注释(好奇怪的写法,警告居然就没了。)

@Repository
public interface TestDao extends JpaRepository<Test,Integer> {
@Query(value="select * from test where name=:name /*#pageable*/",nativeQuery=true)
Page<Test> findList(@Param("name") String name, Pageable pageable);
}

 

五,Service

service

public interface testService {
Page<Test> findList(String name);
}

 

Impl

@Service("testservice")
public class testImpl implements testService {
@Autowired
TestDao testDao;

@Override
public Page<Test> findList(String name) {
//参数1:当前页,【下标0开始】
//参数2:pageSize
//参数3:排序方式
//参数4:排序根据
Pageable pageable = new PageRequest(1,3, Sort.Direction.DESC,"id");
Page<Test> page=testDao.findList(name,pageable);
return page;
}
}

 

六,Controller

 

@RestController
@RequestMapping("test")
public class TestController {
@Value("${isDebug}")
private String isDebug;
@Autowired
testService testService;

@GetMapping(value = "/hello")
public String hello(){
return isDebug;
}

//JPA测试
@PostMapping(value="/test")
public Page<Test> test()
{
Page<Test> page=testService.findList("t3");
return page;
}
}

 

七,测试



以上是关于spring cloud 搭建(多JPA,JPA分页)的主要内容,如果未能解决你的问题,请参考以下文章

Spring-Cloud、Hystrix 和 JPA - LazyInitializationException

spring Data jpa 一对多关联 动态查询怎么写

在Spring Boot中使用Spring-data-jpa实现分页查询(转)

随便说说Spring Data JPA(包含分页,复合查询)

Spring Data JPA系列4:Spring声明式事务处理与多数据源支持

16 搭建Spring Data JPA的开发环境