Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
sf.jooq.JooqImpl Maven / Gradle / Ivy
package sf.jooq;
import org.jooq.Attachable;
import org.jooq.Condition;
import org.jooq.Configuration;
import org.jooq.Delete;
import org.jooq.Insert;
import org.jooq.Record;
import org.jooq.SQLDialect;
import org.jooq.Select;
import org.jooq.Table;
import org.jooq.TableField;
import org.jooq.UniqueKey;
import org.jooq.Update;
import org.jooq.impl.DSL;
import org.jooq.impl.DefaultConfiguration;
import sf.common.wrapper.Page;
import sf.core.DBObject;
import sf.database.dao.DBContext;
import sf.database.dialect.DBDialect;
import sf.database.jdbc.sql.Crud;
import sf.database.jdbc.sql.PageStrategy;
import sf.database.util.DBUtils;
import sf.jooq.tables.JooqTable;
import sf.spring.util.CollectionUtils;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
import java.util.stream.Stream;
public class JooqImpl implements JooqInf {
private static JooqImpl instance = new JooqImpl();
public static JooqImpl getInstance() {
return instance;
}
private JooqImpl() {
}
@Override
public boolean jooqExists(Connection conn, SQLDialect sqlDialect, List condition, Class clz) {
DBDialect dialect = DBUtils.doGetDialect(conn, false);
DBContext context = DBUtils.doGetDBContext(conn);
JooqTable table = JooqTables.getTable(context, clz, dialect);
if (sqlDialect == null) {
sqlDialect = JooqDialectUtils.getSQLDialect(dialect.getJooqDialect());
}
if (sqlDialect == null) {
sqlDialect = SQLDialect.DEFAULT;
}
Select select = null;
if (CollectionUtils.isNotEmpty(condition)) {
select = DSL.using(sqlDialect).select(DSL.field("1")).from(table).where(condition).limit(1);
} else {
select = DSL.using(sqlDialect).select(DSL.field("1")).from(table).limit(1);
}
String sql = select.getSQL();
List values = select.getBindValues();
Byte b = Crud.getInstance().getCrudSql().selectOne(conn, Byte.class, sql, values.toArray());
return b != null && b > 0;
}
@Override
public T jooqSelectOne(Connection conn, Select select, Class returnClass) {
setDialect(conn, select);
String sql = select.getSQL();
List values = select.getBindValues();
return Crud.getInstance().getCrudSql().selectOne(conn, returnClass, sql, values.toArray());
}
@Override
public List jooqSelectList(Connection conn, Select select, Class returnClass) {
setDialect(conn, select);
String sql = select.getSQL();
List values = select.getBindValues();
return Crud.getInstance().getCrudSql().selectList(conn, returnClass, sql, values.toArray());
}
@Override
public Page jooqSelectPage(Connection conn, Select> countSelect, Select> pageSelect, Class returnClass) {
setDialect(conn, countSelect);
setDialect(conn, pageSelect);
String sql = pageSelect.getSQL();
List values = pageSelect.getBindValues();
return Crud.getInstance().getCrudSql().selectPageRaw(conn, 0, 0, (Class) returnClass, countSelect.getSQL(), countSelect.getBindValues().toArray(), sql, values.toArray(), PageStrategy.hasOffsetLimit);
}
@Override
public void selectIterator(Connection conn, Consumer> ormIt, Select select, Class returnClass) {
setDialect(conn, select);
String sql = select.getSQL();
List values = select.getBindValues();
Crud.getInstance().getCrudSql().selectIterator(conn, ormIt, returnClass, false, sql, values.toArray());
}
@Override
public void selectStream(Connection conn, Consumer> ormStream, Select select, Class returnClass) {
setDialect(conn, select);
String sql = select.getSQL();
List values = select.getBindValues();
Crud.getInstance().getCrudSql().selectStream(conn, ormStream, returnClass, false, sql, values.toArray());
}
private void setDialect(Connection conn, Attachable select) {
Configuration configuration = select.configuration();
if (configuration == null) {
configuration = new DefaultConfiguration();
select.attach(configuration);
}
if (configuration.dialect() == SQLDialect.DEFAULT) {
SQLDialect sqlDialect = JooqDialectUtils.getSQLDialect(DBUtils.doGetDialect(conn, false).getJooqDialect());
if (sqlDialect != null) {
//需要从连接中动态获取dialect
configuration.set(sqlDialect);
}
}
}
@Override
public int jooqInsert(Connection conn, Insert insert) {
setDialect(conn, insert);
String sql = insert.getSQL();
List values = insert.getBindValues();
return Crud.getInstance().getCrudSql().execute(conn, sql, values.toArray());
}
@Override
public int jooqInsert(Connection conn, Insert insert, Table table, Map keyValues) {
setDialect(conn, insert);
String sql = insert.getSQL();
List values = insert.getBindValues();
List pkeys = new ArrayList<>();
if (table != null && table.getPrimaryKey() != null) {
UniqueKey uk = table.getPrimaryKey();
if (uk != null) {
List> list = uk.getFields();
if (CollectionUtils.isNotEmpty(list)) {
for (TableField f : list) {
pkeys.add(f.getName());
}
}
}
}
return Crud.getInstance().getCrudSql().execute(conn, sql, values.toArray(), false, pkeys, keyValues);
}
@Override
public int jooqUpdate(Connection conn, Update update) {
setDialect(conn, update);
String sql = update.getSQL();
List values = update.getBindValues();
return Crud.getInstance().getCrudSql().execute(conn, sql, values.toArray());
}
@Override
public int jooqDelect(Connection conn, Delete delete) {
setDialect(conn, delete);
String sql = delete.getSQL();
List values = delete.getBindValues();
return Crud.getInstance().getCrudSql().execute(conn, sql, values.toArray());
}
}