
org.smallframework.spring.DaoTemplate Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sorm Show documentation
Show all versions of sorm Show documentation
java jpa tool for spring
The newest version!
package org.smallframework.spring;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.transaction.support.TransactionSynchronizationManager;
import sf.database.dao.DBClient;
import javax.sql.DataSource;
import java.sql.Connection;
/**
* spring dao 封装类
* @author sxf
*/
public class DaoTemplate extends DBClient {
private static final Logger LOGGER = LoggerFactory
.getLogger(DaoTemplate.class);
private TransactionStatus status;
private PlatformTransactionManager transactionManager;
private TransactionDefinition transactionDefinition = new DefaultTransactionDefinition();
public DaoTemplate(DataSource dataSource) {
super(dataSource);
}
@Override
protected DataSource getDataSource(boolean readonly) {
//在事务里都用master,除了readonly事务
boolean inTrans = TransactionSynchronizationManager.isActualTransactionActive();
if (inTrans) {
boolean isReadOnly = TransactionSynchronizationManager.isCurrentTransactionReadOnly();
if (!isReadOnly) {
return super.getDataSource(false);
}
}
return super.getDataSource(readonly);
}
protected Connection getRealConnection(DataSource ds) {
return DataSourceUtils.getConnection(ds);
}
protected void closeRealConnection(Connection conn, DataSource ds) {
DataSourceUtils.releaseConnection(conn, ds);
}
@Override
public void start() {
// 不支持该操作
throw new UnsupportedOperationException("no support!");
}
public DaoTemplate() {
}
public boolean isTransaction() {
return TransactionSynchronizationManager.isActualTransactionActive();
}
public boolean isCurrentTransactionReadOnly() {
return TransactionSynchronizationManager.isCurrentTransactionReadOnly();
}
public boolean isSynchronizationActive() {
return TransactionSynchronizationManager.isSynchronizationActive();
}
public void beginTransaction() {
if (status == null || status.isCompleted()) {
status = this.getTransactionManager().getTransaction(
transactionDefinition);
if (status.isNewTransaction()) {
if (LOGGER.isInfoEnabled()) {
LOGGER.info("DaoTemplate开启新事务");
}
} else {
if (LOGGER.isInfoEnabled()) {
LOGGER.info("DaoTemplate未开启新事务,将使用之前开启的事务");
}
}
}
}
public void commitTransaction() {
if (status != null && !status.isCompleted()) {
if (LOGGER.isInfoEnabled()) {
LOGGER.info("DaoTemplate提交事务");
}
this.getTransactionManager().commit(status);
}
}
public void rollbackTransaction() {
if (status != null && !status.isCompleted()) {
if (LOGGER.isInfoEnabled()) {
LOGGER.info("DaoTemplate事务将回滚");
}
this.getTransactionManager().rollback(status);
}
}
public PlatformTransactionManager getTransactionManager() {
if (transactionManager == null) {
transactionManager = new DataSourceTransactionManager(
getDataSource(false));
}
return transactionManager;
}
public void setTransactionManager(
PlatformTransactionManager transactionManager) {
this.transactionManager = transactionManager;
}
public TransactionDefinition getTransactionDefinition() {
return transactionDefinition;
}
public void setTransactionDefinition(
TransactionDefinition transactionDefinition) {
this.transactionDefinition = transactionDefinition;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy