import java.lang.reflect.Field;
import java.sql.SQLException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import com.autocreate.dbpool.DBUtil;
import com.autocreate.util.JBeanClass;
import com.autocreate.util.Log;
import com.autocreate.util.TimeTools;
public class BaseService<T>
{
/**
* 通过反射创建查询语句
* @param info
* @return
*/
@SuppressWarnings("unchecked")
public T query(T info)
{
Log.getLogger().info("query object: " + info);
StringBuffer sqlBuffer = new StringBuffer(512);
String className = info.getClass().getSimpleName();
sqlBuffer.append("select * from ").append(className);
Object[] whereObj = createWhereByPrimaryKey(info);
String sql = sqlBuffer.toString() + whereObj[0];
return (T)DBUtil.getInstance().queryBean(sql, info.getClass(), ((List)whereObj[1]).toArray());
}
/**
* 通过反射创建insert语句
* @param info
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public boolean insert(T info) throws Exception
{
Log.getLogger().info("insert object: " + info);
StringBuffer sqlBuffer = new StringBuffer(512);
StringBuffer bufferName = new StringBuffer(256);
StringBuffer bufferValue = new StringBuffer(256);
List paramList = new ArrayList();
String className = info.getClass().getSimpleName();
sqlBuffer.append("insert into ").append(className).append("(");
Object obj = null;
Object[] typeAndValue = null;
Field[] fields = info.getClass().getDeclaredFields();
for (Field f : fields)
{
obj = JBeanClass.getGetterMethodInvokeValue(info, f.getName());
if (null != obj)
{
typeAndValue = getValueByType(f.getType().getName(), obj);
bufferName.append(f.getName()).append(",");
bufferValue.append(typeAndValue[0]).append(",");
paramList.add(typeAndValue[1]);
}
}
sqlBuffer.append(StringUtils.removeEnd(bufferName.toString(), ","))
.append(") values (")
.append(StringUtils.removeEnd(bufferValue.toString(), ","))
.append(")");
return DBUtil.getInstance().update(sqlBuffer.toString(), paramList.toArray());
}
/**
* 通过反射创建update语句
* @param info
* @return
* @throws Exception
*/
@SuppressWarnings("unchecked")
public boolean update(T info) throws Exception
{
Log.getLogger().info("update object: " + info);
StringBuffer sqlBuffer = new StringBuffer(512);
StringBuffer bufferName = new StringBuffer(256);
List paramList = new ArrayList();
// 通过反射构建update语句
String className = info.getClass().getSimpleName();
sqlBuffer.append("update ").append(className).append(" set ");
Object obj = null;
Object[] typeAndValue = null;
Field[] fields = info.getClass().getDeclaredFields();
for (Field f : fields)
{
obj = JBeanClass.getGetterMethodInvokeValue(info, f.getName());
if (null != obj)
{
typeAndValue = getValueByType(f.getType().getName(), obj);
bufferName.append(f.getName()).append(" = ").append(typeAndValue[0]).append(", ");
paramList.add(typeAndValue[1]);
}
}
sqlBuffer.append(StringUtils.removeEnd(bufferName.toString(), ", "));
Object[] whereObj = createWhereByPrimaryKey(info);
String sql = sqlBuffer.toString() + whereObj[0];
paramList.addAll((List)whereObj[1]);
return DBUtil.getInstance().update(sql, paramList.toArray());
}
/**
* 通过反射创建delete语句
* @param info
* @return
* @throws SQLException
*/
@SuppressWarnings("unchecked")
public boolean delete(T info) throws SQLException
{
StringBuffer sqlBuffer = new StringBuffer(256);
String className = info.getClass().getSimpleName();
sqlBuffer.append("delete from ").append(className);
Object[] whereObj = createWhereByPrimaryKey(info);
String sql = sqlBuffer.toString() + whereObj[0];
return DBUtil.getInstance().update(sql, ((List)whereObj[1]).toArray());
}
/**
* 通过对象主键创建WHERE条件
* @param info
* @return
*/
private Object[] createWhereByPrimaryKey(T info)
{
StringBuffer whereBuffer = new StringBuffer(256);
List<Object> paramList = null;
Object obj = null;
String tablePrimaryKey = JBeanClass.getMethodInvokeValue(info, "getTablePrimaryKey", null, null).toString();
//Log.getLogger().info("The \"" + info.getClass().getSimpleName() + "\" table's Primary Key is: " + tablePrimaryKey);
if (StringUtils.isNotEmpty(tablePrimaryKey))
{
whereBuffer.append(" where ");
String[] primaryKeys = tablePrimaryKey.split(",");
paramList = new ArrayList<Object>();
for (String str : primaryKeys)
{
obj = JBeanClass.getGetterMethodInvokeValue(info, str);
if (null != obj)
{
whereBuffer.append(str).append(" = ? and ");
paramList.add(obj);
}
}
}
String where = StringUtils.removeEnd(whereBuffer.toString(), "and ");
return new Object[] {where, paramList};
}
/**
* 根据类型和返回对应的值,insert、update时候用到
* @param type
* @param value
* @return
*/
private Object[] getValueByType(String type, Object value)
{
Object[] obj = new Object[2];
if (type.equals("java.util.Date"))
{
obj[0] = "to_date(?,'YYYY-MM-DD HH24:MI:SS')";
obj[1] = TimeTools.format2.format(value);
}
else
{
obj[0] = "?";
obj[1] = value;
}
return obj;
}
/**
* 查询所有
* @param tableName
* @param clazz
* @param whereMap
* @return
*/
@SuppressWarnings("unchecked")
public List<T> queryList(String tableName, Class clazz, Map<String, Object> whereMap)
{
Object[] obj = getWhereCase(whereMap);
String sql = "select * from " + tableName + obj[0];
Object[] param = (Object[])obj[1];
return DBUtil.getInstance().queryBeanList(sql, clazz, param);
}
/**
* 查询一页数据
* @param tableName
* @param clazz
* @param whereMap
* @param pageNumber
* @param pageSize
* @return
*/
@SuppressWarnings("unchecked")
public List<T> queryPageList(String tableName, Class clazz, Map<String, Object> whereMap, int pageNumber,
int pageSize)
{
String sql =
"select * from (select a.*,rownum row_num from (select * from {0}{1})a) b where b.row_num between {2} and {3}";
int beg = (pageNumber - 1) * pageSize + 1;
int end = pageNumber * pageSize;
Object[] obj = getWhereCase(whereMap);
Object[] messageFormatObj = {tableName, obj[0], beg, end};
sql = MessageFormat.format(sql, messageFormatObj);
Object[] param = (Object[])obj[1];
return DBUtil.getInstance().queryBeanList(sql, clazz, param);
}
/**
* 根据表名和参数获取总记录数
* @param tableName
* @param whereMap
* @return
*/
@SuppressWarnings("unchecked")
public int getCount(String tableName, Map<String, Object> whereMap)
{
Object[] obj = getWhereCase(whereMap);
String sql = "select count(*) as c from " + tableName + obj[0];
Object[] param = (Object[])obj[1];
Map map = (Map)DBUtil.getInstance().queryMap(sql, param);
if (null != map)
{
return Integer.parseInt(map.get("c").toString());
}
return 0;
}
/**
* 组装SQL WHERE ORDERBY条件
* @param whereMap
* @return Object[0]: sql , Object[1]: params
*/
@SuppressWarnings("unchecked")
private Object[] getWhereCase(Map<String, Object> whereMap)
{
Object[] obj = new Object[2];
if (null != whereMap && !whereMap.isEmpty())
{
StringBuffer buffer = new StringBuffer(128);
buffer.append(" where 1 = 1 ");
Iterator<Map.Entry<String, Object>> it = whereMap.entrySet().iterator();
List list = new ArrayList();
while (it.hasNext())
{
Map.Entry<String, Object> entry = it.next();
// 如果key或value为null, 或者为orderby, 则continue
if (null == entry.getKey() || null == entry.getValue() || entry.getValue().toString().equals("")
|| entry.getKey().trim().equalsIgnoreCase("orderby"))
{
continue;
}
else
{
buffer.append("and ").append(entry.getKey()).append(" = ? ");
list.add(entry.getValue());
}
}
obj[0] = buffer.append(whereMap.get("orderby") == null ? "" : whereMap.get("orderby"));
obj[1] = list.toArray();
}
else
{
obj[0] = "";
obj[1] = null;
}
return obj;
}
}
分享到:
相关推荐
在Java开发中,BaseDao和BaseService是常见的设计模式,用于实现数据访问层(DAO)和业务逻辑层(Service)的抽象基类。通过结合泛型,我们可以创建更通用、灵活的代码,减少冗余并提高代码质量。 首先,我们来理解...
《XXF.BaseService.DistributedCache-BSF-DistributedCache.zip:深入理解.NET分布式缓存中间件》 在当今的互联网环境中,随着应用规模的扩大,单机缓存已无法满足性能和高可用性的需求,因此分布式缓存成为了必要...
在Go语言中,`BaseService`通常被用来作为其他服务的基础结构,提供共通的服务功能和接口。`Goland`是一款强大的Go语言开发IDE,它提供了丰富的工具和特性来帮助开发者编写、调试和测试Go代码。`BaseService: Goland...
iuap-pap-baseservice框架属于iuap快速开发体系中的后台支持部分,通过与iuap前端开发框架结合,可快速的实现一套业务表单系统开发. 特性 集成图形化快速建模工具—— 快速启动业务表单开发 简化单表/主子表CRUD服务...
实现了 BaseService 类对 Service 层进行抽象。通过拦截器实现了方法级粒度的鉴权,通过AOP实现了参数校验。 演示: 可自行注册账号,或使用后台查看权限账号 demo 密码 demo (后台入口登陆后显示) 兄弟项目: 本...
这是一个Spring MVC + Mybatis 的项目,不仅仅只是简单的demo或是增删改查,她将含括很多的方面:尽量抽取basedao,baseService公共部分,做出一个简单的framework,为以后分布式开发提供基础。 ##内容 Spring的国际...
Dyd.BaseService.TaskManager源码部署须知: 1,删除各个项目中Newtonsoft.Json.dll的引用 2,检查各项目中XXF.dll的引用,确保引用了“引用”文件夹中的XXF.dll 3,执行,建模脚本.txt中的sql
BaseService是与BaseMapper相对应的服务层接口,通常包括了事务处理、异常处理等通用功能。开发者可以在自己的Service接口中继承BaseService,然后实现具体业务逻辑。 6. **自动化配置**: 通用Mapper通常会配合...
private BaseService employeeService; @Override public String execute() throws Exception { System.out.println(emp.getEmployeeName() + "|" + emp.getEmployeePassword()); // empyloeeService....
假设有一个基类 `BaseService` 和一个派生类 `DerivedService`,其中包含了一个名为 `DoSomething` 的方法。 - 原始代码: ```csharp public class BaseService { public virtual void DoSomething() { // ... ...
Service层通常会继承BaseService,BaseService提供了一些通用的方法,而特定的业务逻辑则在对应的Service中实现。Service实现类需要通过@Autowired注解注入相应的DAO,以便调用DAO层的方法来执行数据库操作。例如,...
k3cloud dll文件
Furion框架是一款高效、全面且现代化的.NET开发框架,主要设计用于简化企业级应用程序的构建过程。Furion_Api模板则是专为构建API服务而定制的,它提供了快速启动和构建RESTful API服务的基础结构。...
自定义日志模块(接口及代理实现),而不直接使用第三方日志框架接口,避免在日志框架升级或者切换时,代码过多耦合。 这个举例说明一下: 比如,在某一项目开始时使用的是“log4j”框架,后面经过研究发现“sf4j...
加入了Mybatis PageHelper分页组件,并抽象出了BaseService层。另外加入了Shrio完成登录验证和权限部分的验证操作。表包含有用户、角色、权限、角色权限表等,权限部分呢比较简单,用户拥有角色,角色与资源多对多的...
实现了BaseService类对Service层进行抽象,通过拦截器实现了方法级粒度的鉴权,通过AOP实现了参数校验。 ## 项目的主要特性和功能 功能齐全实现了小商城的大部分功能,包括首页、分类页、搜索页、产品页、购物车...
SpringBoot是Spring框架的一个模块,设计目标是简化Spring应用程序的初始搭建以及开发过程。它集成了大量常用的第三方库配置,如Tomcat、JPA、RabbitMQ、Quartz等,使得开发者可以“零”配置启动服务。...
加入了Mybatis PageHelper分页组件,并抽象出了BaseService层。另外加入了Shrio完成登录验证和权限部分的验证操作。表包含有用户、角色、权限、角色权限表等,权限部分呢比较简单,用户拥有角色,角色与资源多对多的...
BaseService通常包含了通用的服务方法,比如CRUD操作,而BaseDao则提供了数据库操作的模板方法。这样的设计可以减少代码的重复性,提高开发效率,因为每个具体服务和DAO类只需要继承基类并实现特定业务逻辑即可。 ...
在这个场景中,`BaseService2.cs`和`BaseService1.cs`可能是包含分页逻辑的基础服务类,而`Pagination`可能是一个具体的分页模型或者辅助类。 首先,我们来看一下分页的基本原理。分页是将数据库查询结果分割成若干...