- 浏览: 666817 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (364)
- quick start (57)
- bboss aop (43)
- bboss mvc (48)
- bboss persistent (96)
- bboss taglib (30)
- bboss event (10)
- bbossgroups (52)
- bboss (32)
- bboss会话共享 (17)
- bboss rpc (7)
- bboss 国际化 (5)
- bboss 序列化 (9)
- bboss cxf webservice (8)
- bboss hessian (3)
- bboss 安全认证SSO (15)
- bboss 工作流 (6)
- 平台 (18)
- bboss quartz (3)
- 杂谈 (5)
- 大数据 (1)
- bboss elastic (24)
- bboss http (1)
- bboss kafka (1)
- Elasticsearch Scroll和Slice Scroll查询API使用案例 (1)
最新评论
-
qianhao123:
...
采用gradle构建和发布bboss方法介绍 -
qianhao123:
[img][/img]
采用gradle构建和发布bboss方法介绍 -
yin_bp:
欢迎大家参与working
高性能elasticsearch ORM开发库使用介绍 -
qq641879434:
万分感谢
bboss 持久层sql xml配置文件编写和加载方法介绍 -
yin_bp:
qq641879434 写道怎么设置配置文件 可以查看执行的S ...
bboss 持久层sql xml配置文件编写和加载方法介绍
bboss持久层操作Clob和Blob非常方便,基于bboss我们可以非常方便插入、修改和读取clob和blob字段,我们直接看示例:
示例中包含了大数据的增加、删除和修改操作,补充说明一下修改操作:
修改大字段一般在一个事务上下文中先锁定需要修改的记录(采用nowait非阻塞方式锁定),修改完毕后commit事务的同时释放记录的锁,如果有异常,通过finally块中的release方法回滚事务并释放记录锁。
package com.frameworkset.common; import java.io.File; import java.io.InputStream; import java.sql.SQLException; import java.util.HashMap; import java.util.List; import java.util.UUID; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.transaction.RollbackException; import org.junit.Test; import com.frameworkset.common.poolman.CallableDBUtil; import com.frameworkset.common.poolman.DBUtil; import com.frameworkset.common.poolman.PreparedDBUtil; import com.frameworkset.common.poolman.Record; import com.frameworkset.common.poolman.SQLExecutor; import com.frameworkset.common.poolman.SQLParams; import com.frameworkset.common.poolman.handle.FieldRowHandler; import com.frameworkset.common.poolman.handle.NullRowHandler; import com.frameworkset.orm.annotation.Column; import com.frameworkset.orm.transaction.TransactionManager; import com.frameworkset.util.StringUtil; /** * * <p>Title: TestLob.java</p> * * <p>Description: * CREATE TABLE TEST ( BLOBNAME BLOB, CLOBNAME CLOB, ID VARCHAR(100) ) * </p> * * <p>Copyright: Copyright (c) 2007</p> * @Date 2011-12-27 下午2:56:03 * @author biaoping.yin * @version 1.0 */ public class TestLob { public static class LobBean { private String id; @Column(type="blob")//指示属性的值按blob类型写入或者读取 private String blobname; @Column(type="clob")//指示属性的值按clob类型写入或者读取 private String clobname; @Column(name="name_")//指示属性名称与表字段名称映射关系,name属性对应于表中的name_字段 private String name; @Column(dataformat="yyyy-mm-dd")//指示日期类型属性值的存储和读取转换日期格式 private String regdate; // 。。。。。。 } @Test public void testNewSQLParamInsert() throws Exception { SQLParams params = new SQLParams(); params.addSQLParam("id", "1", SQLParams.STRING); // ID,HOST_ID,PLUGIN_ID,CATEGORY_ID,NAME,DESCRIPTION,DATASOURCE_NAME,DRIVER,JDBC_URL,USERNAME,PASSWORD,VALIDATION_QUERY params.addSQLParam("blobname", "abcdblob", SQLParams.BLOB); params.addSQLParam("clobname", "abcdclob", SQLParams.CLOB); SQLExecutor.insertBean("insert into test(id,blobname,clobname) values(#[id],#[blobname],#[clobname])", params); } @Test public void testNewBeanInsert() throws Exception { LobBean bean = new LobBean(); bean.id = "2"; bean.blobname = "abcdblob"; bean.clobname = "abcdclob"; SQLExecutor.insertBean("insert into test(id,blobname,clobname) values(#[id],#[blobname],#[clobname])", bean); } @Test public void testNewOrMappingQuery() throws Exception { // SQLParams params = new SQLParams(); // params.addSQLParam("id", "1", SQLParams.STRING); // // ID,HOST_ID,PLUGIN_ID,CATEGORY_ID,NAME,DESCRIPTION,DATASOURCE_NAME,DRIVER,JDBC_URL,USERNAME,PASSWORD,VALIDATION_QUERY // params.addSQLParam("blobname", "abcdblob", // SQLParams.BLOB); // params.addSQLParam("clobname", "abcdclob", // SQLParams.CLOB); LobBean bean = SQLExecutor.queryObject(LobBean.class,"select * from test"); System.out.println(); } @Test public void testNewOrMappingsQuery() throws Exception { // SQLParams params = new SQLParams(); // params.addSQLParam("id", "1", SQLParams.STRING); // // ID,HOST_ID,PLUGIN_ID,CATEGORY_ID,NAME,DESCRIPTION,DATASOURCE_NAME,DRIVER,JDBC_URL,USERNAME,PASSWORD,VALIDATION_QUERY // params.addSQLParam("blobname", "abcdblob", // SQLParams.BLOB); // params.addSQLParam("clobname", "abcdclob", // SQLParams.CLOB); List<LobBean> bean = SQLExecutor.queryList(LobBean.class,"select * from test"); System.out.println(); } /** * CREATE TABLE CLOBFILE ( FILEID VARCHAR(100), FILENAME VARCHAR(100), FILESIZE BIGINT, FILECONTENT CLOB(2147483647) ) */ public @Test void uploadClobFile() throws Exception { File file = new File("D:\\bbossgroups-3.5.1\\bboss-taglib\\readme.txt"); String sql = ""; try { sql = "INSERT INTO CLOBFILE (FILENAME,FILECONTENT,fileid,FILESIZE) VALUES(#[filename],#[FILECONTENT],#[FILEID],#[FILESIZE])"; SQLParams sqlparams = new SQLParams(); sqlparams.addSQLParam("filename", file.getName(), SQLParams.STRING); sqlparams.addSQLParamWithCharset("FILECONTENT", file,SQLParams.CLOBFILE,"GBK"); sqlparams.addSQLParam("FILEID", UUID.randomUUID().toString(),SQLParams.STRING); sqlparams.addSQLParam("FILESIZE", file.length(),SQLParams.LONG); SQLExecutor.insertBean(sql, sqlparams); } catch (Exception ex) { throw new Exception("上传附件关联临控指令布控信息附件失败:" + ex); } } /** * CREATE TABLE CLOBFILE ( FILEID VARCHAR(100), FILENAME VARCHAR(100), FILESIZE BIGINT, FILECONTENT CLOB(2147483647) ) */ public @Test void updateClobFile() throws Exception { File file = new File("D:\\bbossgroups-3.5.1\\bboss-taglib\\readme.txt"); String sql = ""; TransactionManager tm = new TransactionManager(); try { tm.begin(); SQLExecutor.queryField("select 1 as ss from CLOBFILE where fieldid=? for update nowait","11");//锁定记录 sql = "update CLOBFILE set FILECONTENT=#[FILECONTENT]) where fileid = #[FILEID])"; SQLParams sqlparams = new SQLParams(); sqlparams.addSQLParamWithCharset("FILECONTENT", file,SQLParams.CLOBFILE,"GBK"); sqlparams.addSQLParam("FILEID", "11",SQLParams.STRING); SQLExecutor.updateBean(sql, sqlparams); tm.commit(); } catch (Exception ex) { throw new Exception("上传附件关联临控指令布控信息附件失败:" + ex); } finally { tm.release(); } } /** * 上传附件 * @param inputStream * @param filename * @return * @throws Exception */ public boolean uploadFile(InputStream inputStream,long size, String filename) throws Exception { boolean result = true; String sql = ""; try { sql = "INSERT INTO filetable (FILENAME,FILECONTENT,fileid,FILESIZE) VALUES(#[filename],#[FILECONTENT],#[FILEID],#[FILESIZE])"; SQLParams sqlparams = new SQLParams(); sqlparams.addSQLParam("filename", filename, SQLParams.STRING); sqlparams.addSQLParam("FILECONTENT", inputStream, size,SQLParams.BLOBFILE); sqlparams.addSQLParam("FILEID", UUID.randomUUID().toString(),SQLParams.STRING); sqlparams.addSQLParam("FILESIZE", size,SQLParams.LONG); SQLExecutor.insertBean(sql, sqlparams); } catch (Exception ex) { ex.printStackTrace(); result = false; throw new Exception("上传附件关联临控指令布控信息附件失败:" + ex); } finally { if(inputStream != null){ inputStream.close(); } } return result; } public File getDownloadFile(String fileid) throws Exception { try { return SQLExecutor.queryTField( File.class, new FieldRowHandler<File>() { @Override public File handleField( Record record) throws Exception { // 定义文件对象 File f = new File("d:/",record.getString("filename")); // 如果文件已经存在则直接返回f if (f.exists()) return f; // 将blob中的文件内容存储到文件中 record.getFile("filecontent",f); return f; } }, "select * from filetable where fileid=?", fileid); } catch (Exception e) { throw e; } } public File getDownloadClobFile(String fileid) throws Exception { try { return SQLExecutor.queryTField( File.class, new FieldRowHandler<File>() { @Override public File handleField( Record record) throws Exception { // 定义文件对象 File f = new File("d:/",record.getString("filename")); // 如果文件已经存在则直接返回f if (f.exists()) return f; // 将blob中的文件内容存储到文件中 record.getFile("filecontent",f); return f; } }, "select * from CLOBFILE where fileid=?", fileid); } catch (Exception e) { throw e; } } public void deletefiles() throws Exception { SQLExecutor.delete("delete from filetable "); SQLExecutor.delete("delete from CLOBFILE "); } public List<HashMap> queryfiles() throws Exception { return SQLExecutor.queryList(HashMap.class, "select FILENAME,fileid,FILESIZE from filetable"); } public List<HashMap> queryclobfiles()throws Exception { return SQLExecutor.queryList(HashMap.class, "select FILENAME,fileid,FILESIZE from CLOBFILE"); } public void downloadFileFromBlob(String fileid, final HttpServletRequest request, final HttpServletResponse response) throws Exception { try { SQLExecutor.queryByNullRowHandler(new NullRowHandler() { public void handleRow(Record record) throws Exception { StringUtil.sendFile(request, response, record .getString("filename"), record .getBlob("filecontent")); } }, "select * from filetable where fileid=?", fileid); } catch (Exception e) { throw e; } } // public void downloadFileFromClob(String fileid, final HttpServletRequest request, final HttpServletResponse response) throws Exception { try { SQLExecutor.queryByNullRowHandler(new NullRowHandler() { @Override public void handleRow(Record record) throws Exception { StringUtil.sendFile(request, response, record .getString("filename"), record .getClob("filecontent")); } }, "select * from CLOBFILE where fileid=?", fileid); } catch (Exception e) { throw e; } }
示例中包含了大数据的增加、删除和修改操作,补充说明一下修改操作:
TransactionManager tm = new TransactionManager(); try { tm.begin(); SQLExecutor.queryField("select 1 as ss from CLOBFILE where fieldid=? for update nowait","11");//锁定记录 sql = "update CLOBFILE set FILECONTENT=#[FILECONTENT]) where fileid = #[FILEID])"; SQLParams sqlparams = new SQLParams(); sqlparams.addSQLParamWithCharset("FILECONTENT", file,SQLParams.CLOBFILE,"GBK"); sqlparams.addSQLParam("FILEID", "11",SQLParams.STRING); SQLExecutor.updateBean(sql, sqlparams); tm.commit();//提交修改并释放记录锁 } catch (Exception ex) { throw new Exception("上传附件关联临控指令布控信息附件失败:" + ex); } finally { tm.release();//如果有异常,回滚事务,同时释放记录锁 }
修改大字段一般在一个事务上下文中先锁定需要修改的记录(采用nowait非阻塞方式锁定),修改完毕后commit事务的同时释放记录的锁,如果有异常,通过finally块中的release方法回滚事务并释放记录锁。
发表评论
-
bboss 持久层数据源引用外部属性配置介绍
2018-12-29 21:47 977bboss 持久层数据源外部属性配置引用介绍 bboss持久 ... -
bboss持久层开启和关闭自带主键机制
2017-08-17 11:56 684bboss持久层开启和关闭自带主键机制 请访问文档: bbos ... -
bboss高性能db批处理功能使用方法介绍
2017-05-14 21:28 2050bboss持久层在v5.0.3.5中新增简单的高效的db批处理 ... -
bboss持久层公共sql片段定义和引用方法说明
2017-03-03 13:05 1056bboss持久层公共sql片段定义和引用方法说明 在配置sq ... -
最新版本mysql jdbc驱动包获取表定义信息空指针异常处理方法
2016-12-15 10:24 1267在使用最新的mysql-connector-java 6.0. ... -
持久层快速入门系列一
2016-08-19 13:00 1199持久层快速入门 先在应用中导入bboss 持久层(bboss ... -
bboss与spring中配置和引用bboss数据源和bboss dao组件方法说明
2016-08-10 16:04 859首先在项目中导入bboss 持久层包: maven坐标 & ... -
bboss 持久层sql xml配置文件编写和加载方法介绍
2016-04-05 13:14 1521bboss 持久层sql xml配置文件编写和加载方法介绍 通 ... -
bboss持久层设置数据库查询fetchsize参数方法
2015-11-06 11:54 954bboss持久层设置数据库查询fetchsize参数方法 j ... -
bboss持久层快速入门教程
2015-09-19 13:49 1518bboss持久层快速入门教程,快速搭建bboss持久层的开 ... -
bboss持久层数据库适配器编写和注册方法
2015-02-06 15:21 917bboss持久层数据库适配器编写和注册方法 bboss持久层默 ... -
bboss模糊查询、动态sql、批处理资料荟萃
2015-01-30 12:03 2260bboss模糊查询、动态sql、批处理资料荟萃 bboss持 ... -
bboss持久层查询元数据缓存机制开启方法
2014-11-18 12:03 960bboss持久层为了提升数据库查询操作性能,提供了对查 ... -
bboss内置数据源apache dbcp与druid数据源切换方法
2014-09-23 09:59 1317bboss内置数据源与druid数据源切换方法 bboss内置 ... -
bboss持久层多数据源配置及多数据库事务控制使用方法
2014-05-11 20:24 2840bboss持久层多数据源配置及使用方法,持久层框架及demo下 ... -
bboss持久层demo使用说明
2014-03-11 09:38 1117持久层案例可以用svn客户端下载eclipse工程,导入ecl ... -
bboss持久层More分页查询API使用介绍
2013-10-18 16:17 1311为了更好地提高数据库分页查询的效率,bboss持久层在Conf ... -
bboss持久层ormaping机制详解
2013-09-04 21:04 1082bboss持久层针对db操作即提供了原始sql语句的支持,又提 ... -
bboss持久层改进支持模块sql配置文件引用其它模块sql配置文件中sql语句
2013-09-01 22:23 881bboss持久层改进支持模块sql配置文件引用其它模块sql配 ... -
bboss持久层sql语句输出到log4j日志文件设置
2013-08-15 20:17 1110bboss持久层sql语句输出到log4j日志文件设置 po ...
相关推荐
NULL 博文链接:https://yin-bp.iteye.com/blog/301119
bboss+es基本操作示例,elasticsearch,bboss,java使用demo
bboss会话共享培训文档,学习bboss不可多得的资料,值得拥有。
bboss es特点请访问: https://www.oschina.net/p/bboss-elastic
企业级 J2EE 开源框架:bboss
资源目录: 项目源码(eshelloword.rar) bboss elasticsearch开发入门教程.wmv 搭建bboss elasticsearch开发环境.wmv 说明.txt
bboss功能涵盖ioc,mvc,jsp自定义标签库,持久层,全局事务托管,安全认证,SSO,web会话共享,cxfwebservice服务发布和管理,hessian服务发布和管理等功能。另外还提供了符合中国式自由流的bboss activiti工作流...
NULL 博文链接:https://yin-bp.iteye.com/blog/926166
springboot集成ElasticsearchBboss调用Elasticsearch的案例分享
弹性Tran老板数据交换模块使用文档: : Bboss是一个很好的Elasticsearch Java Rest客户端。 它运行并访问像mybatis这样的elasticsearch来关联数据库。环境要求JDK要求:JDK 1.7+ Elasticsearch版本要求:1.X,2.X,5...
bboss-datatran 由 bboss 开源的数据采集&流批一体化工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能。
官方版本,亲测可用
Elasticsearch rest client bboss介绍-Elastic2018中国开发者大会演讲稿
NULL 博文链接:https://yin-bp.iteye.com/blog/2174863
NULL 博文链接:https://yin-bp.iteye.com/blog/2177475
浙江移动BBOSS系统快速入门手册V0.1归类.pdf
NULL 博文链接:https://yin-bp.iteye.com/blog/1131637
基于bboss新版平台项目环境搭建和代码工具使用视频教程
本实例是一个基于bboss es spring boot starter的demo maven工程,可供spring boot项目集成bboss elasticsearch rest client参考 展示了通过spring boot管理单集群功能和管理多集群功能 单集群测试用例:...
NULL 博文链接:https://yin-bp.iteye.com/blog/1449900