由于用hibernate很耗内存,在此用sql;
@SuppressWarnings("unchecked")
public void saveClassInform(final Inform inform) {
//保存到发件箱
informDAO.save(inform);
String idString = inform.getReceiveIdList().substring(0,inform.getReceiveIdList().length()-1);
String hql ="select distinct(o.user.uid) from TribeMember o where o.tribe.tid in ("+idString+") and o.status=1";
final List tmList = tribeMemberDAO.findAllByHQL(hql);
//保存到收件人收件箱
if(null!=tmList){
informDAO.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
Iterator iterator = tmList.iterator();
Connection connection = SessionFactoryUtils.getDataSource(informDAO.getHibernateTemplate().getSessionFactory()).getConnection() ;
PreparedStatement preparedStatement = null;
String sql = "insert into inform_receive(inform_id,user_id,is_read,status) value(?,?,?,?)";
preparedStatement = connection.prepareStatement(sql);
while(iterator.hasNext()){
int userId =(Integer.parseInt(iterator.next().toString()));
preparedStatement.setInt(1, inform.getIid());
preparedStatement.setInt(2,userId );
preparedStatement.setInt(3, 0);
preparedStatement.setInt(4, 1);
preparedStatement.addBatch();
}
preparedStatement.executeBatch();
preparedStatement.close();
session.flush();
session.close();
connection.close();
return null;
}
});
}
}
另外在这里附上jdbc批量插数据的代码:
/**
* 插入到本地数据库
* @param preparedStatement
* @param list
* @throws SQLException
*/
public void addsMedicare(PreparedStatement preparedStatement,List<Medicare> list) throws SQLException {
List<Medicare> medicareList = list;
if(CollectionUtils.isNotEmpty(medicareList)){
PreparedStatement pstmt = null;
try {
pstmt = preparedStatement;
for(int i=0;i<medicareList.size();i++){
pstmt.setString(1, medicareList.get(i).getMedicareNo());
pstmt.setString(2, medicareList.get(i).getMedicareUsername());
pstmt.setString(3, null);
pstmt.setString(4, medicareList.get(i).getMedicareIdentityNo());
pstmt.setFloat(5, medicareList.get(i).getMedicareBalance());
pstmt.setFloat(6, medicareList.get(i).getMedicareInfund());
pstmt.setFloat(7, medicareList.get(i).getMedicareOutfund());
pstmt.setTimestamp(8, medicareList.get(i).getMedicareLastModifyTime());
pstmt.setInt(9, medicareList.get(i).getMedicareFlag()==null?0:medicareList.get(i).getMedicareFlag());
pstmt.addBatch();
}
pstmt.executeBatch();
} catch (Exception e) {
e.printStackTrace();
throw new SQLException(e.getMessage());
}
}
}
/**
* 插入到语音数据库
* @param preparedStatement
* @param list
* @throws SQLException
*/
public void addsIvrMedicare(PreparedStatement preparedStatement,List<Medicare> list) throws SQLException {
List<Medicare> medicareList = list;
if(CollectionUtils.isNotEmpty(medicareList)){
PreparedStatement pstmt = null;
try {
pstmt = preparedStatement;
for(int i=0;i<medicareList.size();i++){
pstmt.setString(1, medicareList.get(i).getMedicareNo());
pstmt.setString(2, medicareList.get(i).getMedicareUsername());
pstmt.setFloat(3, medicareList.get(i).getMedicareBalance());
pstmt.setFloat(4, medicareList.get(i).getMedicareInfund());
pstmt.setFloat(5, medicareList.get(i).getMedicareOutfund());
pstmt.setTimestamp(6, medicareList.get(i).getMedicareLastModifyTime());
pstmt.addBatch();
}
pstmt.executeBatch();
} catch (Exception e) {
e.printStackTrace();
throw new SQLException(e.getMessage());
}
}
}
/**
* 同步
* @throws SQLException
*/
public void synchronizeMedicare() throws SQLException {
long beginTimestamp = System.currentTimeMillis();
String synMedicareSql = QUERY_SYN_MEDICARE;
//已有同步数据 ,同步该时间之后的数据
Timestamp curMaxTime = medicareService.getCurMaxModifyTime();
if(curMaxTime!= null){
synMedicareSql += " where ckr.cmodifyTime > '"+curMaxTime+"'";
}
Connection synConn = null; //同步数据库连接
Connection localConn = null; //本地数据库连接
Connection ivrConn = null; //语音数据库
PreparedStatement localPstmt = null;
PreparedStatement synPstmt = null;
PreparedStatement ivrPstmt = null;
ResultSet rs = null;
List<Medicare> list = new ArrayList<Medicare>();
int index = 0;
try {
synConn = DBAccessor.getSynConnection();
synPstmt = synConn.prepareStatement(synMedicareSql);
localConn = DBAccessor.getLocalConnection();
localPstmt = localConn.prepareStatement(INSERT_TO_MEDICARE);
localConn.setAutoCommit(false);
ivrConn = DBIVRConnectionFactory.getInstance().getConnection();
ivrPstmt = ivrConn.prepareStatement(INSERT_TO_IVR_MEDICARE);
ivrConn.setAutoCommit(false);
Medicare fo = null;
rs = synPstmt.executeQuery();
while(rs.next()){
fo = new Medicare();
fo.setMedicareId(rs.getInt(1));
fo.setMedicareNo(rs.getString(2));
fo.setMedicareUsername(rs.getString(3));
fo.setMedicareIdentityNo(rs.getString(4));
fo.setMedicareBalance(rs.getFloat(5));
fo.setMedicareInfund(rs.getFloat(6));
fo.setMedicareOutfund(rs.getFloat(7));
fo.setMedicareLastModifyTime(rs.getTimestamp(8));
fo.setMedicareFlag(0); //同步过来的都是未发送
list.add(fo);
index++;
if(index%2000==0){
addsMedicare(localPstmt,list);
addsIvrMedicare(ivrPstmt, list);
list.clear();
}
}
if(CollectionUtils.isNotEmpty(list)){
addsMedicare(localPstmt,list);
addsIvrMedicare(ivrPstmt, list);
list.clear();
}
localConn.commit();
ivrConn.commit();
} catch (Exception e) {
e.printStackTrace();
throw new SQLException(e.getMessage());
} finally{
try
{
if (synPstmt != null){synPstmt.close(); }
if (synConn != null){synConn.close();}
if (localPstmt != null) {localPstmt.close();}
if (localConn != null){localConn.close();}
if (ivrPstmt != null){ivrPstmt.close(); }
if (ivrConn != null){ivrConn.close(); }
}
catch(Exception e) {}
}
logger.debug("======== 花费时间"+(System.currentTimeMillis()-beginTimestamp)/(60*1000.0)+"分钟"+"共插入"+index+"条数据");
}
分享到:
相关推荐
在"javaee Struts2+Hibernate+Spring学生成绩管理系统"中,这三种技术被集成在一起,形成了一个强大的开发框架,用于实现对学生成绩的有效管理。 Struts2是Apache软件基金会的一个开源项目,它是基于MVC(Model-...
Struts 2、Hibernate 和 Spring 是 Java Web 开发中的三个核心框架,它们分别负责不同的职责:Struts 2 主要处理 MVC(Model-View-Controller)架构中的控制器部分,Hibernate 处理对象关系映射(ORM),使得数据库...
- **图书管理**:包括图书的添加、删除、修改、查询等操作,支持批量上传和分类管理。 - **借阅管理**:实现图书的借阅、归还、续借等功能,同时记录借阅历史,方便统计分析。 - **统计报表**:根据图书流通情况生成...
总结,通过整合Hibernate、Spring和DWR,我们可以构建出一套高效、用户体验优良的分页系统,同时实现无刷新、实时排序和批量操作等功能。这样的技术组合在大型Web应用中非常常见,也是提升应用质量的关键所在。理解...
此外,Spring还提供了众多的扩展点,如Spring MVC用于Web层的处理,Spring Security提供安全控制,Spring Batch支持批量处理等。 在"OnlineMall"目录下,可能包含了项目的源代码、配置文件和其他资源。源代码中,...
为了整合Hibernate和Spring,需要将所需的jar包复制到项目的`WebContent\lib`目录下,并在项目的构建路径中添加这些jar包。其中包括Hibernate、Spring及相关依赖。 示例代码展示了如何实现一个基于Hibernate的基础...
4、Grid列表和表单,包含添加、删除、批量删除、修改、查看、图片查看和按条件查询列表等功能。 5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7、用户管理和部门管理。 8、权限管理。不仅...
3. 性能优化:如缓存策略、数据库索引优化、批量操作等,以提高系统性能。 4. 权限控制:实现角色权限管理,限制不同用户访问特定功能,保障系统安全。 5. 日志记录:记录系统操作日志,便于问题排查和后期维护。 ...
使用flex+spring+hibernate 数据库mysql 主要功能添加、分页查询、批量更新、批量删除 数据库由hibernate自动创建(需修改hiberante配置) 下载后评论加1分记得评级
1. 引入依赖:在项目中添加Spring和Hibernate的依赖库。 2. 配置Hibernate:创建Hibernate的配置文件(如hibernate.cfg.xml),定义数据源、SessionFactory等。 3. 创建实体类:用Java类表示数据库表,并用注解或XML...
通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8) 本文档介绍了一个基于 ExtJS 4.2、Hibernate 4.1.7 和 Spring MVC 3.2.8 的通用后台管理系统。该系统可以作为 OA、网站、电子政务、ERP、CRM、APP...
3. 数据管理:包括Grid列表和表单,提供添加、删除、批量删除、修改、查看、图片查看和按条件查询等功能。 4. 数据导入导出:支持Excel数据的导入导出,兼容xlsx和xls文件格式。 5. 资源管理:实现菜单管理,方便...
4、Grid列表和表单,包含添加、删除、批量删除、修改、查看、图片查看和按条件查询列表等功能。 5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7、用户管理和部门管理。 8、权限管理。不仅...
《通用后台管理系统:基于ExtJS 5.1 + Hibernate 4.1.7 + Spring MVC 3.2.8的高效框架》 该系统是一种高度可定制和可扩展的后台管理解决方案,适用于OA(办公自动化)、网站、电子政务、ERP(企业资源规划)、CRM...
4、Grid列表和表单,包含添加、删除、批量删除、修改、查看、图片查看和按条件查询列表等功能。 5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7、用户管理和部门管理。 8、权限管理。不仅...
2. 实现了Grid列表和表单操作,支持添加、删除、批量删除、修改、查看、图片查看和条件查询,增强了数据交互和管理。 3. 提供了Excel数据的导入导出功能,支持xlsx和xls两种格式,便于数据的导入和导出操作。 4. ...
- 实体类上添加Hibernate的注解,如`@Entity`、`@Table`等,声明属性与数据库字段的对应关系。 - 创建DAO接口和实现类,使用Hibernate SessionFactory进行数据库操作。 4. **整合Struts1.3和Spring2.5**: - ...
在Java Web开发中,Servlet和JSP常被用于构建动态网站。这个例子展示了如何使用Servlet和JSP...在实际开发中,为了提高可维护性和安全性,通常会采用MVC框架(如Spring MVC)和ORM框架(如Hibernate)来简化这些任务。