一、项目文件结构树
bash
src/main/java/com/example/
├── controller
│ └── UserController.java
├── service
│ ├── UserService.java
│ └── impl
│ └── UserServiceImpl.java
├── mapper
│ └── UserMapper.java
└── entity
└── User.java
src/main/resources/
├── mapper
│ └── UserMapper.xml
└── application.properties
二、改动前
- UserController.java
java
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.getUserById(id);
}
}
- UserService.java
java
public interface UserService {
User getUserById(Long id);
}
- UserServiceImpl.java
java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User getUserById(Long id) {
return userMapper.selectUserById(id);
}
}
- UserMapper.java
java
@Mapper
public interface UserMapper {
User selectUserById(@Param("id") Long id);
}
- UserMapper.xml
xml
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectUserById" resultType="com.example.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
三、修改后
- UserController.java
java
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public List<User> getAllUsers() { // 改为返回列表,不再接收路径参数
return userService.getAllUsers();
}
}
- UserService.java
java
public interface UserService {
List<User> getAllUsers(); // 方法名和返回值都改变
}
- UserServiceImpl.java
java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> getAllUsers() { // 实现无参方法
return userMapper.selectAllUsers(); // 调用 Mapper 中的无参方法
}
}
- UserMapper.java
java
@Mapper
public interface UserMapper {
List<User> selectAllUsers(); // 方法签名去掉参数,返回列表
}
- UserMapper.xml
xml
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectAllUsers" resultType="com.example.entity.User">
SELECT * FROM user <!-- SQL 中去掉了 WHERE 条件 -->
</select>
</mapper>
改的不对的话容易报错NullPointerException
一定仔细检查XML及对应的mapper文件等