All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.featherfly.component.sorm.operate.AbstractOperate Maven / Gradle / Ivy

There is a newer version: 1.3.9
Show newest version

package cn.featherfly.component.sorm.operate;

import java.io.Serializable;
import java.sql.PreparedStatement;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;

import cn.featherfly.common.bean.BeanUtils;
import cn.featherfly.common.db.JdbcUtils;
import cn.featherfly.common.db.metadata.DatabaseMetadata;
import cn.featherfly.common.db.metadata.DatabaseMetadataManager;
import cn.featherfly.common.lang.LangUtils;
import cn.featherfly.component.sorm.mapping.ClassMapping;

/**
 * 

* 数据库操作的抽象类 *

* @param 类型 * @author 钟冀 * @since 1.0 * @version 1.0 */ public abstract class AbstractOperate { /** * logger */ protected final Logger logger = LoggerFactory.getLogger(this.getClass()); /** * sql 语句 */ protected String sql; /** * jdbcTemplate */ protected JdbcTemplate jdbcTemplate; /** * 类型映射 */ protected ClassMapping classMapping; /** * 数据库元数据 */ protected DatabaseMetadata meta; /** * 属性在SQL中出现的位置,即SQL语句中每个问号对应的对象属性 */ protected Map propertyPositions = new HashMap(0); /** * 使用给定数据源以及给定对象生成其相应的操作. * @param type 类 * @param jdbcTemplate jdbcTemplate */ public AbstractOperate(Class type, JdbcTemplate jdbcTemplate) { this(type, jdbcTemplate, null); } /** * 使用给定数据源以及给定对象生成其相应的操作. * @param type 类 * @param jdbcTemplate jdbcTemplate * @param dataBase 具体库 */ public AbstractOperate(Class type, JdbcTemplate jdbcTemplate, String dataBase) { if (LangUtils.isEmpty(dataBase)) { meta = DatabaseMetadataManager.getDefaultManager().create(jdbcTemplate.getDataSource()); } else { meta = DatabaseMetadataManager.getDefaultManager().create(jdbcTemplate.getDataSource(), dataBase); } this.jdbcTemplate = jdbcTemplate; this.classMapping = (ClassMapping) ClassMapping.getMappedClass(type, meta); initSql(); } /** * @return 返回sql */ public String getSql() { return sql; } /** *

* 设置预编译参数 *

* @param prep 执行SQL的PreparedStatementWrapper * @param entity 对象 */ protected void setParameter(PreparedStatement prep, T entity) { for (Entry propertyPosition : propertyPositions.entrySet()) { JdbcUtils.setParameter(prep, propertyPosition.getKey(), BeanUtils.getProperty(entity, propertyPosition.getValue())); } } public Object[] getParameters(T entity) { Object[] params = new Object[propertyPositions.size()]; int i = 0; for (Entry propertyPosition : propertyPositions.entrySet()) { params[i] = BeanUtils.getProperty(entity, propertyPosition.getValue()); i++; } return params; } /** *

* 设置预编译参数 *

* @param prep 执行SQL的PreparedStatementWrapper * @param id 主键 */ protected void setParameter(PreparedStatement prep, Serializable id) { // 还不支持复合主键 JdbcUtils.setParameter(prep, 1, id); } /** *

* 初始化SQL,由具体的实现类来实现 *

*/ protected abstract void initSql(); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy