Commit d738a26b authored by yanzg's avatar yanzg

颜佐光工具类

parent 89a50d84
package com.yanzuoguang.util.vo;
/**
* 初始化Dao数据
*/
public interface InitDao {
/**
* 初始化数据,去掉空值
*/
void init();
}
......@@ -49,13 +49,4 @@ public interface BaseDao {
* @return 需要返回的数据
*/
<T extends Object> T load(Object model, Class<T> cls);
/**
* 写入当前表的日志
*
* @param logType 日志类型,参照LogModel中的常量
* @param id 操作的当前表的主键编号
* @param data 需要处理的数据
*/
void writeLog(int logType, String id, Object data);
}
package com.yanzuoguang.db.db.dao.Impl;
package com.yanzuoguang.db.db.dao;
/**
* created by yanzu on 2017/5/30.
*/
public class DaoConst {
public static final int OperatorTypeCreate = 0;
public static final int OperatorTypeUpdate = 1;
public static final int OperatorTypeRemove = 2;
public static final int OperatorTypeLoad = 3;
/**
* 创建
......
//package com.yanzuoguang.db.db.dao.Impl;
//
//import com.tourbida.sys.core.ILogin;
//import com.tourbida.sys.core.LoginCenter;
//import com.tourbida.sys.core.dao.log.Impl.LogFilterImpl;
//import com.tourbida.sys.core.dao.log.LogDao;
//import com.tourbida.sys.core.plan.PlanCenterFrom;
//import com.tourbida.sys.core.pojo.ICreateDeveiceVO;
//import com.tourbida.sys.core.pojo.ICreateProjectVO;
//import com.tourbida.sys.core.pojo.ICreateVO;
//import com.tourbida.sys.core.pojo.IInitVO;
//import com.tourbida.sys.core.pojo.log.LogVO;
//import com.tourbida.sys.core.util.ObjectHelper;
//import com.tourbida.sys.core.util.StringHelper;
//import com.tourbida.sys.exception.CodeException;
//import com.yanzuoguang.db.db.dao.BaseDao;
//import org.springframework.beans.factory.annotation.Autowired;
//
//import javax.annotation.Resource;
//import java.util.HashMap;
//import java.util.Map;
//
///**
// * 数据库操作的基本工具类
// * created by yanzu on 2017/5/30.
// */
//public abstract class BaseDaoImpl extends BaseDaoSql implements BaseDao {
//
// public static final int OperatorTypeCreate = 0;
// public static final int OperatorTypeUpdate = 1;
// public static final int OperatorTypeRemove = 2;
// public static final int OperatorTypeLoad = 3;
//
// /**
// * 数据库执行类
// */
// @Autowired
// protected PlanCenterFrom planCenterFrom;
//
// /**
// * 登录中心
// */
// @Autowired
// protected LoginCenter loginCenter;
//
// /**
// * 日志操作类
// */
// @Resource
// private LogDao logDao;
//
// @Autowired
// private LogFilterImpl logFilterImpl;
//
// /**
// * 写入到数据操作类
// *
// * @param logType 日志类型
// * @param id 操作编号
// * @param data 数据
// */
// public void writeLog(int logType, String id, Object data) {
// String tableName = this.Table.Table.getName();
// if (StringHelper.IsEmpty(id)) {
// return;
// }
// // 判断是否需要过滤
// if (logFilterImpl.isFilter(tableName, LogFilterImpl.TypeLog, logType, data)) {
// return;
// }
// ILogin login = loginCenter.getCurrent(false);
// LogVO log = new LogVO();
// log.LogTable = tableName;
// log.LogType = logType;
// log.LogKey = id;
// log.LogDate = StringHelper.GetNow();
// if (login != null) {
// log.RequestID = login.get("RequestID");
// log.SessionID = login.get("SessionID");
// }
// logDao.create(log);
// }
//
// private String getIdentity() {
// return StringHelper.GetString(this.db.queryCell("SELECT @@IDENTITY"));
// }
//
// /**
// * 获取主键名称
// *
// * @return 获取主键名称
// */
// protected String getKey() {
// if (this.Table == null) {
// throw new CodeException("类" + this.getClass().getName() + "未发现表结构");
// }
// return this.Table.Table.getKeyName();
// }
//
// /**
// * 获取主键值
// *
// * @param model 需要获取主键的实体
// * @return
// */
// protected String getKeyString(Object model) {
// String keyField = this.getKey();
// Object key = ObjectHelper.GetValue(model, keyField);
// if (StringHelper.IsEmpty(key)) {
// return "";
// }
// String keyString = key.toString();
// if ("0".equals(keyString)) {
// keyString = "";
// }
// return keyString;
// }
//
// /**
// * 设置主键值
// *
// * @param model 需要设置的实体
// * @param key 需要设置的主键值
// */
// protected void setKeyString(Object model, String key) {
// String keyField = this.getKey();
// ObjectHelper.Set(model, keyField, key);
// }
//
// /**
// * 根据输入参数来获取主键
// *
// * @param from 可以为实体或字符串。为实体时必须包含 主键 字段 或者 id 字段。
// * @return
// */
// protected String getInputKey(Object from) {
// String key;
// if (from != null && from.getClass() == String.class) {
// key = StringHelper.GetString(from);
// } else {
// key = this.getKeyString(from);
// }
// if (StringHelper.IsEmpty(key)) {
// key = StringHelper.GetString(ObjectHelper.GetValue(from, "id"));
// }
// if (StringHelper.IsEmpty(key)) {
// key = "";
// }
// return key;
// }
//
// /**
// * 创建数据,当不传入了主键时,则会自动生成主键,传入时不会生成。
// *
// * @param model 需要创建的数据
// * @return 创建的主键编号, 创建成功,返回主键,否则为空
// */
// public String create(Object model) {
// // 判断主键是字符串和需要生成主键
// boolean isKeyString = this.Table.Table.getKeyType() == String.class;
// String keyString = this.getKeyString(model);
//
// // 生成主键
// if (StringHelper.IsEmpty(keyString) && isKeyString) {
// keyString = StringHelper.GetNewID();
// this.setKeyString(model, keyString);
// }
//
// // 检测数据合法性
// this.check(model, OperatorTypeCreate, keyString);
// this.initData(model);
//
// // 执行创建的SQL语句
// int ret = updateSql(DaoConst.Create, model);
//
// // 判断是否需要获取自增编号(主键为整形)
// if (StringHelper.IsEmpty(keyString) && !isKeyString) {
// keyString = this.getIdentity();
// this.setKeyString(model, keyString);
// }
//
// // 写入日志,写入到 Log_TablePlanFrom表用作计划任务
// if (!StringHelper.IsEmpty(keyString)) {
// writeLog(LogVO.CREATE, keyString, model);
// if (ret > 0) {
// planCenterFrom.WriteFrom(this.Table.Table.getName(), keyString);
// }
// }
//
// // 最终处理
// this.created(model);
//
// // 返回执行结果
// String retVal = ret > 0 ? keyString : "";
// return retVal;
// }
//
//
// /**
// * 修改数据
// *
// * @param model 需要修改的数据
// * @return 删除的主键编号
// */
// public String update(Object model) {
// String keyString = this.getKeyString(model);
// if (StringHelper.IsEmpty(keyString)) {
// throw new CodeException("表" + this.Table.Table.getName() + "主键值为空时不能更新");
// }
// this.initData(model);
// this.check(model, OperatorTypeUpdate, keyString);
// writeLog(LogVO.UPDATE, keyString, model);
// SqlData sqlData = this.getSql(DaoConst.Update);
// int ret = updateSql(sqlData, model);
// String retVal = ret > 0 ? keyString : "";
// return retVal;
// }
//
// /**
// * 初始化数据
// *
// * @param model
// */
// protected void initData(Object model) {
// if (model instanceof IInitVO) {
// IInitVO to = (IInitVO) model;
// to.init();
// }
// }
//
// /**
// * 检测数据
// *
// * @param model 需要检测的数据
// * @param operatorType 操作方法类型
// * @param keyString 主键
// */
// protected void check(Object model, int operatorType, String keyString) {
// this.check(model, operatorType, keyString, false);
// }
//
// /**
// * 检测数据
// *
// * @param model 需要检测的数据
// * @param operatorType 操作方法类型
// * @param isCheckLogin 检测是否已经登录
// */
// protected void check(Object model, int operatorType, String keyString, boolean isCheckLogin) {
// if (operatorType == OperatorTypeCreate) {
// ILogin login = loginCenter.getCurrent(isCheckLogin);
// String userID = "";
// String deveiceID = "";
// String sessionID = "";
// String projectID = "";
// if (login != null) {
// userID = login.get("UserID");
// deveiceID = login.get("DeveiceID");
// sessionID = login.get("SessionID");
// projectID = login.get("ProjectID");
// }
//
// if (model instanceof ICreateVO) {
// ICreateVO to = (ICreateVO) model;
// to.setCreateUserID(userID);
// to.setCreateDate(StringHelper.GetNow());
// }
//
// if (model instanceof ICreateDeveiceVO) {
// ICreateDeveiceVO to = (ICreateDeveiceVO) model;
// to.setCreateDeveiceID(deveiceID);
// to.setCreateSessionID(sessionID);
// }
//
// if (model instanceof ICreateProjectVO) {
// ICreateProjectVO to = (ICreateProjectVO) model;
// to.setCreateProjectID(projectID);
// }
// }
// }
//
// /**
// * 保存数据
// *
// * @param model 需要保存的数据
// * @return 保存的主键编号
// */
// public String save(Object model) {
// String id = this.getKeyString(model);
// if (StringHelper.IsEmpty(id)) {
// return create(model);
// } else {
// return update(model);
// }
// }
//
// /**
// * 删除数据
// *
// * @param model 需要删除的数据
// * @return 删除的主键编号
// */
// public String remove(Object model) {
// Object from = model;
// // 获取来源主键
// String keyString = getInputKey(from);
//
// if (StringHelper.IsEmpty(keyString)) {
// MapRow to = new MapRow();
// ObjectHelper.WriteWithFromClass(to, model);
// from = this.queryFirst(MapRow.class, DaoConst.Load, from);
// if (from == null) {
// return "";
// }
// keyString = this.getKeyString(from);
// }
//
// // 当主键存在时,只通过主键加载
// if (!StringHelper.IsEmpty(keyString)) {
// from = new HashMap<String, Object>();
// this.setKeyString(from, keyString);
// }
//
// this.initData(from);
// this.check(from, OperatorTypeRemove, keyString);
//
// writeLog(LogVO.REMOVE, keyString, from);
// SqlData sqlData = this.getSql(DaoConst.Remove);
// int ret = updateSql(sqlData, from);
// String retVal = ret > 0 ? keyString : "";
// return retVal;
// }
//
// /**
// * 加载数据
// *
// * @param model 加载数据的请求参数
// * @param cls 需要加载的数据的类型
// * @param <T> 返回数据的类型
// * @return 需要返回的数据
// */
// public <T extends Object> T load(Object model, Class<T> cls) {
// // 获取来源主键
// Object from = model;
// String key = this.getInputKey(from);
//
// // 当主键存在时,只通过主键加载
// if (!StringHelper.IsEmpty(key)) {
// from = new HashMap<String, Object>();
// this.setKeyString(from, key);
// }
//
// // 通过传入数据进行加载
// T to = this.queryFirst(cls, DaoConst.Load, from);
// if (to == null) {
// return to;
// }
//
// // 判断来源主键是否存在,不存在则获取加载后的主键
// if (StringHelper.IsEmpty(key)) {
// key = this.getKeyString(to);
// }
//
// check(to, OperatorTypeLoad, key);
//
// // 写入到日志
// writeLog(LogVO.LOAD, key, to);
// return to;
// }
//
// /**
// * 添加统计数据
// *
// * @param cls 类型
// * @param model 实体
// * @param <T> 泛型类型
// * @return 增加统计的数据编号
// */
// public <T extends Object> String addGroup(Class<T> cls, T model) {
// // 判断前台实体
// if (model == null) {
// return "";
// }
//
// // 获取前台分组的MD5标识
// String md5 = this.getMd5(DaoConst.GroupQuery, model);
// if (!StringHelper.IsEmpty(this.Table.Table.getMD5KeyName())) {
// ObjectHelper.Set(model, this.Table.Table.getMD5KeyName(), md5);
// }
//
// // 获取标识的实体
// T from;
// if (this.Table.Table.getKeyType() == String.class) {
// from = model;
// this.setKeyString(model, md5);
// } else if (!StringHelper.IsEmpty(this.Table.Table.getMD5KeyName())) {
// Map<String, Object> map = new HashMap<String, Object>();
// map.put(this.Table.Table.getMD5KeyName(), md5);
// from = this.load(map, cls);
// } else {
// from = this.queryFirst(cls, DaoConst.GroupQuery, model);
// }
//
// // 当没有存在,则创建,否则 UpdateAdd
// if (from == null) {
// return this.create(model);
// } else {
// // 获取后台的编号,并写入到前台传入的数据上面
// String keyField = this.getKey();
// Object key = ObjectHelper.GetValue(from, keyField);
// ObjectHelper.Set(model, keyField, key);
//
// // 执行更新SQL语句
// SqlData sqlData = this.getSql(DaoConst.GroupAdd);
// int ret = this.updateSql(sqlData, model);
// if (ret < 1) {
// return this.create(model);
// } else {
// return key.toString();
// }
// }
// }
//
// /**
// * 根据SQL语句名称和实体获取MD5值
// *
// * @param model
// * @param sqlName
// * @param <T>
// * @return
// */
// protected <T extends Object> String getMd5(String sqlName, T model) {
// SqlData sql = this.getSql(sqlName);
// StringBuilder sb = new StringBuilder();
// for (SqlDataField field : sql.sqlDataFields) {
// if (sb.length() > 0) {
// sb.append(":");
// }
// Object item = ObjectHelper.GetValue(model, field.paraName);
// sb.append(item);
// }
// return StringHelper.GetMD5(sb.toString());
// }
//
// /**
// * 添加统计数据列表
// *
// * @param sqlName 需要执行的SQL语句名称
// * @param model 需要执行的SQL语句的实体
// * @return
// */
// protected int addGroupList(String sqlName, Object model) {
// this.updateSql(sqlName + "_GroupInit", model);
// return this.updateSql(sqlName + "_GroupAdd", model);
// }
//
// /***
// * 查询数据是否存在,当存在时修改,否则增加
// * @param cls 需要创建的实体的类型
// * @param sqlName 执行的SQL语句
// * @param request 前台参数,不能包含主键以及其他不需要修改的字段
// * @return 保存成功,返回保存的ID,保存失败,返回空值
// */
// public <T extends Object> String saveWith(Class<T> cls, String sqlName, Object request) {
// T from = this.queryFirst(cls, sqlName, request);
// if (from == null) {
// try {
// from = cls.newInstance();
// } catch (Exception ex) {
// throw new CodeException("创建对象" + cls.getName() + "出错", ex);
// }
// ObjectHelper.WriteWithFromClass(from, request);
// return this.create(from);
// } else {
// ObjectHelper.WriteWithFromClass(from, request);
// return this.update(from);
// }
// }
//
// /**
// * 创建成功后的处理
// *
// * @param model
// */
// protected void created(Object model) {
//
// }
//
// /**
// * 执行是否存在的SQL语句
// *
// * @param sqlName
// * @param model
// * @param msg
// */
// protected void checkExist(String sqlName, Object model, String msg) {
// MapRow row = this.queryFirst(sqlName, model);
// if (row != null) {
// throw new CodeException(msg);
// }
// }
//}
package com.yanzuoguang.db.db.dao.Impl;
import com.yanzuoguang.db.db.dao.BaseDao;
import com.yanzuoguang.db.db.dao.DaoConst;
import com.yanzuoguang.util.exception.CodeException;
import com.yanzuoguang.util.helper.StringHelper;
import com.yanzuoguang.util.obj.ObjectHelper;
import com.yanzuoguang.util.vo.InitDao;
import java.util.HashMap;
import java.util.Map;
/**
* 数据库操作的基本工具类
* created by yanzu on 2017/5/30.
*/
public abstract class BaseDaoImpl extends BaseDaoSql implements BaseDao {
/**
* 获取当前主键
*
* @return
*/
private String getIdentity() {
return StringHelper.toString(this.db.queryCell("SELECT @@IDENTITY"));
}
/**
* 获取主键名称
*
* @return 获取主键名称
*/
protected String getKey() {
if (this.Table == null) {
throw new CodeException("类" + this.getClass().getName() + "未发现表结构");
}
return this.Table.Table.getKeyName();
}
/**
* 获取主键值
*
* @param model 需要获取主键的实体
* @return
*/
protected String getKeyString(Object model) {
String keyField = this.getKey();
Object key = ObjectHelper.get(model, keyField);
if (StringHelper.isEmpty(key)) {
return "";
}
String keyString = key.toString();
if ("0".equals(keyString)) {
keyString = "";
}
return keyString;
}
/**
* 设置主键值
*
* @param model 需要设置的实体
* @param key 需要设置的主键值
*/
protected void setKeyString(Object model, String key) {
String keyField = this.getKey();
ObjectHelper.set(model, keyField, key);
}
/**
* 根据输入参数来获取主键
*
* @param from 可以为实体或字符串。为实体时必须包含 主键 字段 或者 id 字段。
* @return
*/
protected String getInputKey(Object from) {
String key;
if (from != null && from.getClass() == String.class) {
key = StringHelper.toString(from);
} else {
key = this.getKeyString(from);
}
if (StringHelper.isEmpty(key)) {
key = StringHelper.toString(ObjectHelper.get(from, "id"));
}
if (StringHelper.isEmpty(key)) {
key = "";
}
return key;
}
/**
* 创建数据,当不传入了主键时,则会自动生成主键,传入时不会生成。
*
* @param model 需要创建的数据
* @return 创建的主键编号, 创建成功,返回主键,否则为空
*/
public String create(Object model) {
// 判断主键是字符串和需要生成主键
boolean isKeyString = this.Table.Table.getKeyType() == String.class;
String keyString = this.getKeyString(model);
// 生成主键
if (StringHelper.isEmpty(keyString) && isKeyString) {
keyString = StringHelper.getNewID();
this.setKeyString(model, keyString);
}
// 检测数据合法性
this.check(DaoConst.OperatorTypeCreate, keyString, model);
// 执行创建的SQL语句
int ret = updateSql(DaoConst.Create, model);
// 判断是否需要获取自增编号(主键为整形)
if (StringHelper.isEmpty(keyString) && !isKeyString) {
keyString = this.getIdentity();
this.setKeyString(model, keyString);
}
// 最终处理
this.created(model);
// 返回执行结果
String retVal = ret > 0 ? keyString : "";
return retVal;
}
/**
* 修改数据
*
* @param model 需要修改的数据
* @return 删除的主键编号
*/
public String update(Object model) {
String keyString = this.getKeyString(model);
if (StringHelper.isEmpty(keyString)) {
throw new CodeException("表" + this.Table.Table.getName() + "主键值为空时不能更新");
}
this.check(DaoConst.OperatorTypeUpdate, keyString, model);
SqlData sqlData = this.getSql(DaoConst.Update);
int ret = updateSql(sqlData, model);
String retVal = ret > 0 ? keyString : "";
return retVal;
}
/**
* 检测数据
*
* @param operatorType 操作方法类型
* @param keyString 主键
* @param model 需要检测的数据
*/
protected void check(int operatorType, String keyString, Object model) {
if (model instanceof InitDao) {
InitDao to = (InitDao) model;
to.init();
}
}
/**
* 保存数据
*
* @param model 需要保存的数据
* @return 保存的主键编号
*/
public String save(Object model) {
String id = this.getKeyString(model);
if (StringHelper.isEmpty(id)) {
return create(model);
} else {
return update(model);
}
}
/**
* 删除数据
*
* @param model 需要删除的数据
* @return 删除的主键编号
*/
public String remove(Object model) {
Object from = model;
// 获取来源主键
String keyString = getInputKey(from);
if (StringHelper.isEmpty(keyString)) {
MapRow to = new MapRow();
ObjectHelper.writeWithFrom(to, model);
from = this.queryFirst(MapRow.class, DaoConst.Load, from);
if (from == null) {
return "";
}
keyString = this.getKeyString(from);
}
// 当主键存在时,只通过主键加载
if (!StringHelper.isEmpty(keyString)) {
from = new HashMap<String, Object>();
this.setKeyString(from, keyString);
}
this.check(DaoConst.OperatorTypeRemove, keyString, from);
SqlData sqlData = this.getSql(DaoConst.Remove);
int ret = updateSql(sqlData, from);
String retVal = ret > 0 ? keyString : "";
return retVal;
}
/**
* 加载数据
*
* @param model 加载数据的请求参数
* @param cls 需要加载的数据的类型
* @param <T> 返回数据的类型
* @return 需要返回的数据
*/
public <T extends Object> T load(Object model, Class<T> cls) {
// 获取来源主键
Object from = model;
String key = this.getInputKey(from);
// 当主键存在时,只通过主键加载
if (!StringHelper.isEmpty(key)) {
from = new HashMap<String, Object>();
this.setKeyString(from, key);
}
// 通过传入数据进行加载
T to = this.queryFirst(cls, DaoConst.Load, from);
if (to == null) {
return to;
}
// 判断来源主键是否存在,不存在则获取加载后的主键
if (StringHelper.isEmpty(key)) {
key = this.getKeyString(to);
}
check(DaoConst.OperatorTypeLoad, key, to);
return to;
}
/**
* 添加统计数据
*
* @param cls 类型
* @param model 实体
* @param <T> 泛型类型
* @return 增加统计的数据编号
*/
public <T extends Object> String addGroup(Class<T> cls, T model) {
// 判断前台实体
if (model == null) {
return "";
}
// 获取前台分组的MD5标识
String md5 = this.getMd5(DaoConst.GroupQuery, model);
if (!StringHelper.isEmpty(this.Table.Table.getMD5KeyName())) {
ObjectHelper.set(model, this.Table.Table.getMD5KeyName(), md5);
}
// 获取标识的实体
T from;
if (this.Table.Table.getKeyType() == String.class) {
from = model;
this.setKeyString(model, md5);
} else if (!StringHelper.isEmpty(this.Table.Table.getMD5KeyName())) {
Map<String, Object> map = new HashMap<String, Object>();
map.put(this.Table.Table.getMD5KeyName(), md5);
from = this.load(map, cls);
} else {
from = this.queryFirst(cls, DaoConst.GroupQuery, model);
}
// 当没有存在,则创建,否则 UpdateAdd
if (from == null) {
return this.create(model);
} else {
// 获取后台的编号,并写入到前台传入的数据上面
String keyField = this.getKey();
Object key = ObjectHelper.get(from, keyField);
ObjectHelper.set(model, keyField, key);
// 执行更新SQL语句
SqlData sqlData = this.getSql(DaoConst.GroupAdd);
int ret = this.updateSql(sqlData, model);
if (ret < 1) {
return this.create(model);
} else {
return key.toString();
}
}
}
/**
* 根据SQL语句名称和实体获取MD5值
*
* @param sqlName SQL语句名称
* @param model 获取加密之后的实体
* @param <T> 获取的类型
* @return 获取加密之后的值
*/
protected <T extends Object> String getMd5(String sqlName, T model) {
SqlData sql = this.getSql(sqlName);
StringBuilder sb = new StringBuilder();
for (SqlDataField field : sql.sqlDataFields) {
if (sb.length() > 0) {
sb.append(":");
}
Object item = ObjectHelper.get(model, field.paraName);
sb.append(item);
}
return StringHelper.md5(sb.toString());
}
/**
* 添加统计数据列表
*
* @param sqlName 需要执行的SQL语句名称
* @param model 需要执行的SQL语句的实体
* @return
*/
protected int addGroupList(String sqlName, Object model) {
this.updateSql(sqlName + "_GroupInit", model);
return this.updateSql(sqlName + "_GroupAdd", model);
}
/***
* 查询数据是否存在,当存在时修改,否则增加
* @param cls 需要创建的实体的类型
* @param sqlName 执行的SQL语句
* @param request 前台参数,不能包含主键以及其他不需要修改的字段
* @return 保存成功,返回保存的ID,保存失败,返回空值
*/
public <T extends Object> String saveWith(Class<T> cls, String sqlName, Object request) {
T from = this.queryFirst(cls, sqlName, request);
if (from == null) {
try {
from = cls.newInstance();
} catch (Exception ex) {
throw new CodeException("创建对象" + cls.getName() + "出错", ex);
}
ObjectHelper.writeWithFrom(from, request);
return this.create(from);
} else {
ObjectHelper.writeWithFrom(from, request);
return this.update(from);
}
}
/**
* 创建成功后的处理
*
* @param model 创建的实体数据
*/
protected void created(Object model) {
}
/**
* 执行是否存在的SQL语句
*
* @param sqlName SQL语句名称
* @param model 实体
* @param msg 消息
*/
protected void checkExist(String sqlName, Object model, String msg) {
MapRow row = this.queryFirst(sqlName, model);
if (row != null) {
throw new CodeException(msg);
}
}
}
package com.yanzuoguang.db.db.dao.Impl;
import com.yanzuoguang.db.db.dao.DaoConst;
import com.yanzuoguang.db.db.dao.TableAnnotation;
import com.yanzuoguang.util.helper.StringHelper;
import com.yanzuoguang.util.obj.MethodField;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment