SpringBoot-MyBatis-MySQL中如何使用SelectById(object_id)获取特定对象?

How to Get Specific Object Using SelectById(object_id) in SpringBoot-MyBatis-MySQL?

我设法通过在 SpringBoot-MyBatis 后端创建一个 SELECT 语句来“获取所有对象”,例如:

AppRestController.java

//get full list of actors 
@GetMapping("/actors")
public List<Actor> selectAllActors(){
        return actorMapper.selectAllActors();
}

当您在浏览器中键入“localhost:9090/actors”时,它将 return 我的 MySQL 数据库中的所有演员对象。那挺好的。现在我想把它的复杂性提高一个档次。

我想通过 actor_id 获取单个对象,例如:

//get specific actor by actor_id. this is where im stuck
@GetMapping("/actors/id")
public Actor selectActorById(int id){
     return actorMapper.selectActorById(id);
}

注意我的 @GetMapping。我想做的是当我输入类似 "localhost:9090/actors/1" 在浏览器中,它将 return 来自数据库的 actor 对象,id = 1,依此类推。

这是相关文件。

ActorMapper.xml

<mapper namespace="com.helios.mybatissakila.mappers.ActorMapper">

    <resultMap id="ActorResultMap" type="Actor">
        <id column="actor_id" property="actor_id" jdbcType="INTEGER"/>
        <result column="first_name" property="first_name" />
        <result column="last_name" property="last_name" />
        <result column="last_update" property="last_update" />
    </resultMap>

<select id="selectAllActors" resultMap="ActorResultMap">
        select * from actor
</select>

<select id="selectActorById" resultMap="ActorResultMap">
        select * from actor where actor_id = #{actor_id}
</select>

</mapper> 

ActorMapper.java

@Mapper
public interface ActorMapper {
    //this is now working
    List <Actor> selectAllActors();
    //this is where im stuck
    Actor selectActorById(int id);
}

感谢您的帮助。 更新:

所以我确实改变了

@GetMapping("/actors/id")
public Actor selectActorById(int id){
     return actorMapper.selectActorById(id);
}

@GetMapping("/actors/{id}")
public Actor selectActorById(Integer id){
     return actorMapper.selectActorById(id);
}

显然,没有错误,但我得到一个空白屏幕。为什么?我的 MySQL 数据库中有一个数据,其 actor_id 等于 1.

按如下方式更改您的获取映射:

@GetMapping("/actors/{id}")
public Actor selectActorById(@PathVariable(name="id") int id){
     return actorMapper.selectActorById(id);
}

您的 {id} 将是路径变量,它将映射到方法的 id 参数

(代表问题作者发布解决方案).

您必须包含@Abhijeet 提到的@PathVariable 注释:

    @GetMapping("/actors")
    public Actor selectActorById(@RequestParam("id") int id){
        return actorMapper.selectActorById(id);//use "localhost:9090/actors?id=1" to Visit

    }