mysql 写自定义方法实现oracle的sequence,并定义一张sequence表。见前一篇博客。
package com.edoc.service.impl;
import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.edoc.service.MysqlSequenceServiceI;
@Service("mysqlSequenceService")
@Transactional
public class MysqlSequenceServiceImpl implements MysqlSequenceServiceI {
/**
* 初始化Log4j的一个实例
*/
private static final Logger logger = Logger
.getLogger(MysqlSequenceServiceImpl.class);
/**
* 注入一个sessionFactory属性,并注入到父类(HibernateDaoSupport)
* **/
@Autowired
@Qualifier("sessionFactory")
private SessionFactory sessionFactory;
public Session getSession() {
// 事务必须是开启的(Required),否则获取不到
return sessionFactory.getCurrentSession();
}
@Override
public Integer nextval(String sequenceName) {
String sql = "SELECT NEXTVAL('"+sequenceName+"')";
Object o = getSession().createSQLQuery(sql).uniqueResult();
return (Integer)o;
}
@Override
public Integer currval(String sequenceName) {
String sql = "SELECT CURRVAL('"+sequenceName+"')";
Object o = getSession().createSQLQuery(sql).uniqueResult();
return (Integer)o;
}
public Long SerialNumber() {
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
String today = df.format(new Date());
String num = String.format("%06d", 1);
String number = today+num;
Long serialNum = Long.valueOf(number);
return serialNum;
}
}