`
leon1509
  • 浏览: 527638 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转)Groovy风格的JDBC编程

阅读更多
原贴地址:http://www.groovyq.net/node/157

你还记得普通的 Java JDBC 编程么?如果查询表中的内容,至少需要30行代码。如果使用Groovy,代码不超过10行。

连接数据库
Groovy对Java JDBC API进行了封装,提供了一个Facade--Sql,从而隐藏了获取数据库连接、关闭资源等细节。用法如下:

import groovy.sql.Sql
db= Sql.newInstance(
    "jdbc:mysql://localhost/iblog",
    "username",
    "password",
    "com.mysql.jdbc.Driver")
查询
Sql对象中有很多查询方法,常用方式如下所示,

query(GString,Closure),对返回的ResultSet执行Closure,示例用法如下:
db.query("select content from blog", {
    while (it.next()){    
       println it.getString("content")
    }}
)
rows(GString),返回List。示例用法如下:
db.rows("select * from blog").each{row-> println row.content }
eachRow(GString,Closure),对结果集的每行执行Closure。示例用法如下:
db.eachRow ("select * from blog",{println it.comment_num})
firstRow(GString),返回结果集的第一条记录,示例用法如下:
db.firstRow ("select * from blog")
CUD
Sql提供的CUD方法也很多,常见的有:

execute(GString),execute(String)或者execute(string,paramsList),可用于增加、更新、删除记录;
executeInsert(GString),executeInsert(String)或者executeInsert(string,paramsList),用于增加记录;
executeUpdate(GString),executeUpdate(String)或者executeUpdate(string,paramsList),用于更新记录。
上述方法用法跟原始的Java代码用法类似,这里要重点介绍的是另外一种快捷增加记录的方法--DataSet。DataSet将SQL语句隐藏,将数据集放入到一个Map中。可以对这个Map中内容进行查询、增加。请看如下代码:

1
def blogs=db.dataSet('blog') /*new DataSet(db, 'blog')或者db.dataSet(Blog)*/
2
blogs.each{ println it }
3
blogs.add(     
4
    content:'dateset using',
5
    author_id:3,
6
    date_created:new Date())
7
blogs.findAll {it.id>1 }.sort{it.version desc}.each { println it }
从上述代码中可以看到,创建DateSet实例后,就能够获得一个Map,可以对这个Map执行findAll(whereClosure)以及sort(sortClosure)。而这里增加数据使用的是add(Map)方法。

在对数据库进行增加、更新或者删除时,需要考虑事务性,以保证数据的完整性。对于此,Groovy同样提供了一个非常方便的用法。对于需要在同一个事务中完成的代码,可以使用Sql或者DataSet的withTransaction(Closure)方法实现,参见如下代码:

view sourceprint?
1
db.withTransaction{
2
    for (int i=0;i<5;i++){
3
        blogs.add(
4
        content:"dateset using"+i,
5
        author_id:3,
6
        date_created:new Date())
7
    }
8
    db.execute ("delete from iblog where i>20")
9
}
上述代码中,由于在第8行代码会出错,所以整段代码不会在blog表中插入新的纪录的。读者可以将withTransaction方法去掉,再看看程序运行的结果。

DataSet是不是简化了代码?但是DataSet不能取代SQL,DataSet只适用于单一的表,对于更复杂一些的结构比如JOIN返回的结果,就要使用SQL了。比如使用SQL将复杂的结果生成一个视图,之后用DataSet来访问这个视图。

上述这些就是Groovy提供的方法,它们使得跟数据库的交互变得轻松了许多!

本文使用Groovy 1.7.1。关于groovy.sql的中各个对象以及方法的详细参数请参见Groovy API。关于本文中用到的表结构请参见附件。
分享到:
评论

相关推荐

    groovy将JDBC中oracle存储过程游标转换为多层json

    本例是我工作中的一些实操例子,亦是我工作日志,记录在此,既可作为我自己的总结,也可以此分享给同行借鉴。 入参是字符串格式的xml,目的...3.JDBC调用存储过程语句 4.创建Groovy脚本 5.xml入参示例 6.json出参示例

    Groovy高效编程

    Groovy语言。 里面详细介绍了一些很有意思的方法。

    [Groovy] Groovy 2 编程 (英文版)

    [Pragmatic Bookshelf] Groovy 2 编程 (英文版) [Pragmatic Bookshelf] Programming Groovy 2 Dynamic Productivity for the Java Developer (E-Book) ☆ 出版信息:☆ [作者信息] Venkat Subramaniam [出版机构...

    groovy入门编程

    groovy入门 groovy入门 groovy入门 groovy入门groovy入门groovy入门

    Groovy+Java混合使用例子

    Groovy环境搭建教程中的例子工程,纯Java、纯Groovy以及Java+Groovy混合 教程参考:http://blog.csdn.net/rcom10002/archive/2011/06/26/6568557.aspx

    groovy脚本转painless语法总结

    项目从es2升级到es6,groovy脚本也要相应的转换为painless脚本,转换过程中遇到了很多坑,特此总结成文档,供大家一起交流学习。

    java 动态脚本语言 精通 Groovy

    java 动态脚本语言 精通 Groovy

    Groovy v2.4.13官方版

     Groovy是JVM的一个替代语言(替代是指可以用 Groovy 在Java平台上进行Java 编程),使用方式基本与使用 Java代码的方式相同,该语言特别适合与Spring的动态语言支持一起使用,设计时充分考虑了Java集成,这使 ...

    fnz:Groovy的函数式编程思路

    将函数式编程的思想翻译成Groovy。 在以下检查FNZ网站和文档: //mariogarcia.github.com/fnz

    groovy java maven 混合编程1

    --Groovy wiki关于maven添加Groovy开发的文档已经有一些了 我想做一些详细的介绍目录Maven 配置groovy 插件在 idea 中开发的

    精通 Groovy--下一代开发语言

    Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,也能用于扩展现有...

    Groovy入门经典.pdf

     本书是有关Groovy的第一本正式出版物,作者KennethBarclay和JohnSavage介绍了Groovy开发的所有主要领域,并解释了这种创新性的编程语言给Java平台赋予的动态特性。阅读本书只要求具备Java编程的一般性知识。不管你...

    apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本

    apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...

    groovy-3.0.9-API文档-中文版.zip

    赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...

    groovy入门经典,groovyeclipse 插件

    groovy入门经典,groovyeclipse 插件

    [Groovy] Making Java Groovy 英文版

    Making Java Groovy is a practical handbook for developers who want to blend Groovy into their day to day work with Java It starts by introducing the key differences between Java and Groovy and how you...

    Java调用Groovy,实时动态加载数据库groovy脚本

    Java调用Groovy,实时动态加载数据库groovy脚本,java读取mongoDB的groovy脚本,加载实时运行,热部署

    Groovy 入门学习

    适合想了解groovy 编程开发的人员 Groovy - hellworld Groovy - 变量 Groovy - 静态import Groovy - 字符串 Groovy - 分支结构语句 Groovy - 循环结构语句

Global site tag (gtag.js) - Google Analytics