A Hibernate util written by groovy

2892 단어
Hibernate.groovy
import
 org.hibernate.cfg.Configuration
import
 org.hibernate.Session
import
 org.hibernate.SessionFactory
import
 org.hibernate.Transaction
import
 org.hibernate.tool.hbm2ddl.SchemaUpdate
class
 Hibernate {    def 
static
 sessionFactory   
static
 {        
try
 {             Configuration cfg 
=
 
new
 Configuration()            cfg.configure()                       
new
 SchemaUpdate(cfg).execute(
true

true
)                  sessionFactory 
=
 cfg.buildSessionFactory()            } 
catch
 (Exception e) {                 e.printStackTrace()              }        }        Hibernate() {}       
private
 Session getSession() {            
return
 sessionFactory.openSession()        }        Object execute(closure) {               def s 
=
 getSession()                    def tr 
=
 
null
                    def result 
=
 
null
                    
try
 {                            tr 
=
 s.beginTransaction()                              result 
=
 closure.call(s)                           tr.commit()                  } 
catch
 (Exception e) {                     e.printStackTrace()                          
if
 (tr 
!=
 
null
) {                             tr.rollback()                        }                    } 
finally
 {                     s.close()               }                
return
 result       }        
void
 saveOrUpdate(obj) {        def saveClosure 
=
 { s 
->
 s.saveOrUpdate(obj) }              execute(saveClosure)        }        List executeQuery(hql) {             execute({ s 
->
 s.createQuery(hql).list() })       }        List executeQuery(hql, parameters) {            def query 
=
 { s 
->
                    def q 
=
 s.createQuery(hql)                        
if
 (parameters 
!=
 
null
) {                             
for
 (i in 
0
..parameters.size()
-
1
) {                               q.setParameter(i, parameters[i])                           }                            }                        q.list()               }                execute(query)        }        def get(clazz, id) {            
return
 execute({ s 
->
 s.get(clazz, id) })       }        
void
 delete(obj) {               execute({ s 
->
 s.delete(obj) })       }}
Instead of interface, I use Closure for callback
Blogged with Flock
Tags: hibernategroovy

좋은 웹페이지 즐겨찾기