如何检查数据库Java中的值

时间:2019-10-30 14:45:32

标签: java mysql spring-boot

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

我在请求中接受的内容:电话,短信

我不太了解如何实现。

UserController

@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;
        }
    }

UserRepo

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

应用

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

KeyUser

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);
    }
}

2 个答案:

答案 0 :(得分:1)

好吧,userRepo.save(requestUserDetails)已经为您做到了。

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

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.";
    }
}

答案 1 :(得分:0)

要更新对象,可以使用merge方法。如果对象具有id属性,请使用merge,否则保存。