首页 > 解决方案 > Spring-Data Mysql 在数据库中找不到名称

问题描述

我是 Spring-Data Mysql 的新手,我创建了一个小方法,让它从名字列表中给我一个名字,它返回我输入日期最早的名字。不幸的是,当我得到它时,它会返回给我:

D:\>curl -G localhost:8080/demo/first  -d name=Biagio
{"timestamp":"2020-10-02T09:29:33.704+00:00","status":404,"error":"Not Found","message

我已经尝试了所有这些,但到目前为止我无法成功。下面是方法和相关控制器

UserRepositoryImpl.java


package com.example.accessingdatamysql;






import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;


import org.springframework.stereotype.Component;

@Component
public class UserRepositoryImpl implements UserRepository {
    
    private final EntityManager em;
    
    public UserRepositoryImpl(EntityManager entityManager) {
        this.em = entityManager;
    }


    @Override
    public User findFirstByName(String name) {
            CriteriaBuilder builder = em.getCriteriaBuilder();
            CriteriaQuery<User> criteria = builder.createQuery(User.class);
            Root<User> root = criteria.from(User.class);
            criteria.select(root).where(builder.equal(root.get("name"), name));
            criteria.orderBy(builder.asc(root.get("timestamp")));
            TypedQuery<User> query = em.createQuery(criteria).setMaxResults(1);
            return query.getSingleResult();
            
        }
    
    
    @Override
//  per la creazione//
    public void create(User entity) {
        em.persist(entity); 
    }
           
 }

 

主控制器.java

package com.example.accessingdatamysql;






import javax.persistence.NoResultException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller 
@RequestMapping(path="/demo") 
public class MainController {
  @Autowired 
         
  private UserRepository userRepository;

  @Transactional
  @PostMapping(path="/add")
  public @ResponseBody String addNewUser (@RequestParam String name
      , @RequestParam String email,@RequestParam String surname) 
  {
 

    User n = new User();
    n.setName(name);
    n.setSurname(surname);
    n.setEmail(email);
    userRepository.create(n);
    return "Saved";
  }



 


  @GetMapping("/first")
   User one(@RequestParam String name) {
   System.out.print(name);
   try { return userRepository.findFirstByName(name); 
   } catch (NoResultException nre) { 
       return null; } 
  }
}
  

我为所有内容添加了 User 和 UserRepository.java

用户.java

package com.example.accessingdatamysql;

import java.sql.Timestamp;
import java.time.Instant;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;


@Entity 
public class User {
  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  private Integer id;
 
  public String name;

  private String email;
  
  private String surname;
  

  
  
  @Column(name="stmp", columnDefinition = "TIMESTAMP (6)")
  Timestamp timestamp = Timestamp.from(Instant.now());

public void setTimestamp(Timestamp timestamp) {
this.timestamp = timestamp;
}

 public Timestamp getTimestamp() {
return timestamp;
}


 public String getSurname() {
     return surname;
 }
 
 public  void setSurname(String surname) {
     this.surname = surname;
 }
 
  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;
  }

  public String getEmail() {
    return email;
  }

  public void setEmail(String email) {
    this.email = email;
  }
}

用户存储库.java

package com.example.accessingdatamysql;





import org.springframework.stereotype.Repository;


@Repository
public interface UserRepository {
    User findFirstByName(String name);
    void create(User entity);
    
}

编辑:我插入了这个小项目引用的数据库:

+----+---------------------+--------+----------------------------+---------+
| id | email               | name   | stmp                       | surname |
+----+---------------------+--------+----------------------------+---------+
| 32 | mirketto90@yahoo.it | Mirko  | 2020-10-01 12:31:47.827000 | NULL    |
| 36 | biagio@gmail.com    | Biagio | 2020-10-01 16:31:31.687000 | Vaso    |
| 37 | biagio@gmail.com    | Biagio | 2020-10-01 16:31:50.077000 | Vaso    |
| 38 | biagio@gmail.com    | Biagio | 2020-10-01 18:35:45.992000 | Vaso    |
+----+---------------------+--------+----------------------------+---------+

标签: javaspringspring-bootspring-mvc

解决方案


我看到的第一件事如下:

  • 你的方法/demo/first是不公开的。
  • 调用此端点的正确方法应该是curl localhost:8080/demo/first?name=Biagio -H "Accept: application/json"

推荐阅读