1

我正在构建一个具有分层架构模式的应用程序,具体来说controller -> service -> repository,存储库层理想地执行数据库事务并将其返回到链中。我还有一个models包,其中包含用于从数据库中纯粹定义数据类型的案例类。

我使用scalikejdbcGen <table_name> <class_name>SBT 中的命令生成我的存储库文件,其中包含一个案例类和一个伴随对象。问题是我想定义一个在此之外的自定义类型,它只是用于定义数据类型。理想情况下,这个自动生成的存储库文件应该只导入它并用作事务中的返回类型。问题是出现了与别名相关的语法错误。

我想要的设置是这样的:

型号/简介:

case class Profile(profileId: Int, name: String)

存储库/配置文件存储库:

object ProfileRepository extends SQLSyntaxSupport[Profile] {

    override val autoSession = AutoSession

    override val tableName = "profile"
    override val columns = Seq("profile_id", "name")

    def apply(p: SyntaxProvider[Profile])(rs: WrappedResultSet): Profile = apply(p.resultName)(rs)

    def apply(p: ResultName[Profile])(rs: WrappedResultSet): Profile = new Profile(
        profileId = rs.get(p.profileId),
        name = rs.get(p.name)
    )

    val p = Profile.syntax("p")

    def count(): Long = DB readOnly { implicit session =>
        withSQL(select(sqls.count).from(Profile as p)).map(rs => rs.long(1)).single().apply().get
    }
}

如果能够简单地指定一个返回类型,比如Seq[Profile],并使用存储库仅用于数据库交互,那就太好了。这样,(如果需要)我可以使用这种类型在整个应用程序的其余部分中定义其他功能。我确信这是一个容易解决的问题,但我就是找不到解决方案。如何为仅使用单独案例类进行输入的 db 交互创建存储库?

谢谢您的帮助!

4

0 回答 0