我正在构建一个具有分层架构模式的应用程序,具体来说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 交互创建存储库?
谢谢您的帮助!