hibernate动态创建数据库表名几种方式
数据库中数据量很大, 但又不可以删除时同时又要优化程序检索数据时间。
答:方式有很多比如 创建数据库表分区,创建索引, 存储过程等; 我这里采用动态创建数据库表的方式。
完全可以在不创建表分区情况下实行分表管理 例如 日志记录表 将日期(yyyy-MM)作为默认表后缀动态追加, 例如 文章发布表 将用户名作为后缀名进行动态追加 ;
动态创建数据库表的方式要具体问题具体分析, 比如JDBC中直接使用create table 表名_dynamicStr(...);
文章发布系统 dynamicStr 可以用已注册登陆的用户名, 日志记录表 dynamicStr 可以采用 ‘log_‘+new SimpleDateFormat("yyyyMM").format(new Date());
下面例子是使用hibernate动态创建数据库表的例子, 如果有兴趣可以将下面的代码抽取成动态创建表的Utils.
public class ReportDBApi { private SessionFactory sessionFactory = null; public ReportDBApi(){ createSession(); } public void createSession(){ Date date = new Date(); SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyyMMdd"); String now_time = simpledateformat.format(date); String tablename = "TBL_REPORT_STATUS_20050707"; tablename = "TBL_REPORT_STATUS_" + now_time; try { Configuration cfg = new Configuration().addClass(cn.sports.vas.sms.unicom.TblReportStatus.class).configure(); Table table = cfg.getClassMapping(TblReportStatus.class).getTable(); table.setName(tablename); cfg.getClassMapping(TblReportStatus.class).setTable(table); sessionFactory = cfg.buildSessionFactory(); } catch (MappingException ex) { ex.printStackTrace(); }catch (HibernateException ex) { ex.printStackTrace(); } } public void insertPO(TblReportStatus po) throws HibernateException { Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); session.save(po); tx.commit(); session.close(); } public void closeSession() throws HibernateException { sessionFactory.close(); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。