前言
前两章我们已经了解了scalikejdbc操作数据库的基础和项目中实际需要的一些注意点,本章我们就直接搞上完整的实例代码,实例是以操作mysql为例子。
配置文件
application.conf
app.mysql.demo.url = "jdbc:mysql://x.x.x.x:3306/xxx"
app.mysql.demo.user = "user"
app.mysql.demo.password = "password "
创建连接池
def getMySQLProp(key: String = "demo"): Properties = {
val prop = new Properties
prop.setProperty("url", SubsConfig(s"app.mysql.${key}.url"))
prop.setProperty("driver", "com.mysql.jdbc.Driver")
prop.setProperty("user", SubsConfig(s"app.mysql.${key}.user"))
prop.setProperty("password", SubsConfig(s"app.mysql.${key}.password"))
prop
}
def newMySQLSession(key: String) = {
val db = getMySQL(key)
Class.forName(db("driver"))
if (!ConnectionPool.isInitialized(key)) {
ConnectionPool.add(key, db("url"), db("user"), db("password"))
}
ConnectionPool.borrow(key)
}
增删改查
// 查询mysql
val conn = newMySQLSession("dmp")
DB(conn) readOnly { implicit session =>
session.list("SELECT id,name FROM user") { res =>
((res.int(1), res.string(2)))
}
}
val conn = newMySQLSession("dmp")
DB(conn) readOnly {implicit session =>
SQL("SELECT id,name FROM user").map(r => (r.int(1),r.string(2))).list().apply()
}
}
// 插入、更新、删除mysql数据(事务操作)
// 只需要写入对应的sql即可
val conn = newMySQLSession("dmp")
DB(conn) localTx {implicit session =>
session.update("INSERT INTO user (name) VALUES ('demo')")
}
DB(conn) localTx {implicit session =>
SQL("INSERT INTO user (name) VALUES ('demo')").update()
}
// autoCommit方式操作,唯一的区别是autoCommit可以读也可以执行更新类操作
DB(conn) autoCommit {implicit session =>
// 增删改查都可以执行
......
session.close()
}
上述方式都是打开一次连接执行一次操作,如果想在一个连接中执行多个操作,可以如下
val conn = newMySQLSession("dmp")
DB(conn) autoCommit { implicit session =>
session.list("SELECT id,name FROM user") { res =>
(res.int(1), res.string(2))
}
session.update("INSERT INTO user (name) VALUES ('demo')")
session.update("DELETE FROM user WHERE name = 'demo'")
}
// 或者
DB(conn).autoClose(false) autoCommit { implicit session =>
session.list("SELECT id,name FROM user") { res =>
(res.int(1), res.string(2))
}
session.update("INSERT INTO user (name) VALUES ('demo')")
session.update("DELETE FROM user WHERE name = 'demo'")
}
conn.close()
结束
通过这三篇文章简单了解并能够使用scalikejdbc去操作数据库,希望对看到的有需要的小伙伴提供有用的帮助
欢迎对技术感兴趣的小伙伴一起交流学习,批评指正^^