Skip to content

SmartAccess 快速开始

下面以 Hibernate 6 和 H2 为例。SmartAccess 会扫描 Access 接口并生成实现,再由 Rain 容器注入。

添加依赖

kotlin
repositories {
    mavenCentral()
    maven("https://maven.cnb.cool/IceCream/maven/-/packages/")
}

dependencies {
    implementation("com.IceCreamQAQ.SmartAccess:hibernate6:1.0.0-DEV11")
    runtimeOnly("com.h2database:h2:<version>")
}

定义实体与 Access

kotlin
import jakarta.persistence.*
import smartaccess.jpa.access.JpaAccess

@Entity
data class Student(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id: Int? = null,
    var name: String = "",
    var age: Int = 0,
)

interface StudentAccess : JpaAccess<Student, Int> {
    fun findByName(name: String): List<Student>
    fun deleteByName(name: String): Int
}

注入并使用

kotlin
@EventListener
class StartupListener(
    private val studentAccess: StudentAccess,
) {
    @SubscribeEvent
    fun AppStatusEvent.AppStarted.load() {
        println(studentAccess.findByName("Alice"))
    }
}

构造器注入优先于 lateinit 字段注入,依赖关系更明确,也更容易测试。

配置数据库

src/main/resources/conf/project.properties

properties
rain.scanPackages=com.example
db.provider=smartaccess.hibernate.HibernateService
db.driver=org.h2.Driver
db.url=jdbc:h2:./db/app
db.username=sa
db.password=
db.dialect=org.hibernate.dialect.H2Dialect

Hibernate 原生选项可以放入 src/main/resources/hibernate.properties,例如:

properties
hibernate.show_sql=true
hibernate.use_sql_comments=true

启动应用

使用 Rain 的 FullStackApplicationLauncher.launch() 启动。应用关闭时,SmartAccess 的数据库服务会随 Rain 生命周期释放资源。

基于 Apache License 2.0 发布