package org.noear.weed;
import org.noear.weed.cache.CacheUsing;
import org.noear.weed.cache.ICacheController;
import org.noear.weed.cache.ICacheService;
import org.noear.weed.ext.Act1;
import org.noear.weed.ext.Act2;
import org.noear.weed.impl.IPageImpl;
import org.noear.weed.wrap.DbType;
import java.sql.SQLException;
import java.util.*;
/**
* Created by noear on 14/11/12.
*
* $. //当前表空间
* $NOW() //说明这里是一个sql 函数
* ?
* ?... //说明这里是一个数组或查询结果
*/
public class DbTableQueryBase<T extends DbTableQueryBase> extends WhereBase<T> implements ICacheController<DbTableQueryBase> {
String _table_raw;
String _table; //表名
SQLBuilder _builder_bef;
int _isLog = 0;
public DbTableQueryBase(DbContext context) {
super(context);
_builder_bef = new SQLBuilder();
}
/**
* 标记是否记录日志
*/
public T log(boolean isLog) {
_isLog = isLog ? 1 : -1;
return (T) this;
}
/**
* 通过表达式构建自己(请使用build替代)
*/
@Deprecated
public T expre(Act1<T> action) {
action.run((T) this);
return (T) this;
}
/**
* 通过表达式构建自己
*/
public T build(Act1<T> builder) {
builder.run((T) this);
return (T) this;
}
protected T table(String table) { //相当于 from
if (table.startsWith("#")) {
_table = table.substring(1);
_table_raw = _table;
} else {
_table_raw = table;
if (table.indexOf('.') > 0) {
_table = table;
} else {
if (WeedConfig.isUsingSchemaPrefix && _context.schema() != null) {
_table = fmtObject(_context.schema() + "." + table);
} else {
_table = fmtObject(table); //"$." + table;
}
}
}
return (T) this;
}
/**
* 添加SQL with 语句(要确保数据库支持)
* <p>
* 例:db.table("user u")
* .with("a","select type num from group by type")
* .where("u.type in(select a.type) and u.type2 in (select a.type)")
* .select("u.*")
* .getMapList();
*/
public T with(String name, String code, Object... args) {
if (_builder_bef.length() < 6) {
_builder_bef.append(" WITH ");
} else {
_builder_bef.append(",");
}
_builder_bef.append(fmtColumn(name))
.append(" AS (")
.append(code, args)
.append(") ");
return (T) this;
}
public T with(String name, SelectQ select) {
if (_builder_bef.length() < 6) {
_builder_bef.append(" WITH ");
} else {
_builder_bef.append(",");
}
_builder_bef.append(fmtColumn(name))
.append(" AS (")
.append(select)
.append(") ");
return (T) this;
}
/**
* 添加 FROM 语句
*/
public T from(String table) {
_builder.append(" FROM ").append(fmtObject(table));
return (T) this;
}
private T join(String style, String table) {
if (table.startsWith("#")) {
_builder.append(style).append(table.substring(1));
} else {
if (WeedConfig.isUsingSchemaPrefix && _context.schema() != null) {
_builder.append(style).append(fmtObject(_context.schema() + "." + table));
} else {
_builder.append(style).append(fmtObject(table));
}
}
return (T) this;
}
/**
* 添加SQL 内关联语句
*/
public T innerJoin(String table) {
return join(" INNER JOIN ", table);
}
/**
* 添加SQL 左关联语句
*/
public T leftJoin(String table) {
return join(" LEFT JOIN ", table);
}
/**
* 添加SQL 右关联语句
*/
public T rightJoin(String table) {
return join(" RIGHT JOIN ", table);
}
/**
* 添加无限制代码
*/
public T append(String code, Object... args) {
_builder.append(code, args);
return (T) this;
}
public T on(String code) {
_builder.append(" ON ").append(code);
return (T) this;
}
public T onEq(String column1, String column2) {
_builder.append(" ON ").append(fmtColumn(column1)).append("=").append(fmtColumn(column2));
return (T) this;
}
/**
* 执行插入并返回自增值,使用dataBuilder构建的数据
*/
public long insert(Act1<IDataItem> dataBuilder) throws SQLException {
DataItem item = new DataItem();
dataBuilder.run(item);
return insert(item);
}
/**
* 执行插入并返回自增值,使用data数据
*/
public long insert(IDataItem data) throws SQLException {
if (data == null || data.count() == 0) {
return 0;
}
_builder.clear();
_context.getDialect()
.buildInsertOneCode(_context, _table, _builder, this::isSqlExpr, _usingNull, data);
return compile().insert();
}
/**
* 根据约束进行插入
*/
public long insertBy(IDataItem data, String conditionFields) throws SQLException {
if (data == null || data.count() == 0) {
return 0;
}
String[] ff = conditionFields.split(",");
if (ff.length == 0) {
throw new RuntimeException("Please enter constraints");
}
this.where("1=1");
for (String f : ff) {
this.andEq(f, data.get(f));
}
if (this.exists()) {
return 0;
}
return insert(data);
}
/**
* 执行批量合并插入,使用集合数据
*/
public boolean insertList(List<DataItem> valuesList) throws SQLException {
if (valuesList == null) {
return false;
}
return insertList(valuesList.get(0), valuesList);
}
/**
* 执行批量合并插入,使用集合数据(由dataBuilder构建数据)
*/
public <T> boolean insertList(Collection<T> valuesList, Act2<T, DataItem> dataBuilder) throws SQLException {
List<DataItem> list2 = new ArrayList<>();
for (T values : valuesList) {
DataItem item = new DataItem();
dataBuilder.run(values, item);
list2.add(item);
}
if (list2.size() > 0) {
return insertList(list2.get(0), list2);
} else {
return false;
}
}
protected <T extends GetHandler> boolean insertList(IDataItem cols, Collection<T> valuesList) throws SQLException {
if (valuesList == null || valuesList.size() == 0) {
return false;
}
if (cols == null || cols.count() == 0) {
return false;
}
_builder.backup();
_context.getDialect().buildInsertOneCode(_context, _table, _builder, this::isSqlExpr, true, cols);
List<Object[]> argList = new ArrayList<>();
String tml = _builder.toString();
for (GetHandler item : valuesList) {
List<Object> tmp = new ArrayList<>();
for (String key : cols.keys()) {
tmp.add(item.get(key));
}
argList.add(tmp.toArray());
}
_builder.clear();
_builder.append(tml, argList.toArray());
int[] rst = compile().executeBatch();
_builder.restore();
return rst.length > 0;
}
/**
* 使用data的数据,根据约束字段自动插入或更新
* <p>
* 请改用 upsertBy
*/
@Deprecated
public void updateExt(IDataItem data, String conditionFields) throws SQLException {
upsertBy(data, conditionFields);
}
/**
* 使用data的数据,根据约束字
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
noear微型ORM框架(支持:java sql,xml sql,annotation sql;事务;缓存;监控;等...) (348个子文件)
weed3-mapper.dtd 2KB
weed3-generator.dtd 2KB
spring.factories 131B
nav.ftl 3KB
view.ftl 93B
view.ftl 93B
.gitignore 279B
nav.htm 3KB
nav.htm 2KB
view.htm 93B
DbTableQueryBase.java 22KB
XmlSqlCompiler.java 22KB
WhereBase.java 17KB
MgTableQuery.java 17KB
XmlSqlServiceGenerator.java 16KB
XmlSqlMapperGenerator.java 16KB
DbAccess.java 11KB
SQLer.java 11KB
DbContext.java 10KB
BaseMapperWrap.java 9KB
XmlEntityGenerator.java 9KB
DbContextMetaData.java 9KB
MongoX.java 8KB
MapperInvokeForAnn.java 7KB
MapperTest2.java 7KB
MapperUtil.java 7KB
MapperWhereQ.java 6KB
DataItem.java 6KB
MapperTest2.java 6KB
ClassWrap.java 6KB
SQLBuilder.java 6KB
demo_table.java 5KB
CacheUsing.java 5KB
Datetime.java 5KB
XmlSqlBlock.java 5KB
MapperTest.java 5KB
DbUtil.java 5KB
MapperTest.java 5KB
WeedConfig.java 5KB
NamingUtils.java 5KB
DbQueryProcedure.java 5KB
NamingUtils.java 5KB
DataList.java 5KB
DbXmlsqlProcedure.java 5KB
DbDialectBase.java 5KB
TableTest.java 4KB
LinkedCaseInsensitiveMap.java 4KB
CacheTags.java 4KB
DbTableQuery.java 4KB
Demo2.java 4KB
XmlParser.java 4KB
Variate.java 4KB
EhCache.java 4KB
MemCache.java 4KB
MongoTest3.java 4KB
MapperHandler.java 4KB
DbVarType.java 3KB
Command.java 3KB
CacheTest.java 3KB
DbUtil.java 3KB
RedisCache.java 3KB
FieldWrap.java 3KB
PropertyWrap.java 3KB
JMHMain.java 3KB
SqlTypeUtil.java 3KB
TypeConverter.java 3KB
CompilerUtil.java 3KB
DbFormater.java 3KB
DbDataSource.java 3KB
DbTran.java 3KB
DbType.java 3KB
JdbcService.java 3KB
TableUpdateListTest.java 3KB
DbOracleDialect.java 3KB
MongoTest2.java 3KB
XmlFileScaner.java 3KB
TranTest.java 3KB
JavaController.java 3KB
WeedService.java 3KB
LocalCache.java 3KB
PropertyTest.java 3KB
weed_xml_sql.java 3KB
DbSQLiteDialect.java 2KB
JavaController.java 2KB
TestController.java 2KB
TmlAnalyzer.java 2KB
Tran1Demo.java 2KB
_TimeTest.java 2KB
XmlSqlCompilerTest.java 2KB
Cache1Demo.java 2KB
XmlSqlLoader.java 2KB
BaseMapper.java 2KB
_PageTest.java 2KB
RedisCacheTest.java 2KB
TableInsertListTest.java 2KB
XmlExcController.java 2KB
BaseEntityWrap.java 2KB
LocalCacheTest.java 2KB
IOUtils.java 2KB
MemCacheTest.java 2KB
共 348 条
- 1
- 2
- 3
- 4
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6723
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功