加载配置文件内容的自定义的类,如下所示:
import com.typesafe.config.{Config, ConfigFactory}
object ConfigHelp {
//加载配置文件
private val config: Config = ConfigFactory.load()
//加载jdbc的配置
val url: String= config.getString("db.default.url")
val driver: String = config.getString("db.default.driver")
val user: String = config.getString("db.default.user")
val password: String = config.getString("db.default.password")
}
配置文件application.conf内容如下所示:
#配置jdbc连接
db.default.url="jdbc:mysql://localhost:3306/baobiao?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8"
db.default.driver="com.mysql.jdbc.Driver"
db.default.user="root"
db.default.password="123456"
需要导入的依赖jar包:
<!--dataframe使用scalikejdbc将数据传入数据库中-->
<dependency>
<groupId>org.scalikejdbc</groupId>
<artifactId>scalikejdbc_2.11</artifactId>
<version>3.1.0</version>
</dependency>
<!--使用scalikejdbc写配置时需要的依赖-->
<dependency>
<groupId>org.scalikejdbc</groupId>
<artifactId>scalikejdbc-config_2.11</artifactId>
<version>3.1.0</version>
</dependency>
使用代码如下所示:里面做了详细的解释
import scalikejdbc.config.DBs
//测试scalikejdbc的使用
object ScalikeJDBC {
def main(args: Array[String]): Unit = {
//配置文件中,key必须要求是:
/*
# JDBC settings
db.default.driver=""
db.default.url=""
db.default.user=""
db.default.password=""
*/
//插入数据
//加载配置文件中的jdbc,要求表必须是存在的
//因为在spark中要求配置文件的名字必须是application.conf,
//这句话会首先去找application.conf,然后再找:db.default识别符
DBs.setup()
//autoCommit表示自动提交,以前用jdbc时还需要手动commit,在这里有自动commit的方法
//implicit表示导入隐式参数,参数名随便起
DB.autoCommit{implicit sess=>
SQL("insert into scalike values(?,?,?,?)")
.bind(1,"jack",17,"nv") //按照顺序给占位符赋值即可
.update()//执行SQL语句
.apply()//这个方法也需要参数,是上面的定义的隐式采纳数sess传过来的
}
//删除数据
DB.autoCommit{implicit sess=>
SQL("delete from scalike where id = ?")
.bind(4)
.update()
.apply()
}
//修改数据
DB.autoCommit { implicit sess =>
SQL("update scalike set name=? where id=?")
.bind("aaa", 2)
.update()
.apply()
}
//查询方法不需要commit,写成autoCommit也不错
val tuples: List[(String, Int)] = DB.readOnly { implicit sess =>
//list()方法是展示数据
//line.string()和line.int()里面是列名,代表获取的值的类型时string和int
SQL("select * from scalike")
.map(line => (
line.string("name"),
line.int("age")
)).list().apply()
}
tuples.foreach(println(_))
//事物控制
DB.localTx{implicit sess=>
for(i <- 0 to 10){
if(i == 6) {
return 1/0
}
//会在数据库中发现一条数据也没有插入
SQL("insert into scalike values(?,?,?,?)")
.bind(4,"bbb",34,"boy")
.update()
.apply()
}
}
}
}