org.jfaster.badger.Badger Maven / Gradle / Ivy
package org.jfaster.badger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import javax.sql.DataSource;
import org.jfaster.badger.exception.BadgerException;
import org.jfaster.badger.jdbc.datasource.DataSourceFactory;
import org.jfaster.badger.jdbc.datasource.support.SingleDataSourceFactory;
import org.jfaster.badger.sql.delete.DeleteStatement;
import org.jfaster.badger.sql.delete.DeleteStatementImpl;
import org.jfaster.badger.sql.delete.JdbcDeleteHelper;
import org.jfaster.badger.sql.get.JdbcGetHelper;
import org.jfaster.badger.sql.insert.JdbcInsertHelper;
import org.jfaster.badger.sql.interceptor.SqlInterceptor;
import org.jfaster.badger.sql.select.Condition;
import org.jfaster.badger.sql.select.ConditionImpl;
import org.jfaster.badger.sql.select.Query;
import org.jfaster.badger.sql.select.QueryImpl;
import org.jfaster.badger.sql.select.SQLQuery;
import org.jfaster.badger.sql.select.SQLQueryImpl;
import org.jfaster.badger.sql.select.TypeQueryImpl;
import org.jfaster.badger.sql.update.JdbcUpdateHelper;
import org.jfaster.badger.sql.update.UpdateSqlStatement;
import org.jfaster.badger.sql.update.UpdateSqlStatementImpl;
import org.jfaster.badger.sql.update.UpdateStatement;
import org.jfaster.badger.sql.update.UpdateStatementImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* badger 入口
* @author yanpengfang
* @create 2019-01-11 9:08 PM
*/
public class Badger extends Config {
private static Logger logger = LoggerFactory.getLogger(Badger.class);
/*****数据源相关*****/
private Map dataSourceFactories = new HashMap<>();
public void setDataSource(DataSource datasource) {
DataSourceFactory factory = new SingleDataSourceFactory(datasource);
dataSourceFactories.put(factory.getName(), factory);
}
public void setDataSourceFactory(DataSourceFactory dataSourceFactory) {
dataSourceFactories.put(dataSourceFactory.getName(), dataSourceFactory);
}
public void setDataSourceFactories(List factories) {
for (DataSourceFactory factory : factories) {
dataSourceFactories.put(factory.getName(), factory);
}
}
public DataSource getMasterDataSource(String name) {
DataSourceFactory factory = dataSourceFactories.get(name);
if (factory == null) {
throw new BadgerException("dataSource name:%s is not register", name);
}
return factory.getMasterDataSource();
}
public DataSource getSlaveDataSource(String name) {
DataSourceFactory factory = dataSourceFactories.get(name);
if (factory == null) {
throw new BadgerException("dataSource name:%s is not register", name);
}
return factory.getSlaveDataSource();
}
/*********拦截器相关*********/
private SqlInterceptor interceptor;
public void setInterceptor(SqlInterceptor interceptor) {
this.interceptor = interceptor;
}
public SqlInterceptor getInterceptor() {
return this.interceptor;
}
/*************实例化相关*****************/
/**
*
* @param dataSource
* @return
*/
public static Badger newInstance(DataSource dataSource) {
Badger badger = newInstance();
badger.setDataSource(dataSource);
return badger;
}
/**
*
* @param dataSourceFactory
* @return
*/
public static Badger newInstance(DataSourceFactory dataSourceFactory) {
Badger badger = newInstance();
badger.setDataSourceFactory(dataSourceFactory);
return badger;
}
/**
*
* @param dataSourceFactories
* @return
*/
public static Badger newInstance(DataSourceFactory... dataSourceFactories) {
return newInstance(Arrays.asList(dataSourceFactories));
}
/**
*
* @param dataSourceFactories
* @return
*/
public static Badger newInstance(List dataSourceFactories) {
Badger badger = newInstance();
badger.setDataSourceFactories(dataSourceFactories);
return badger;
}
private final static CopyOnWriteArrayList instances = new CopyOnWriteArrayList<>();
private Badger() {
}
public synchronized static Badger newInstance() {
if (instances.size() == 1) {
if (logger.isWarnEnabled()) {
logger.warn("Find out more badger instances, it is recommended to use only one");
}
}
Badger badger = new Badger();
instances.add(badger);
return badger;
}
public static List getInstances() {
List badgers = new ArrayList<>(instances);
return Collections.unmodifiableList(badgers);
}
/**********************************db 操作**************************************/
/**********************************保存*****************************************/
/**
* 保存所有字段
* @param t 要保存的对象
* @return
*/
public int save(T t) {
return JdbcInsertHelper.insert(t, false, this);
}
/**
* 保存所有字段 忽略唯一索引冲突
* @param t 要保存的对象
* @return
*/
public int saveIgnore(T t) {
return JdbcInsertHelper.insert(t, true, this);
}
/**
* 保存非空字段
* @param t 要保存的对象
* @return
*/
public int saveNotNull(T t) {
return JdbcInsertHelper.insertNotNull(t, false, this);
}
/**
* 保存非空字段 忽略唯一索引
* @param t 要保存的对象
* @return
*/
public int saveNotNullIgnore(T t) {
return JdbcInsertHelper.insertNotNull(t, true, this);
}
/**
* 指定分库分表值,保存所有字段
* @param t 要保存的对象
* @param s 分库分表字段
* @return
*/
public int save(T t, Object s) {
return JdbcInsertHelper.insert(t, false, s, this);
}
/**
* 指定分库分表值,保存所有字段 忽略唯一索引冲突
* @param t 要保存的对象
* @param s 分库分表字段
* @return
*/
public int saveIgnore(T t, Object s) {
return JdbcInsertHelper.insert(t, true, s, this);
}
/**
* 指定分库分表值,保存非空字段
* @param t 要保存的对象
* @param s 分库分表字段
* @return
*/
public int saveNotNull(T t, Object s) {
return JdbcInsertHelper.insertNotNull(t, false, s, this);
}
/**
* 指定分库分表值,保存非空字段 忽略唯一索引
* @param t 要保存的对象
* @param s 分库分表字段
* @return
*/
public int saveNotNullIgnore(T t, Object s) {
return JdbcInsertHelper.insertNotNull(t, true, s, this);
}
/**********************************删除*****************************************/
/**
* 根据id删除
* @param clazz 对象类型
* @param id 对象id 一般对应数据库中的id
* @return
*/
public int delete(Class clazz, Object id) {
return JdbcDeleteHelper.deleteEntity(clazz, id, this);
}
/**
* 指定分库分表值,根据id删除
* @param clazz 对象类型
* @param id 对象id 一般对应数据库中的id
* @param s 分库分表值
* @return
*/
public int delete(Class clazz, Object id, Object s) {
return JdbcDeleteHelper.deleteEntity(clazz, id, s, this);
}
/**
* 根据条件删除
* @param clazz 对象类型
* @param condition 条件
* @return
*/
public DeleteStatement createDeleteStatement(Class clazz, String condition) {
return new DeleteStatementImpl(clazz, condition, this);
}
/**
* 根据条件删除
* @param clazz 对象类型
* @param condition 条件
* @return
*/
public DeleteStatement createDeleteStatement(Class clazz, Condition condition) {
return new DeleteStatementImpl(clazz, condition, this);
}
/**********************************修改*****************************************/
/**
* 更新所有字段
* @param t 更新对象
* @return
*/
public int update(T t) {
return JdbcUpdateHelper.updateEntity(t, this);
}
/**
* 指定分库分表值,更新所有字段
* @param t 更新对象
* @param s 分库分表值
* @return
*/
public int update(T t, Object s) {
return JdbcUpdateHelper.updateEntity(t, s, this);
}
/**
* 根据条件更新指定字段
* @param clazz 对象类型
* @param updateStatement 更新字段
* @param condition 条件
* @return
*/
public UpdateStatement createUpdateStatement(Class clazz, String updateStatement, String condition) {
return new UpdateStatementImpl<>(clazz, updateStatement, condition, this);
}
/**
* 自定义sql
* @param sql 自定义sql
* @return
*/
public UpdateSqlStatement createUpdateSqlStatement(String sql) {
return new UpdateSqlStatementImpl(sql, this);
}
/**********************************查询*****************************************/
/**
* 根据id获取
* @param clazz 对象类型
* @param id 对象id 一般对应数据库中的id
* @return
*/
public T get(Class clazz, Object id) {
return JdbcGetHelper.get(clazz, id, this, false);
}
/**
* 指定分库分表值,根据id获取
* @param clazz 对象类型
* @param id 对象id 一般对应数据库中的id
* @param s 分库分表值
* @return
*/
public T get(Class clazz, Object id, Object s) {
return JdbcGetHelper.get(clazz, id, s, this, false);
}
/**
* 根据id获取 可以指定是否强制走主库
* @param clazz 对象类型
* @param id 对象id,一般对应数据库中的id
* @return
*/
public T getFromMaster(Class clazz, Object id) {
return JdbcGetHelper.get(clazz, id, this, true);
}
/**
* 指定分库分表值,根据id获取 可以指定是否强制走主库
* @param clazz 对象类型
* @param id 对象id 一般对应数据库中的id
* @param s 分库分表值
* @return
*/
public T getFromMaster(Class clazz, Object id, Object s) {
return JdbcGetHelper.get(clazz, id, s, this, true);
}
/**
* 根据条件查询指定字段
* @param clazz 对象类型
* @param columns 查询的列
* @param condition 条件
* @return
*/
public Query createQuery(Class clazz, String columns, String condition) {
return new QueryImpl<>(clazz, columns, condition, this);
}
/**
* 根据条件查询所有字段
* @param clazz 对象类型
* @param condition 条件
* @return
*/
public Query createQuery(Class clazz, String condition) {
return new QueryImpl<>(clazz, condition, this);
}
/**
* 根据条件查询指定字段
* @param clazz 对象类型
* @param columns 查询的列
* @param condition 条件
* @return
*/
public Query createQuery(Class clazz, Class returnType, String columns, String condition) {
return new TypeQueryImpl<>(clazz, returnType, columns, condition, this);
}
/**
* 根据条件查询所有字段
* @param clazz 对象类型
* @param condition 条件
* @return
*/
public Query createQuery(Class clazz, Class returnType, String condition) {
return new TypeQueryImpl<>(clazz, returnType, condition, this);
}
/**
* 根据条件查询指定字段
* @param clazz 对象类型
* @param columns 查询的列
* @param condition 条件
* @return
*/
public Query createQuery(Class clazz, String columns, Condition condition) {
return new QueryImpl<>(clazz, columns, condition, this);
}
/**
* 根据条件查询所有字段
* @param clazz 对象类型
* @param condition 条件
* @return
*/
public Query createQuery(Class clazz, Condition condition) {
return new QueryImpl<>(clazz, condition, this);
}
/**
* 根据条件查询指定字段
* @param clazz 对象类型
* @param columns 查询的列
* @param condition 条件
* @return
*/
public Query createQuery(Class clazz, Class returnType, String columns, Condition condition) {
return new TypeQueryImpl<>(clazz, returnType, columns, condition, this);
}
/**
* 根据条件查询所有字段
* @param clazz 对象类型
* @param condition 条件
* @return
*/
public Query createQuery(Class clazz, Class returnType, Condition condition) {
return new TypeQueryImpl<>(clazz, returnType, condition, this);
}
/**
* 自定义查询
* @param clazz 对象类型
* @param sql 自定义sql
* @return
*/
public SQLQuery createSqlQuery(Class clazz, String sql) {
return new SQLQueryImpl<>(sql, this, clazz);
}
/**************************************动态条件******************************************/
public Condition createCondition() {
return new ConditionImpl();
}
/**
* todo
* 动态刷新数据源
*/
public void refreshDataSourceFactory() {
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy