数据库增,删,改,查通用范形实现

package com.yunchow.util;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

/**
* 能用DaoSupport类, 支持常见的功能如下:
* 1, 增加一条记录, 并且返回主键值
* 2, 可以按照Id, 或是任意条件删除N条记录
* 3, 修改一条记录
* 4, 统计指定表中总的记录条数, 还可以根据条件统计记录条数
* 5, 返回表中的所有数据
* 6, 返回表中指定页的数据, 页码和每页条数可更改,
* 7, 返回表中指定页的指定条件的数据, 并且还能为该记录集合进行排序
* @author yunchow
* @version 1.2 09/9/3 15:14
*/
public class DaoSupport<T> {
/** 要操作的实体对象 */
protected Class<T> entityClass;
/** Jdbc操作模板 */
protected JdbcTemplate template = new JdbcTemplate();
/** 通用行映射器 */
protected RowMapper<T> mapper;
/** 得到配置文件的信息 */
protected ConfigBean config = ConfigBean.getInstance("pk-mapping.ini");
/** 所对应表的主键值 */
private String pk;

public DaoSupport(Class<T> clazz) {
this.entityClass = clazz;
mapper = new GenericRowMapper<T>(entityClass);
pk = config.getProperty(this.entityClass.getSimpleName());
if(pk == null) pk="cafebabe";
init();
// System.out.println(entityClass.getName());
}
protected Class<T> getPersistenceClass() {
return this.entityClass;
}
// 子类用于扩展.
public void init() {
System.out.println("DaoSupport 初始化!");
}
/**
* 更改行映射器.
*/
public void setMapper(RowMapper<T> mapper) {
this.mapper = mapper;
}
/**
* 统计表中总共行数
* @return
*/
public int count() {
return template.count(entityClass.getSimpleName());
}
/**
* 根据条件统计行数
* @param sqlwhere
* @return
*/
public int count(String sqlwhere) {
return template.count(entityClass.getSimpleName(), sqlwhere);
}
/**
* 删除一个对象, 根据某个非空条件
*/
public boolean remove(T t) {
try {
StringBuffer sql = new StringBuffer();
sql.append("delete from ").append(entityClass.getSimpleName());
sql.append(" where ");
List<Object> params = new ArrayList<Object>();
for(Field field : entityClass.getDeclaredFields()) {
String sql0 = field.getName() + "=? and ";
Method getter = this.getReadMethod(field);
Object value = getter.invoke(t);
// System.out.println(field.getName() + " = " + value);
if(value!=null && !"".equals(value)) {
sql.append(sql0);
params.add(value);
}
}
int index = sql.lastIndexOf("and");
if(index > 0)
sql.delete(index, sql.length()-1);
System.out.println("sql = " + sql);
return (template.update(sql.toString(), params.toArray()) > 0 );
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 根据ID删除一个对象
*/
public boolean remove(int id) {
String sql = "delete from "+this.entityClass.getSimpleName()
+" where " + pk + "=" + id;
System.out.println(sql);
return (template.update(sql) > 0);
}
/**
* 清空表
*/
public boolean clear() {
String sql = "delete from "+this.entityClass.getSimpleName();
System.out.println(sql);
return (template.update(sql) > 0);
}
/**
* 查找所有的信息
*/
public List<T> findAll() {
String sql = "select * from " + this.entityClass.getSimpleName();
System.out.println(sql);
return template.findList(sql, mapper);
}
/**
* 根据某个属性查找对象
*/
public List<T> find(String propertyName, Object value) {
StringBuffer sql = new StringBuffer();
sql.append("select * from ")
.append(this.entityClass.getSimpleName());
sql.append(" where ")
.append(propertyName)
.append("=")
.append(value);
System.out.println(sql);
return template.findList(sql.toString(), mapper);
}
/**
* 根据where子句查找对象的集合
*/
public List<T> find(String sqlwhere) {
String sql = "select * from " + this.entityClass.getSimpleName();
sql += " where " + sqlwhere;
System.out.println(sql);
return template.findList(sql, mapper);
}
/**
* 根据where子句查找指定页的对象的集合
* 并且根据传过来的orderby子句, 对结果进行排序
*/
public List<T> find(int pageSize, int pageNo, String sqlwhere, String orderby) {
if(pageNo <= 0) pageNo = 1;
if(pageSize <= 0) pageSize = 5;
boolean boo = true;
if(sqlwhere==null || "".equals(sqlwhere.trim())) {
boo = false;
}
StringBuffer sql = new StringBuffer();
sql.append("select top ").append(pageSize)
.append(" * from "+ entityClass.getSimpleName() +" where ").append(sqlwhere);
if(boo)
sql.append(" and ");
sql.append(pk +" not in( select top ")
.append(pageSize*(pageNo-1))
.append(" "+ pk +" from "+ entityClass.getSimpleName());
if(boo)
sql.append(" where ");
sql.append(sqlwhere).append(")");
if(orderby!=null && !"".equals(orderby.trim()))
sql.append(" order by ")
.append(orderby);
System.out.println(sql);
return template.findList(sql.toString(), mapper);
}
/**
* 查找符合条件的指定页记录
* @param pageSize
* @param pageNo
* @param sqlwhere
* @return
*/
public List<T> find(int pageSize, int pageNo, String sqlwhere){
return find(pageSize, pageNo, sqlwhere, "");
}
/**
* 查找指定页记录
* @param pageSize
* @param pageNo
* @return
*/
public List<T> find(int pageSize, int pageNo){
return find(pageSize, pageNo, "", "");
}
/**
* 保存一个对象, 并且插入主键值, 而不是由数据库产生.
* 返回数据库产生的主键值, 如果保存失败则返回-1
*/
public int save(T t) {
return save(t, false);
}
/**
* 保存一个对象
* 返回数据库产生的主键值, 如果保存失败则返回-1
* @param boo 为true时则插入主键值, 否则不插入
*/
public int save(T t, boolean boo) {
try {
StringBuffer sql = new StringBuffer("insert into ");
StringBuffer values = new StringBuffer(" values( ");
List<Object> params = new ArrayList<Object>();
sql.append(entityClass.getSimpleName() + "(");
for(Field field : t.getClass().getDeclaredFields()) {
if(boo || !pk.equals(field.getName())) {
Method getter = getReadMethod(field);
Object value = getter.invoke(t);
if(value!=null) {
sql.append(field.getName() + ",");
values.append("?,");
params.add(value);
}
}
}
values.deleteCharAt(values.length()-1);
values.append(")");
sql.deleteCharAt(sql.length()-1);
sql.append(")").append(values);
System.out.println(sql);
/*for(Object obj : params) {
System.out.println(obj);
}*/
return template.save(sql.toString(), params.toArray());
} catch (Exception e) {
e.printStackTrace();
}
return -1;
}
/**
* 更新一个对象
*/
public boolean update(T t) {
try {
StringBuffer sql = new StringBuffer("update ");
sql.append(entityClass.getSimpleName() + " set ");
List<Object> params = new ArrayList<Object>();
Object pkValue = "";
for(Field field : t.getClass().getDeclaredFields()) {
if(!pk.equals(field.getName())) {
sql.append(field.getName() + "=?,");
Method getter = getReadMethod(field);
params.add(getter.invoke(t));
} else {
Method getter = getReadMethod(field);
pkValue = getter.invoke(t);
}
}
sql.deleteCharAt(sql.length()-1);
sql.append(" where ")
.append(pk + "=?");
params.add(pkValue);
System.out.println(sql);
for(Object obj : params) {
System.out.println(obj);
}
System.out.println(sql);
return (template.update(sql.toString(), params.toArray()) > 0);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 得到属性的read方法
* @param field
* @return
* @throws SecurityException
* @throws NoSuchMethodException
*/
protected Method getReadMethod(Field field) throws SecurityException, NoSuchMethodException {
String name = field.getName();
String firstLetter = name.substring(0,1).toUpperCase();
String methodName = "get" + firstLetter + name.substring(1);
// System.out.println("方法名为:" + methodName);
return entityClass.getMethod(methodName);
}
/**
* 得到属性的write方法
* @param field
* @return
* @throws NoSuchMethodException
* @throws SecurityException
* @throws SecurityException
* @throws NoSuchMethodException
*/
protected Method getWriteMethod(Field field) throws SecurityException, NoSuchMethodException {
String name = field.getName();
String firstLetter = name.substring(0,1).toUpperCase();
String methodName = "set" + firstLetter + name.substring(1);
System.out.println("方法名为:" + methodName);
return entityClass.getMethod(methodName, field.getType());
}
}
基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型,个人经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,可作为毕业设计、课程设计、期末大作业,代码资料完整,下载可用。 基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型基于深度学习CNN网络+pytorch框架实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值