# 入门

我们需要先引入依赖:

libraryDependencies += "io.github.wz7982" % "core_3" % "2.1.1"

如果需要使用内置的jdbc交互功能,使用下面的依赖即可:

libraryDependencies += "io.github.wz7982" % "jdbc_3" % "2.1.1"

在常见的使用场景中,我们需要对数据预先建模,此处使用case class管理,并添加注解,比如我们创建一个“用户”实体类,对应数据库的“用户”表,添加两个字段,其中“id”字段是主键:

import easysql.dsl.*

case class User(@PrimaryKey id: Int, name: Option[String])

然后使用asTable方法生成一个表代理对象:

import easysql.dsl.*

val user = asTable[User]

这样,我们就可以用来构建查询了:

import easysql.dsl.*

// 查询
val q = select (user.*) from user where user.id === 1
// 按主键查询
val f = selectByPk[User](1)

val userRow = User(1, Some("x"))

// 插入
val i = insert(userRow)
// 按主键更新其他字段
val u = update(userRow)
// 按主键插入或更新
val s = save(userRow)
// 按主键删除
val d = delete[User](1)

上面的代码构建出了查询dsl,如果我们需要生成sql字符串的话,我们需要使用.sql方法,并传入数据库类型:

import easysql.dsl.*
import easysql.database.*

val sql: String = q.sql(DB.MYSQL)

到现在为止,还没有与数据库交互,如果需要使用easysql提供的jdbc实现,我们需要配置一下数据库的连接,首先我们需要一个实现了java中DataSource的连接池,你可以选择喜欢的连接池,比如Hikari、Druid、C3P0等:

// 此处省略连接池配置
val dataSource: DataSource = ???

然后我们需要配置日志管理,任意String => Unit都可以作为日志的接收器,此处我们使用given来创建(以java内置的Logger,以及println为例):

import easysql.database.*

// java自带Logger
val logger = java.util.logging.Logger.getLogger("")
given Logger = logger.info

// println
given Logger = println

如果你不想打印查询日志,将Logger指向一个空函数即可:

import easysql.database.*

given Logger = _ => ()

然后可以创建一个JdbcConnection:

import easysql.database.*

val db: JdbcConnection = new JdbcConnection(DB.MYSQL, dataSource)

现在,我们就可以使用这个数据库连接来跟数据库交互了:

val q = select (user) from user where user.id > 1

val data1: List[Option[User]] = db.query(q)
val data2: List[User] = db.querySkipNoneRows(q)
val data3: Option[Option[User]] = db.find(q)

上面的例子中,我们分别对同一个查询执行了查询全部记录和查询首条记录,执行后的类型是根据select的参数列表自动推断的,此处显式写出只是为了演示,实际使用并不需要手动指明。

  1. 详细的使用方法,请阅读后续文档。
  2. 目前IDEA对Scala3的支持有限,无法正确显示出推断的类型,现阶段更推荐VSCode添加Metalse插件使用。