Scala 使用ScalikeJDBC操作MySQL
目录
- 简介
- 配置
- 操作数据库
简介
ScalikeJDBC是一款给Scala开发者使用的简介访问类库,它是基于SQL的,使用者只需要关注SQL逻辑的编写,所有的数据库操作都交给ScalikeJDBC。
这个类库内置包含了JDBCAPI,并且给用户提供了简单易用并且非常灵活的API。
并且,QueryDSl(通用查询查询框架)使你的代码类型安全,半年过去可重复使用。我们可以在生产环境大胆地使用这款DB访问类库。
配置
解决依赖
1 | <properties> |
1 | <!--Scala相关依赖--> |
解决配置
在src的main目录下配置一个resource文件夹,文件夹下再创建一个application.conf
1 | db.default.driver="com.mysql.jdbc.Driver" |
操作数据库
建表
1
2
3
4
5create table Employer(
name varchar(10),
age varchar(4),
salary varchar(10)
);scala编程实现增删改查操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95package com.wsk.bigdata.scala.scalikejdbc
import scalikejdbc._
import scalikejdbc.config._
//定义样例类获取数据
case class Employer(name: String, age: Int, salary: Long)
object JdbcTest {
def main(args: Array[String]): Unit = {
DBs.setupAll() //初始化配置
//数据
val employers = List(Employer("zhangsan", 20, 18000), Employer("zhangliu", 50, 300000), Employer("lisi", 22, 22000))
//批量插入
insert(employers)
//查询出结果
val results = select()
for (employer <- results) {
println(employer.name, employer.age, employer.salary)
}
//修改
update(1000, "zhangsan")
//根据条件删除
deleteByname("zhangliu")
//删除所有
deleteAll()
//关闭资源
DBs.closeAll()
}
//插入数据
def insert(employers: List[Employer]): Unit = {
//事物插入
DB.localTx {
implicit session =>
for (employer <- employers) {
SQL("insert into wsktest(name,age,salary) values(?,?,?)")
.bind(employer.name, employer.age, employer.salary)
.update() //更新操作
.apply()
}
}
}
//查询操作
def select(): List[Employer] = {
DB.readOnly {
implicit session =>
SQL("select * from wsktest")
.map(rs => Employer(rs.string("name"), rs.int("age"), rs.long("salary")))
.list() //结果转换成list
.apply()
}
}
//更新操作
def update(age: Int, name: String) {
DB.autoCommit {
implicit session =>
SQL("update wsktest set age = ? where name = ?")
.bind(age, name)
.update() //更新操作
.apply()
}
}
//根据条件删除
def deleteByname(name: String): Unit = {
DB.autoCommit {
implicit session =>
SQL("delete from wsktest where name = ?")
.bind(name) //更新操作
.update()
.apply()
}
}
//删除所有
def deleteAll(): Unit ={
DB.autoCommit {
implicit session =>
SQL("delete from wsktest ")
.update() //更新操作
.apply()
}
}
}