scalikejdbc 学习笔记(3)
重用connection:
package com.citi.scalikejdbc import scalikejdbc._
import scalikejdbc.config._ object ConnReuse {
def main(args: Array[String]): Unit = { DBsWithEnv("dev").setupAll() case class User(id: Int, name: String, age: Int) val allColumns = (rs: WrappedResultSet) => User(
id = rs.int("id"),
name = rs.string("name"),
age = rs.int("age")) val id = 1
using(ConnectionPool.borrow()) { conn: java.sql.Connection =>
val db: DB = DB(conn) // set as auto-close disabled
db.autoClose(false) db.localTx { implicit session =>
sql"update user set name = 'tom' where id = ${id}".update.apply()
} // localTx won't close the current Connection db.localTx { implicit session =>
sql"insert into user values (3, 'marry', 12)".update.apply()
} // localTx won't close the current Connection // this block also works fine!
val users: List[User] = db.localTx { implicit session =>
SQL("select * from user limit 10").map(allColumns).list.apply()
} for (user <- users) {
println(user.id + "," + user.name + "," + user.age)
} } DBsWithEnv("dev").closeAll() }
}
运行结果:
[SQL Execution]
update user set name = 'tom' where id = 1; (0 ms)
[Stack Trace]
...
com.citi.scalikejdbc.ConnReuse$$anonfun$main$1$$anonfun$2.apply(ConnReuse.scala:26)
com.citi.scalikejdbc.ConnReuse$$anonfun$main$1$$anonfun$2.apply(ConnReuse.scala:25)
scalikejdbc.DBConnection$$anonfun$3.apply(DBConnection.scala:326)
scalikejdbc.DBConnection$class.scalikejdbc$DBConnection$$rollbackIfThrowable(DBConnection.scala:290)
scalikejdbc.DBConnection$class.localTx(DBConnection.scala:319)
scalikejdbc.DB.localTx(DB.scala:60)
com.citi.scalikejdbc.ConnReuse$$anonfun$main$1.apply(ConnReuse.scala:25)
com.citi.scalikejdbc.ConnReuse$$anonfun$main$1.apply(ConnReuse.scala:19)
scalikejdbc.LoanPattern$class.using(LoanPattern.scala:18)
scalikejdbc.LoanPattern$.using(LoanPattern.scala:7)
scalikejdbc.package$.using(package.scala:60)
com.citi.scalikejdbc.ConnReuse$.main(ConnReuse.scala:19)
com.citi.scalikejdbc.ConnReuse.main(ConnReuse.scala)
...
22:30:30.747 [main] DEBUG scalikejdbc.StatementExecutor$$anon$1 - SQL execution completed
[SQL Execution]
insert into user values (3, 'marry', 12); (1 ms)
[Stack Trace]
...
com.citi.scalikejdbc.ConnReuse$$anonfun$main$1$$anonfun$3.apply(ConnReuse.scala:30)
com.citi.scalikejdbc.ConnReuse$$anonfun$main$1$$anonfun$3.apply(ConnReuse.scala:29)
scalikejdbc.DBConnection$$anonfun$3.apply(DBConnection.scala:326)
scalikejdbc.DBConnection$class.scalikejdbc$DBConnection$$rollbackIfThrowable(DBConnection.scala:290)
scalikejdbc.DBConnection$class.localTx(DBConnection.scala:319)
scalikejdbc.DB.localTx(DB.scala:60)
com.citi.scalikejdbc.ConnReuse$$anonfun$main$1.apply(ConnReuse.scala:29)
com.citi.scalikejdbc.ConnReuse$$anonfun$main$1.apply(ConnReuse.scala:19)
scalikejdbc.LoanPattern$class.using(LoanPattern.scala:18)
scalikejdbc.LoanPattern$.using(LoanPattern.scala:7)
scalikejdbc.package$.using(package.scala:60)
com.citi.scalikejdbc.ConnReuse$.main(ConnReuse.scala:19)
com.citi.scalikejdbc.ConnReuse.main(ConnReuse.scala)
...
22:30:30.761 [main] DEBUG scalikejdbc.StatementExecutor$$anon$1 - SQL execution completed
[SQL Execution]
select * from user limit 10; (2 ms)
[Stack Trace]
...
com.citi.scalikejdbc.ConnReuse$$anonfun$main$1$$anonfun$4.apply(ConnReuse.scala:35)
com.citi.scalikejdbc.ConnReuse$$anonfun$main$1$$anonfun$4.apply(ConnReuse.scala:34)
scalikejdbc.DBConnection$$anonfun$3.apply(DBConnection.scala:326)
scalikejdbc.DBConnection$class.scalikejdbc$DBConnection$$rollbackIfThrowable(DBConnection.scala:290)
scalikejdbc.DBConnection$class.localTx(DBConnection.scala:319)
scalikejdbc.DB.localTx(DB.scala:60)
com.citi.scalikejdbc.ConnReuse$$anonfun$main$1.apply(ConnReuse.scala:34)
com.citi.scalikejdbc.ConnReuse$$anonfun$main$1.apply(ConnReuse.scala:19)
scalikejdbc.LoanPattern$class.using(LoanPattern.scala:18)
scalikejdbc.LoanPattern$.using(LoanPattern.scala:7)
scalikejdbc.package$.using(package.scala:60)
com.citi.scalikejdbc.ConnReuse$.main(ConnReuse.scala:19)
com.citi.scalikejdbc.ConnReuse.main(ConnReuse.scala)
...
1,tom,20
2,bill,30
3,marry,12
3,marry,12
scalikejdbc 学习笔记(3)的更多相关文章
- scalikejdbc 学习笔记(1)
build.sbt: import sbt._ import Process._ import Keys._ EclipseKeys.createSrc := EclipseCreateSrc.Def ...
- scalikejdbc 学习笔记(5)
常用增删改查操作: import scalikejdbc._ import scalikejdbc.config._ object CommonOperation { def main(args: A ...
- scalikejdbc 学习笔记(4)
Batch 操作 import scalikejdbc._ import scalikejdbc.config._ object BatchOperation { def main(args: Arr ...
- scalikejdbc 学习笔记(2)
使用scalikejdbc config (src\main\resources) # MySQL(dev) dev.db.default.driver="com.mysql.jdbc.Dr ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
随机推荐
- UVA - 10480 Sabotage 最小割,输出割法
UVA - 10480 Sabotage 题意:现在有n个城市,m条路,现在要把整个图分成2部分,编号1,2的城市分成在一部分中,拆开每条路都需要花费,现在问达成目标的花费最少要隔开那几条路. 题解: ...
- 百度之星初赛A轮 A 度度熊拼三角 贪心
度度熊拼三角 Accepts: 2536 Submissions: 4433 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 6553 ...
- yzoj P2349 取数 题解
题意 1到n个自然数中选k个自然数要求两两不相邻,问有多少种方法,模m eg(1 3 5 ) 又是一道打表规律题,正常解法dp可以通过前缀和优化到O(N* K).另外我们可以重新定义F[I,J]表示从 ...
- nginx部署成功却没有办法访问
1.首要想到的问题是防火墙没关 注意:因为centos7.0默认不是使用iptables方式管理,而是firewalld方式.CentOS6.0防火墙用iptables管理. 2.解决: ①首先查看防 ...
- fastjson使用-- @JSONField使用(转)
@JSONField可以配置到字段和方法上,那不同的配置有什么不同呢?下面我们就来看看具体配置到不同的方法上. 我们在创建实体类的时候,都要求属性必须创建get和set方法,否则fastjson将不会 ...
- SSM框架使用分页插件显示信息
1.在该SSM工程的pom.xml中加入PageHelper的分页插件依赖(若是版本号不对,可以尝试修改一下) <!-- 分页插件 --> <dependency> <g ...
- Spring Cloud同步场景分布式事务怎样做?试试Seata
一.概述 在微服务架构下,虽然我们会尽量避免分布式事务,但是只要业务复杂的情况下这是一个绕不开的问题,如何保证业务数据一致性呢?本文主要介绍同步场景下使用Seata的AT模式来解决一致性问题. Sea ...
- Nuget打包类库及引用
什么是nuget 适用于任何现代开发平台的基本工具可充当一种机制,通过这种机制,开发人员可以创建.共享和使用有用的代码. 通常,此类代码捆绑到"包"中,其中包含编译的代码(如 DL ...
- kafka 主题管理
对于 kafka 主题(topic)的管理(增删改查),使用最多的便是kafka自带的脚本. 创建主题 kafka提供了自带的 kafka-topics 脚本,用来帮助用户创建主题(topic). b ...
- AtomicInteger 一个提供原子操作的Integer类
转自:http://www.blogjava.net/freeman1984/archive/2011/10/17/361402.html AtomicInteger,一个提供原子操作的Integer ...