Spring Boot陈恒_JAVA8与JAVA11

(1) 2024-09-16 12:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
Spring Boot陈恒_JAVA8与JAVA11,希望能够帮助你!!!。

### 前言

一直都在用MyBatis,感觉很好用,自己也熟悉。考虑到Spring Boot天生支持JPA,而且Hibernate也支持

分布式事务,有成熟的解决方案,值得研究一下

开发环境:

OS: Mac 10.11.6

IDE: IDEA

Build: Maven

### 引入依赖

```

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<scope>runtime</scope>

</dependency>

```

###JPA Config

```

@Order(Ordered.HIGHEST_PRECEDENCE)

@Configuration

@EnableTransactionManagement(proxyTargetClass = true)

@EnableJpaRepositories(basePackages = "tech.lingyi.**.dao")

@EntityScan(basePackages = "tech.lingyi.**.entity")

public class JpaConfiguration {

@Bean

PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor(){

return new PersistenceExceptionTranslationPostProcessor();

}

}

```

### 业务接口

```

@Repository

public interface UserRepository extends JpaRepository<User, Long> {

Page<User> findAll(Specification<User> s, Pageable pageRequest);

}

```

JPA 实现了几乎我们所用的所有方法,你需要继承就可以了,提高了生产效率,解放了广大码农,可以去约妹子了。

### JPA CRUD 和 联合条件、分页查询

* insert

```

public User insert(){

User user = new User();

user.setNickname("neal");

return userRepository.save(user);

}

```

* updateByPK

```

public User updateByPK(){

User user = new User();

user.setId(31L);

user.setNickname("lingyi");

return userRepository.save(user);

}

```

* deleteByPK

```

public void deleteByPK(Long id){

userRepository.delete(id);

}

```

* selectByPK

```

public User selectByPK(Long id){

return userRepository.findOne(id);

}

```

* findPage 只分页 没有条件

```

public void findPage(){

Pageable pageable = new PageRequest(0,10, new Sort(

new Sort.Order(Sort.Direction.ASC, "username"),

new Sort.Order(Sort.Direction.DESC, "id"))

);

Page<User> page = userRepository.findAll(pageable);

Assert.notNull(page);

for (User user : page.getContent()){

LOGGER.info("id={}, name={}, department={}, role={}", user.getId(), user.getNickname(), user.getUsername(),"");

}

}

```

* findPage 只分页 没有条件

```

public void findPage(){

Pageable pageable = new PageRequest(0,10, new Sort(

new Sort.Order(Sort.Direction.ASC, "username"),

new Sort.Order(Sort.Direction.DESC, "id"))

);

Page<User> page = userRepository.findAll(pageable);

Assert.notNull(page);

for (User user : page.getContent()){

LOGGER.info("id={}, name={}, department={}, role={}", user.getId(), user.getNickname(), user.getUsername(),"");

}

}

```

* findCriteria, findCriteriaV2 两种方式 关联条件分页查询

```

public Page<User> findCriteria(final User user, int page, int pageSize) throws Exception {

Sort sort = new Sort(Sort.Direction.DESC, "id");

Pageable pageable = new PageRequest(page, pageSize, sort);

return userRepository.findAll((root, query, builder) -> {

List<Predicate> predicates = new ArrayList<>();

if(null != user.getUsername()){

predicates.add(builder.equal(root.get("username").as(Long.class), user.getUsername()));

}

if(null != user.getNickname()){

predicates.add(builder.equal(root.get("nickname").as(String.class), user.getNickname()));

}

query.where(predicates.toArray(new Predicate[predicates.size()]));

return query.getRestriction();

}, pageable);

}

```

OR

```

public Page<User> findCriteriaV2(final User user, int page, int pageSize) throws Exception {

Sort sort = new Sort(Sort.Direction.DESC, "id");

Pageable pageable = new PageRequest(page, pageSize, sort);

return userRepository.findAll((root, query, builder) -> {

Predicate p1 = builder.equal(root.get("username").as(String.class), user.getUsername());

Predicate p2 = builder.equal(root.get("nickname").as(Long.class), user.getNickname());

query.where(builder.and(p1, p2));

return query.getRestriction();

}, pageable);

}

```

### 结束

使用频率最多的都列举出来了,够我们用了。

但是程序员就像偷懒,不想每个domain都要写个XxxRepository,写个基础BaseRepository岂不是节省好多事呢,有空在写吧...

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复