hibernate实现分表
来源:互联网 发布:mac可以加硬盘吗 编辑:程序博客网 时间:2024/06/02 00:32
Hibernate实现分表处理,分表原理基于SQLInterceptor方式实现
import java.util.Date;import org.hibernate.Session;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.orm.hibernate3.HibernateTemplate;import org.springframework.stereotype.Component;@Componentpublic class TestDAO {@Autowired@Qualifier("XXXXTemplate")private HibernateTemplate template;private SQLInterceptor interceptor = new SQLInterceptor("tableName");public void save(POJO entity){Session session = template.getSessionFactory().openSession(interceptor);/*分表策略:按月份对数据进行分割*/Integer yearMonth = Integer.parseInt(DateUtils.format(new Date(), "yyyyMM"));interceptor.setNewTable("tableName_"+yearMonth);session.save(entity);session.close();System.out.println("返回主键ID:" + entity.getId());}}#HibernateSQL拦截器
import org.hibernate.EmptyInterceptor;public class SQLInterceptor extends EmptyInterceptor {private static final long serialVersionUID = 1637672155224242981L;public SQLInterceptor(String table) {this.table = table;}public String table;private String newTable;public void setNewTable(String newTable) {this.newTable = newTable;}@Overridepublic String onPrepareStatement(String sql) {if (StringUtils.isNotEmpty(table, newTable)) {sql = sql.replaceAll(table, newTable);}return super.onPrepareStatement(sql);}}
使用JDBC方式获取数据库表生成自增ID
private Integer insert(POJO entity, String table) throws SQLException {String insertSQL = "INSERT INTO " + table + " (XXXX)VALUES(?,?)";DataSource dataSource = SessionFactoryUtils.getDataSource(getHibernateTemplate().getSessionFactory());Connection connection = null;PreparedStatement pStatement = null;ResultSet resultSet = null;try {connection = dataSource.getConnection();pStatement = connection.prepareStatement(insertSQL, Statement.RETURN_GENERATED_KEYS);//返回数据库生成自增IDpStatement.setInt(1, entity.getSId());pStatement.setInt(2, entity.getNum());pStatement.executeUpdate();resultSet = pStatement.getGeneratedKeys();if (resultSet.next()) {//获取数据库生成IDreturn resultSet.getInt(1);}} finally {//close()}return -1;}
1 0
- hibernate实现分表
- Hibernate实现分表
- hibernate 实现分表
- 【Hibernate】Hibernate分表的实现--老古董留存
- hibernate shards分库的实现
- Spring-Hibernate分库事务实现
- Hibernate与数据库分表
- Ibatis和Hibernate 数据库分表(动态表名映射)的实现方法
- Ibatis和Hibernate 数据库分表(动态表名映射)的实现方法
- Ibatis和Hibernate 数据库分表(动态表名映射)的实现方法
- Ibatis和Hibernate 数据库分表(动态表名映射)的实现方法
- 数据库 分表 意义、实现
- MySQL 水平分表实现
- 用Ibatis实现分表
- mysql数据库分表实现
- mysql实现hash分表
- Mysql分表以及实现
- mysql分表之MRG_MyISAM存储引擎实现分表
- PHP数组关于数字键名的问题
- J2EE——2014.5.26
- 使用Volatile变量还是原子变量
- Makefile基础
- 用c++库函数实现WCHAR写入文件
- hibernate实现分表
- 第十三周工作周报
- .value和.innerHTML
- Android.mk用法基础
- 逆序建立链表
- port linux & ramdisk
- switch的处理方法
- hdu 4831 Scenic Popularity(模拟)
- 最短路算法汇总