【问题标题】:How can I get data from DB in my service layer?如何从我的服务层中的数据库获取数据?
【发布时间】:2021-06-23 04:21:46
【问题描述】:

我的存储库getUserByNameAndAge() 中有一个方法,它通过2 个参数从数据库返回一个用户。在我的服务层中,我需要检查,如果我没有请求名称的 DB 用户,我需要抛出一些自定义 InvalidUserNameException,如果我没有这样年龄的 db 用户,我需要抛出一些自定义InvalidUserAgeException。但是我真的不明白我该怎么做。

这是我的仓库

interface UserRepository : JpaRepository<CountryLocalization?, Long?> {
    @Query(value = "SELECT u.name, u.age FROM users AS u" +
            " WHERE u.name = :name AND u.age = :age",
        nativeQuery = true)
    fun getUserByNameAndAge(
        @Param("name") name: String,
        @Param("age") age: Int
    ): User?
}

那么我该如何实现我的服务呢?

@Service
class UserServiceImpl (val userRepository: UserRepository) : UserService {
    override fun getUserByNameAndAge(name: String, age: Int): User {    
        /// implementation   
    }
}

【问题讨论】:

  • 首先,您需要真正使用您的存储库来获取数据。然后你可能需要改变你的方法:1)通过 id 获取用户,如果你没有得到任何东西,则抛出 InvalidUserNameException;2)如果你有用户检查年龄,如果错误则抛出 InvalidUserAgeException。只需一次查询,您就可以检查姓名和年龄的组合,但如果没有得到任何结果,您将无法判断什么是无效的。

标签: java sql spring-boot kotlin


【解决方案1】:

您不应该实现存储库接口,而是将其注入到您的服务中。您可以使用 @Autowired 注释来做到这一点,并在您的方法中简单地使用它。像这样的:

@Service
class UserServiceImpl : UserService {
    @Autowired
    lateinit var userRepository:UserRepository

    fun getUserByNameAndAge(name: String, age: Int): User =
        userRepository.getUserByNameAndAge(name, age)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多