java - 如何检查数据库中的值 Java

标签 java mysql spring-boot

<分区>

我正在处理一个带有 Json 数据的 Post 请求,如何将它们添加到数据库中,以便检查数据库中是否已经存在该用户,如果没有,则创建一个新的行,如果有,则更新该用户的消息。

我在请求中接受的内容:电话、消息

我不太明白如何实现它。

用户 Controller

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserRepo userRepo;
    @PostMapping(consumes = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE})
    public String createUser(@Valid @RequestBody User requestUserDetails) {
        userRepo.save(requestUserDetails);
        return "The message delivered.";
    }
}

用户

    @Entity
    @Table(name = "ApiTable", schema = "TestApi")
    public class User {
        @Id
        @GeneratedValue(strategy= GenerationType.AUTO)
        private Integer id;

        private String phone;
        private String message;


        public String getPhone() {
            return phone;
        }

        public void setPhone(String phone) {
            this.phone = phone;
        }

        public String getMessage() {
            return message;
        }

        public void setLastName(String message) {
            this.message = message;
        }
    }

用户库

public interface UserRepo extends CrudRepository<User, Long> {
}

申请

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

关键用户

public class KeyUser implements Serializable {
    private String phone;
    private  String message;
}

申请

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

最佳答案

嗯,userRepo.save(requestUserDetails)已经为你做了。

查看save的实现SimpleJpaRepository<T, ID> 中的方法 Spring 的课。

SimpleJpaRepository.java

@Transactional
public <S extends T> S save(S entity) {

    if (entityInformation.isNew(entity)) {
        em.persist(entity);
        return entity;
    } else {
        return em.merge(entity);
    }
}

org.springframework.data.jpa.repository.support.SimpleJpaRepository<T, ID>实现 JpaRepository<T, ID> ,由 CrudRepository<T, ID> 继承.

这已经检查了对象是否已经存在于数据库中。您只需提供填充了主键的实体。

如果未填充主键,则 Spring 无法检查对象是否存在。因此将创建一个新行。

如果对象已经存在,它将调用EntityManager.merge如果没有,它将调用 EntityManager.persist .

看看:

User use = new User();
user.setId(1);
user.setPhone("123");
user.setMessage("Hello");

userRepository.save(user);

在这种情况下,如果 Userid == 1存在于数据库中,其信息将被合并。

现在,如果出于某种原因,这不适合您,那么您将不得不手动执行此操作,方法是按用户 ID 搜索用户,然后对其应用一些规则。

像这样:

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserRepo userRepo;

    @PostMapping(consumes = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE})
    public String createUser(@Valid @RequestBody User requestUserDetails) {
        User user = requestUserDetails;

        if(requestUserDetails.getId() != null) {
            Optional<User> userOpt = userRepo.findById(requestUserDetails.getId());
            if (userOpt.isPresent()) {
                user = userOpt.get();
                // the user exists... do something..
            }
        }

        // at the end, save the user anyway (event if it exists or not)
        userRepo.save(user);
        return "The message delivered.";
    }
}

关于java - 如何检查数据库中的值 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58627946/

相关文章:

java - Maven 无法解析 org.apache.velocity lib

mysql - 如何转义 laravel 中的双引号和左括号?

mysql - 如何在 CodeIgniter 中将 unicode 表情符号存储到 MYSQL

mysql - 为什么在 vb 中替换 datagridview 值时会出错?

java - 无法使用在 WebSphere 上运行的 SpringBoot 应用程序找到 Webjar

java - 如何使用 Java API 获取所有字段的构面值

java 8 如何获得多个属性的不同列表

java - 如何使用replaceAll()来替换算术运算(即0+1)

java - 使用 Spring Boot (JPA) 始终打开 AWS RDS 10 个连接

spring-boot Autowired DiscoveryClient RestTemplate UnknownHostException