|
|
|
package com.zhonglai.luhui.service.dao;
|
|
|
|
|
|
|
|
import com.zhonglai.luhui.service.dao.annotation.PublicSQLConfig;
|
|
|
|
import com.zhonglai.luhui.service.dao.util.StringUtils;
|
|
|
|
import org.apache.commons.dbutils.*;
|
|
|
|
import org.apache.commons.dbutils.handlers.BeanHandler;
|
|
|
|
import org.apache.commons.dbutils.handlers.BeanListHandler;
|
|
|
|
import org.apache.commons.dbutils.handlers.MapListHandler;
|
|
|
|
import org.apache.commons.dbutils.handlers.ScalarHandler;
|
|
|
|
|
|
|
|
import java.lang.reflect.Field;
|
|
|
|
import java.lang.reflect.InvocationTargetException;
|
|
|
|
import java.lang.reflect.Method;
|
|
|
|
import java.sql.SQLException;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 数据库操作
|
|
|
|
* Created by zhonglai on 2016/12/15.
|
|
|
|
*/
|
|
|
|
public class BaseDao {
|
|
|
|
|
|
|
|
private DBFactory dBFactory = new DBFactoryImp();
|
|
|
|
|
|
|
|
public BaseDao(DBFactory dBFactory)
|
|
|
|
{
|
|
|
|
this.dBFactory = dBFactory;
|
|
|
|
}
|
|
|
|
|
|
|
|
public BaseDao()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 指定表名插入对象
|
|
|
|
* @param object 传值对象
|
|
|
|
*/
|
|
|
|
public void insert(Object object )
|
|
|
|
{
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
String sql = "insert into ";
|
|
|
|
sql += changTableNameFromObject(object) + "(";
|
|
|
|
Field[] fields = object.getClass().getDeclaredFields( );
|
|
|
|
String values = "(";
|
|
|
|
List<Object> valueList = new ArrayList<Object>();
|
|
|
|
for(Field field:fields)
|
|
|
|
{//
|
|
|
|
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
|
|
|
|
if(null !=publicSQLConfig && !publicSQLConfig.isSelect())
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
Method method;
|
|
|
|
try {
|
|
|
|
method = object.getClass().getMethod("get"+ StringUtils.getName(field.getName()));
|
|
|
|
|
|
|
|
Object value = method.invoke(object);
|
|
|
|
if(null != value)
|
|
|
|
{
|
|
|
|
if(!"(".equals(values) )
|
|
|
|
{
|
|
|
|
sql += ",";
|
|
|
|
values += ",";
|
|
|
|
}
|
|
|
|
sql += "`"+ StringUtils.toUnderScoreCase(field.getName())+"`";
|
|
|
|
values += "?";
|
|
|
|
valueList.add(value);
|
|
|
|
}
|
|
|
|
} catch (NoSuchMethodException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (SecurityException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (IllegalAccessException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (InvocationTargetException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
sql += ")";
|
|
|
|
values += ")";
|
|
|
|
sql = sql+" values "+values;
|
|
|
|
|
|
|
|
try {
|
|
|
|
// 创建一个BeanProcessor对象
|
|
|
|
// GenerousBeanProcessor 仅仅重写了父类BeanProcessor的mapColumnsToProperties方法
|
|
|
|
BeanProcessor bean = new GenerousBeanProcessor();
|
|
|
|
// 将GenerousBeanProcessor对象传递给BasicRowProcessor
|
|
|
|
RowProcessor processor = new BasicRowProcessor(bean);
|
|
|
|
object = runner.insert(sql,new BeanHandler<Object>(Object.class,processor),valueList.toArray());
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 插入对象集合
|
|
|
|
* @param objectList
|
|
|
|
*/
|
|
|
|
public int insertList(List<Object> objectList)
|
|
|
|
{
|
|
|
|
return insertList(objectList,null);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 指定表名插入对象集合
|
|
|
|
* @param objectList
|
|
|
|
*/
|
|
|
|
public int insertList(List<?> objectList ,String tableName)
|
|
|
|
{
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
|
|
|
|
Object object = objectList.get(0);
|
|
|
|
|
|
|
|
String sql = "insert into ";
|
|
|
|
if(StringUtils.isBlank(tableName))
|
|
|
|
{
|
|
|
|
tableName = StringUtils.toUnderScoreCase(object.getClass().getSimpleName());
|
|
|
|
}
|
|
|
|
|
|
|
|
List<Object> valueList = new ArrayList<Object>();
|
|
|
|
sql += tableName + msaicAttribute(object) + " values " +msaicValues(objectList,valueList);
|
|
|
|
|
|
|
|
try {
|
|
|
|
return runner.update(sql,valueList.toArray());
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 拼接属性条件
|
|
|
|
* @param object
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
private String msaicAttribute(Object object)
|
|
|
|
{
|
|
|
|
Field[] fields = object.getClass().getDeclaredFields( );
|
|
|
|
String attributeStr = "(";
|
|
|
|
List<Object> valueList = new ArrayList<Object>();
|
|
|
|
for(Field field:fields)
|
|
|
|
{//
|
|
|
|
if(!"(".equals(attributeStr) )
|
|
|
|
{
|
|
|
|
attributeStr += ",";
|
|
|
|
}
|
|
|
|
attributeStr += "`"+ StringUtils.toUnderScoreCase(field.getName())+"`";
|
|
|
|
}
|
|
|
|
attributeStr += ")";
|
|
|
|
return attributeStr;
|
|
|
|
}
|
|
|
|
|
|
|
|
private String msaicValues(List<?> objectList,List<Object> valueList)
|
|
|
|
{
|
|
|
|
StringBuffer returnValues = new StringBuffer();
|
|
|
|
for(Object object:objectList)
|
|
|
|
{
|
|
|
|
Field[] fields = object.getClass().getDeclaredFields( );
|
|
|
|
String values = "(";
|
|
|
|
for(Field field:fields)
|
|
|
|
{//
|
|
|
|
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
|
|
|
|
if(null !=publicSQLConfig && !publicSQLConfig.isSelect())
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
Method method;
|
|
|
|
try {
|
|
|
|
method = object.getClass().getMethod("get"+ StringUtils.getName(field.getName()));
|
|
|
|
Object value = method.invoke(object);
|
|
|
|
if(!"(".equals(values) )
|
|
|
|
{
|
|
|
|
values += ",";
|
|
|
|
}
|
|
|
|
values += "?";
|
|
|
|
valueList.add(value);
|
|
|
|
} catch (NoSuchMethodException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (SecurityException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (IllegalAccessException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (InvocationTargetException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
values += ")";
|
|
|
|
if(returnValues.length()!=0)
|
|
|
|
{
|
|
|
|
returnValues.append(",");
|
|
|
|
}
|
|
|
|
returnValues.append(values);
|
|
|
|
}
|
|
|
|
return returnValues.toString();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 以主键id更新对象
|
|
|
|
* @param object
|
|
|
|
*/
|
|
|
|
public int update(Object object)
|
|
|
|
{
|
|
|
|
return update(object,null);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 根据条件更新对象
|
|
|
|
* @param object 传值对象
|
|
|
|
* @param whereFieldNames 条件(多个用,分割)
|
|
|
|
*/
|
|
|
|
public int update(Object object,String whereFieldNames)
|
|
|
|
{
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
|
|
|
|
String sql = "update ";
|
|
|
|
sql += changTableNameFromObject(object);
|
|
|
|
Field[] fields = object.getClass().getDeclaredFields();
|
|
|
|
List<Object> valueList = new ArrayList<Object>();
|
|
|
|
|
|
|
|
if(null != fields && fields.length !=0 )
|
|
|
|
{
|
|
|
|
sql += " set ";
|
|
|
|
int j = 0;
|
|
|
|
for(int i=0;i<fields.length;i++)
|
|
|
|
{
|
|
|
|
|
|
|
|
Field field = fields[i];
|
|
|
|
try {
|
|
|
|
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
|
|
|
|
if(null !=publicSQLConfig && !publicSQLConfig.isSelect())
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
Method method = null;
|
|
|
|
try {
|
|
|
|
method = object.getClass().getMethod("get"+ StringUtils.getName(field.getName()));
|
|
|
|
} catch (NoSuchMethodException e) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
Object value = method.invoke(object);
|
|
|
|
if(null != value)
|
|
|
|
{
|
|
|
|
if(j!=0)
|
|
|
|
{
|
|
|
|
sql += ",";
|
|
|
|
}
|
|
|
|
sql += "`"+ StringUtils.toUnderScoreCase(field.getName())+"`"+"=?";
|
|
|
|
j++;
|
|
|
|
valueList.add(value);
|
|
|
|
}
|
|
|
|
} catch (SecurityException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (IllegalAccessException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (InvocationTargetException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
sql += " where 1=1 ";
|
|
|
|
if(StringUtils.isNoneBlank(whereFieldNames))
|
|
|
|
{
|
|
|
|
String[] wheres = whereFieldNames.split(",");
|
|
|
|
if(StringUtils.isNotBlank(whereFieldNames))
|
|
|
|
{
|
|
|
|
for(int i =0;i<wheres.length;i++)
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
Method method = object.getClass().getMethod("get"+ StringUtils.getName(wheres[i]));
|
|
|
|
Object value = method.invoke(object);
|
|
|
|
sql += " and ";
|
|
|
|
sql += StringUtils.toUnderScoreCase(wheres[i]) + "=?";
|
|
|
|
valueList.add(value);
|
|
|
|
} catch (IllegalAccessException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (InvocationTargetException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (NoSuchMethodException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (SecurityException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}else{
|
|
|
|
Method method = null;
|
|
|
|
try {
|
|
|
|
String idName = "id";
|
|
|
|
for(Field field:fields)
|
|
|
|
{
|
|
|
|
PublicSQLConfig publicSQLConfig1 = field.getAnnotation(PublicSQLConfig.class);
|
|
|
|
if(null !=publicSQLConfig1 && !publicSQLConfig1.isSelect())
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
|
|
|
|
if(null != publicSQLConfig && publicSQLConfig.isPrimarykey())
|
|
|
|
{
|
|
|
|
idName = field.getName();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
method = object.getClass().getMethod("get"+ StringUtils.getName(idName));
|
|
|
|
Object value = method.invoke(object);
|
|
|
|
sql += " and ";
|
|
|
|
|
|
|
|
sql += idName+"=?";
|
|
|
|
valueList.add(value);
|
|
|
|
} catch (NoSuchMethodException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (InvocationTargetException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (IllegalAccessException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
return runner.update(sql,valueList.toArray());
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 根据条件获取对象
|
|
|
|
* @param clas 对象
|
|
|
|
* @param where 条件
|
|
|
|
* @param <T>
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public <T> Object get(Class<T> clas,Map<String,Object> where)
|
|
|
|
{
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
|
|
|
|
String tableName = StringUtils.toUnderScoreCase(clas.getSimpleName());
|
|
|
|
|
|
|
|
String sql = "select * from "+tableName+" where 1=1 ";
|
|
|
|
try {
|
|
|
|
List<Object> valueList = new ArrayList<Object>();
|
|
|
|
sql += getCountFrommapWhere(where,valueList);
|
|
|
|
return runner.query(sql, new BeanHandler<T>(clas, getRowProcessor()),valueList.toArray());
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 根据条件获取对象
|
|
|
|
* @param clas 对象
|
|
|
|
* @param where 条件
|
|
|
|
* @param <T>
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public <T> Object get(Class<T> clas,String where,String tableName)
|
|
|
|
{
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
|
|
|
|
String sql = "select * from "+tableName+" where 1=1 ";
|
|
|
|
try {
|
|
|
|
sql += "and "+where;
|
|
|
|
return runner.query(sql, new BeanHandler<T>(clas, getRowProcessor()));
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 根据id获取对象
|
|
|
|
* @param clas 对象
|
|
|
|
* @param id 主键id
|
|
|
|
* @param <T>
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public <T> Object get(Class<T> clas,Object id)
|
|
|
|
{
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
|
|
|
|
String tableName = StringUtils.toUnderScoreCase(clas.getSimpleName());
|
|
|
|
|
|
|
|
String sql = "select * from "+tableName+" where 1=1 ";
|
|
|
|
String idName = "id";
|
|
|
|
Field[] fields = clas.getDeclaredFields();
|
|
|
|
for(Field field:fields)
|
|
|
|
{
|
|
|
|
PublicSQLConfig publicSQLConfig1 = field.getAnnotation(PublicSQLConfig.class);
|
|
|
|
if(null !=publicSQLConfig1 && !publicSQLConfig1.isSelect())
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
|
|
|
|
if(null != publicSQLConfig && publicSQLConfig.isPrimarykey())
|
|
|
|
{
|
|
|
|
idName = field.getName();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
sql += " and "+idName+"=?";
|
|
|
|
Object[] params = {id};
|
|
|
|
return runner.query(sql, new BeanHandler<T>(clas, getRowProcessor()),params);
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 根据条件删除对象
|
|
|
|
* @param clas 对象
|
|
|
|
* @param where 条件
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public int delete(Class<?> clas, Map<String,Object> where)
|
|
|
|
{
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
|
|
|
|
String tableName = StringUtils.toUnderScoreCase(clas.getSimpleName());
|
|
|
|
String sql = "DELETE FROM "+tableName+" WHERE 1=1 ";
|
|
|
|
try {
|
|
|
|
List<Object> valueList = new ArrayList<Object>();
|
|
|
|
sql += getCountFrommapWhere(where,valueList);
|
|
|
|
return runner.update(sql,valueList.toArray());
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 根据id删除对象
|
|
|
|
* @param clas 对象
|
|
|
|
* @param id 主键id
|
|
|
|
*/
|
|
|
|
public int delete(Class<?> clas,Object id)
|
|
|
|
{
|
|
|
|
return delete(clas,id,null);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 根据id删除对象
|
|
|
|
* @param clas 对象
|
|
|
|
* @param id 主键id
|
|
|
|
*/
|
|
|
|
public int delete(Class<?> clas,Object id,String tableName)
|
|
|
|
{
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
|
|
|
|
if(StringUtils.isBlank(tableName))
|
|
|
|
{
|
|
|
|
tableName = StringUtils.toUnderScoreCase(clas.getSimpleName());
|
|
|
|
}
|
|
|
|
String sql = "DELETE FROM "+tableName+" WHERE 1=1 ";
|
|
|
|
try {
|
|
|
|
sql += " and id=?";
|
|
|
|
Object[] params = {id};
|
|
|
|
return runner.update(sql,params);
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 对象条件获取对象列表
|
|
|
|
* @param object 对象条件
|
|
|
|
* @param <T>
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public <T> T find(Object object)
|
|
|
|
{
|
|
|
|
return find(object,"*");
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 对象条件获取对象指定属性值列表
|
|
|
|
* @param object 对象条件
|
|
|
|
* @param selectStr 指定属性值(用数据库表字段多个,分割)
|
|
|
|
* @param <T>
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public <T> T find(Object object,String selectStr)
|
|
|
|
{
|
|
|
|
return find(object,selectStr,null);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 对象条件的条件获取对象列表
|
|
|
|
* @param object 对象条件
|
|
|
|
* @param selectStr 指定属性值(用数据库表字段多个,分割)
|
|
|
|
* @param whereMap 对象条件的条件
|
|
|
|
* @param <T>
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public <T> T find(Object object,String selectStr,Map<String,String> whereMap)
|
|
|
|
{
|
|
|
|
return find(object,selectStr,whereMap,null);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 对象条件的条件按一定排序获取对象列表
|
|
|
|
* @param object 对象条件
|
|
|
|
* @param selectStr 指定属性值(用数据库表字段多个,分割)
|
|
|
|
* @param whereMap 对象条件的条件
|
|
|
|
* @param order 排序条件
|
|
|
|
* @param <T>
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public <T> T find(Object object,String selectStr,Map<String,String> whereMap,String order)
|
|
|
|
{
|
|
|
|
return find(object,selectStr,whereMap,order,0,0);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 对象条件获取对象列表
|
|
|
|
* @param object 对象条件
|
|
|
|
* @param selectStr 指定属性值(用数据库表字段多个,分割)
|
|
|
|
* @param whereMap 对象条件的条件
|
|
|
|
* @param order 排序条件
|
|
|
|
* @param pageSize 页面大小
|
|
|
|
* @param pageNo 页码
|
|
|
|
* @param <T>
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public <T> T find(Object object,String selectStr,Map<String,String> whereMap,String order,Integer pageSize,Integer pageNo )
|
|
|
|
{
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
|
|
|
|
if(StringUtils.isBlank(order))
|
|
|
|
{
|
|
|
|
order = "";
|
|
|
|
}
|
|
|
|
if(null == pageSize)
|
|
|
|
{
|
|
|
|
pageSize = 0;
|
|
|
|
}
|
|
|
|
if(null == pageNo)
|
|
|
|
{
|
|
|
|
pageNo = 0;
|
|
|
|
}
|
|
|
|
if(StringUtils.isBlank("selectStr"))
|
|
|
|
{
|
|
|
|
selectStr = "*";
|
|
|
|
}
|
|
|
|
|
|
|
|
List<Object> valueList = new ArrayList<Object>();
|
|
|
|
String sql = getFindSql(object,selectStr,whereMap,valueList);
|
|
|
|
|
|
|
|
if(StringUtils.isNotBlank(order))
|
|
|
|
{
|
|
|
|
sql += " order by "+order;
|
|
|
|
}
|
|
|
|
if(0 != pageSize && 0 != pageNo)
|
|
|
|
{
|
|
|
|
sql += " limit "+((pageNo-1)*pageSize)+","+pageSize;
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
return (T) runner.
|
|
|
|
query(sql,new BeanListHandler(object.getClass(),getRowProcessor()),valueList.toArray());
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* sql执行查询
|
|
|
|
* @param sql
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public <T> T findBysql(String sql,Class type,Object... params)
|
|
|
|
{
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
|
|
|
|
try {
|
|
|
|
return (T) runner.
|
|
|
|
query(sql,new BeanListHandler(type,getRowProcessor()),params);
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 对象条件获取总数
|
|
|
|
* @param object 对象条件
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public Long getTotle(Object object )
|
|
|
|
{
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
|
|
|
|
List<Object> valueList = new ArrayList<Object>();
|
|
|
|
String sql = getFindSql(object,"count(*)",null,valueList);
|
|
|
|
try {
|
|
|
|
return runner.query(sql,new ScalarHandler<Long>(),valueList.toArray());
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return 0l;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 对象条件的条件获取总数
|
|
|
|
* @param object 对象条件
|
|
|
|
* @param whereMap 对象条件的条件
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public Long getTotle(Object object,Map<String,String> whereMap)
|
|
|
|
{
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
List<Object> valueList = new ArrayList<Object>();
|
|
|
|
String sql = getFindSql(object,"count(*)",whereMap,valueList);
|
|
|
|
try {
|
|
|
|
return runner.query(sql,new ScalarHandler<Long>(),valueList.toArray());
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return 0l;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* sql执行查询
|
|
|
|
* @param sql
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public List findListBysql(String sql)
|
|
|
|
{
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
|
|
|
|
List list = null;
|
|
|
|
try {
|
|
|
|
list = runner.query(sql,new MapListHandler());
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return list;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* sql执行查询
|
|
|
|
* @param sql
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public List<Map<String,Object>> findBysql(String sql)
|
|
|
|
{
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
|
|
|
|
List list = null;
|
|
|
|
try {
|
|
|
|
list = runner.query(sql,new MapListHandler());
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return list;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* sql执行更新
|
|
|
|
* @param sql
|
|
|
|
* @param params
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public int updateBySql(String sql,Object... params)
|
|
|
|
{
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
try {
|
|
|
|
return runner.update(sql,params);
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 生成查询条件
|
|
|
|
* @param object
|
|
|
|
* @param selectStr
|
|
|
|
* @param whereMap
|
|
|
|
* @param valueList
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
private String getFindSql(Object object,String selectStr,Map<String,String> whereMap,List<Object> valueList )
|
|
|
|
{
|
|
|
|
|
|
|
|
String sql = null;
|
|
|
|
sql = "select "+selectStr+" from "+ changTableNameFromObject(object);
|
|
|
|
String where = " where 1=1 ";
|
|
|
|
String like = "";
|
|
|
|
Field[] fields = object.getClass().getDeclaredFields();
|
|
|
|
|
|
|
|
if(null != fields && fields.length !=0 )
|
|
|
|
{
|
|
|
|
for(int i=0;i<fields.length;i++)
|
|
|
|
{
|
|
|
|
Field field = fields[i];
|
|
|
|
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
|
|
|
|
if(null !=publicSQLConfig && !publicSQLConfig.isSelect())
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
try {
|
|
|
|
Method method;
|
|
|
|
method = object.getClass().getMethod("get"+ StringUtils.getName(field.getName()));
|
|
|
|
Object value = method.invoke(object);
|
|
|
|
if(!(null == value))
|
|
|
|
{
|
|
|
|
String orther = "";
|
|
|
|
String s = "=";
|
|
|
|
if(!(null == whereMap || null == whereMap.get(field.getName())))
|
|
|
|
{
|
|
|
|
s = whereMap.get(field.getName());
|
|
|
|
if("like".equals(s))
|
|
|
|
{
|
|
|
|
value = "%"+value+"%";
|
|
|
|
like += " or " + "`"+ StringUtils.toUnderScoreCase(field.getName())+"`"+s+" ?"+orther ;
|
|
|
|
valueList.add(value);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if("time".equals(s))
|
|
|
|
{
|
|
|
|
s = ">";
|
|
|
|
orther = " and `"+ StringUtils.toUnderScoreCase(field.getName())+"`< '"+whereMap.get("end_"+field.getName())+"'";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
where += " and `"+ StringUtils.toUnderScoreCase(field.getName())+"`"+s+" ?"+orther;
|
|
|
|
valueList.add(value);
|
|
|
|
}
|
|
|
|
} catch (NoSuchMethodException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (SecurityException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (IllegalAccessException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (InvocationTargetException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sql += where;
|
|
|
|
if(StringUtils.isNoneBlank(like))
|
|
|
|
{
|
|
|
|
sql += "and (1=2 "+like+")";
|
|
|
|
}
|
|
|
|
return sql;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 添加或更新对象
|
|
|
|
* INSERT INTO test(`in1`,`str1`) VALUES ('1','1');
|
|
|
|
* @param object 对象
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public void saveOrUpdateObject(Object object)
|
|
|
|
{
|
|
|
|
String sql = "insert into ";
|
|
|
|
|
|
|
|
sql += changTableNameFromObject(object) + "(";
|
|
|
|
Field[] fields = object.getClass().getDeclaredFields( );
|
|
|
|
String values = "(";
|
|
|
|
String update = "";
|
|
|
|
for(Field field:fields)
|
|
|
|
{//
|
|
|
|
Method method;
|
|
|
|
try {
|
|
|
|
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
|
|
|
|
if(null !=publicSQLConfig && !publicSQLConfig.isSelect())
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
method = object.getClass().getMethod("get"+ StringUtils.getName(field.getName()));
|
|
|
|
Object value = method.invoke(object);
|
|
|
|
if(null != value)
|
|
|
|
{
|
|
|
|
if(!"(".equals(values) )
|
|
|
|
{
|
|
|
|
sql += ",";
|
|
|
|
values += ",";
|
|
|
|
update += ",";
|
|
|
|
}
|
|
|
|
sql += "`"+ StringUtils.toUnderScoreCase(field.getName())+"`";
|
|
|
|
values += "'"+ value+"'";
|
|
|
|
update += "`"+ StringUtils.toUnderScoreCase(field.getName())+"`"+"=VALUES("+"`"+ StringUtils.toUnderScoreCase(field.getName())+"`)";
|
|
|
|
}
|
|
|
|
} catch (NoSuchMethodException e) {
|
|
|
|
} catch (SecurityException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (IllegalAccessException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (InvocationTargetException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
sql += ")";
|
|
|
|
values += ")";
|
|
|
|
try {
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
runner.update(sql+" values "+values+" ON DUPLICATE KEY UPDATE "+update);
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 添加或更新对象列表
|
|
|
|
* INSERT INTO `test` (`in1`,`str1`)VALUES ('1','2'),('2','2') ON DUPLICATE KEY UPDATE `in1`=VALUES(`in1`),`str1`=VALUES(`str1`);
|
|
|
|
* @param objectlist 对象列表
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public void saveOrUpdateObjectList(List<Object> objectlist)
|
|
|
|
{
|
|
|
|
StringBuffer sb =new StringBuffer();
|
|
|
|
String update = "";
|
|
|
|
for(int i = 0; i<objectlist.size();i++)
|
|
|
|
{
|
|
|
|
Object object = objectlist.get(i);
|
|
|
|
|
|
|
|
Field[] fields = object.getClass().getDeclaredFields( );
|
|
|
|
if(i==0)
|
|
|
|
{
|
|
|
|
sb.append("INSERT INTO `"+changTableNameFromObject(object)+"` ");
|
|
|
|
sb.append("(");
|
|
|
|
for(Field field:fields)
|
|
|
|
{
|
|
|
|
PublicSQLConfig publicSQLConfig = field.getAnnotation(PublicSQLConfig.class);
|
|
|
|
if(null !=publicSQLConfig && !publicSQLConfig.isSelect())
|
|
|
|
{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if(!"".equals(update) )
|
|
|
|
{
|
|
|
|
sb.append(",");
|
|
|
|
update += ",";
|
|
|
|
}
|
|
|
|
sb.append("`"+ StringUtils.toUnderScoreCase(field.getName())+"`");
|
|
|
|
update += "`"+ StringUtils.toUnderScoreCase(field.getName())+"`"+"=VALUES("+"`"+ StringUtils.toUnderScoreCase(field.getName())+"`)";
|
|
|
|
}
|
|
|
|
sb.append(")");
|
|
|
|
sb.append("VALUES ");
|
|
|
|
}else{
|
|
|
|
sb.append(",");
|
|
|
|
}
|
|
|
|
for(int j=0;j<fields.length;j++)
|
|
|
|
{
|
|
|
|
Field field = fields[j];
|
|
|
|
Method method;
|
|
|
|
try {
|
|
|
|
method = object.getClass().getMethod("get"+ StringUtils.getName(field.getName()));
|
|
|
|
Object value = method.invoke(object);
|
|
|
|
if(null == value)
|
|
|
|
{
|
|
|
|
value = "";
|
|
|
|
}
|
|
|
|
if(j!=0)
|
|
|
|
{
|
|
|
|
sb.append(",");
|
|
|
|
}else{
|
|
|
|
sb.append("(");
|
|
|
|
}
|
|
|
|
sb.append("'"+ value+"'");
|
|
|
|
if(j==fields.length-1)
|
|
|
|
{
|
|
|
|
sb.append(")");
|
|
|
|
}
|
|
|
|
} catch (NoSuchMethodException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (SecurityException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (IllegalAccessException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (IllegalArgumentException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (InvocationTargetException e) {
|
|
|
|
// TODO Auto-generated catch block
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
sb.append(" ON DUPLICATE KEY UPDATE ");
|
|
|
|
sb.append(update);
|
|
|
|
try {
|
|
|
|
QueryRunner runner = new QueryRunner(dBFactory.getDataSource());
|
|
|
|
runner.update(sb.toString());
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 将map条件转换成sql条件
|
|
|
|
* @param mapwhere map条件
|
|
|
|
* @param valueList sql条件参数
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
private String getCountFrommapWhere(Map<String,Object> mapwhere,List<Object> valueList)
|
|
|
|
{
|
|
|
|
String where = "";
|
|
|
|
for(String key:mapwhere.keySet())
|
|
|
|
{
|
|
|
|
Object value = mapwhere.get(key);
|
|
|
|
where += " and ";
|
|
|
|
where += StringUtils.toUnderScoreCase(key) + "=?";
|
|
|
|
valueList.add(value);
|
|
|
|
}
|
|
|
|
return where;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 获取一个驼峰过滤规则类
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
private RowProcessor getRowProcessor()
|
|
|
|
{
|
|
|
|
// 创建一个BeanProcessor对象
|
|
|
|
// GenerousBeanProcessor 仅仅重写了父类BeanProcessor的mapColumnsToProperties方法
|
|
|
|
BeanProcessor bean = new GenerousBeanProcessor();
|
|
|
|
// 将GenerousBeanProcessor对象传递给BasicRowProcessor
|
|
|
|
return new BasicRowProcessor(bean);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 对象转变数据库名
|
|
|
|
* @param object 对象
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
public static String changTableNameFromObject(Object object) {
|
|
|
|
Class clas = object.getClass();
|
|
|
|
|
|
|
|
String tableNmae = clas.getSimpleName();
|
|
|
|
|
|
|
|
Method method = null; // 父类对象调用子类方法(反射原理)
|
|
|
|
try {
|
|
|
|
method = clas.getMethod("getTableName");
|
|
|
|
Object tObject = method.invoke(object);
|
|
|
|
if(null != tObject)
|
|
|
|
{
|
|
|
|
tableNmae = (String) tObject;
|
|
|
|
}
|
|
|
|
} catch (NoSuchMethodException e) {
|
|
|
|
} catch (IllegalAccessException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (InvocationTargetException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
|
|
|
|
return StringUtils.toUnderScoreCase(tableNmae);
|
|
|
|
}
|
|
|
|
|
|
|
|
public QueryRunner query()
|
|
|
|
{
|
|
|
|
return new QueryRunner(dBFactory.getDataSource());
|
|
|
|
}
|
|
|
|
|
|
|
|
} |
...
|
...
|
|