如果继承GuzzBaseDao,可以使用basedao中提供的常用查询方法进行查询。
ReadonlyTranSession为guzz对外提供的查询操作入口,获取方法:
TransactionManager tm = guzzContext.getTransactionManager() ; ReadonlyTranSession session = getTransactionManager().openDelayReadTran() ; try{ SearchExpression se = SearchExpression.forClass(SystemLog.class) ; se.and(Terms.eq("categoryId", 18)) ; se.setOrderBy("importance desc, id asc") ; return session.list(se) ; }finally{ session.close() ; }
ReadonlyTranSession提供按照检索表达式SearchExpression,SQL语句CompiledSQL,以及guzz.xml中配置的sql语句id进行查询的接口。
SearchExpression:
SearchExpression类似于hibernate中的criteria,不过功能没有criteria强大。
CompiledSQL:
guzz将sql语句进行预编译生成CompiledSQL,在预编译时sql语句允许参数命名和businessName,属性名替换,进行预编译的SQL和guzz.xml中允许定义的sql规则相同。示例如下:
TransactionManager tm = super.getTransactionManager() ; String sql = "update @@" + SystemLog.class.getName() + " set @importance = :level where @id = :id" ; CompiledSQL cs = tm.getCompiledSQLBuilder().buildCompiledSQL(SystemLog.class, sql) ; WriteTranSession session = tm.openRWTran(true) ; try{ session.executeUpdate(cs.bind("level", 3).bind("id", 5)) ; }finally{ session.close() ; }
CompiledSQL为线程安全的对象,对于重复执行的sql,建议将编译好的CompiledSQL缓存以来,避免重复解析。在guzz.xml中定义的sql,在guzz内部就是以CompiledSQL进行存储和管理的。
通过guzz.xml中定义的id查询:
类似ibatis。
WriteTranSession为写api接口。
TransactionManager tm = super.getTransactionManager() ; WriteTranSession session = tm.openRWTran(true) ;
在获取时,传入参数是否自动提交事务。true:自动提交;false:手动提交。
如果设置为false,在这执行完操作后,需要调用session.commit()或者session.rollback()结束事务。
WriteTranSession只允许通过主键进行查询操作,查询时从主数据库操作。其他方法与ReadonlyTranSession用法类似。
如果需要执行事务处理,在获取WriteTranSession时需要关闭自动提交事务: tm.openRWTran(false) ;
随后针对此WriteTranSession进行任意操作即可,包括从此WriteTranSession创建JDBCTemplate执行raw sql,或者创建Batcher执行批量操作,在所有操作完成后commit()或者rollback(),guzz将完成多组机器多项操作的分布式事 务。