BaseDao

基于hibernate的BaseDAO接口 BaseDao.java import java.io.Serializable; import java.util.Collection; import java.util.List; import java.util.Map; import com.xxx.finance.utils.HibernateHandler; import com.xxx.finance.utils. 阅读详情
package com.zdyn.utils;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;


public class BaseDao {
	
	public static List findAll(Object obj,Connection conn) throws Exception{
		Class clazz=obj.getClass();
		Method[] m=clazz.getMethods();
		Field[] f=clazz.getDeclaredFields();
		List list=new ArrayList();
		String sql="select * from  "+obj.getClass().getSimpleName().toLowerCase();
		System.out.println(sql);
		//System.out.println(sql);
		PreparedStatement pst=conn.prepareStatement(sql);
		ResultSet rs=pst.executeQuery();
		while(rs.next()){
			Object obj2=clazz.newInstance();

			for(int i=0;i<f.length;i++){
				String n=f[i].getName();
				Object ob=rs.getObject(i+1);
				if(ob==null){
					ob="a";//��ֹ���Ϊnullʱ���ָ���쳣
				}
				if(ob.getClass().equals(java.lang.String.class)){
					
					/*
					 * ƴ��Set������
					 */
					for(int j=0;j<m.length;j++){
						if(("set"+n).equalsIgnoreCase(m[j].getName())){
							m[j].invoke(obj2, rs.getString(n));
						}
					}
					
				}else{
					for(int j=0;j<m.length;j++){
						if(("set"+n).equalsIgnoreCase(m[j].getName())){
							m[j].invoke(obj2, rs.getInt(n));
						}
					}
				}
				
			}
			list.add(obj2);
			
		}
		
		return list;
	}
	
		
	public static void save(Object obj,Connection conn) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, SQLException{
		Class clazz=obj.getClass();
		Method[] m=clazz.getDeclaredMethods();
		Field[] f=clazz.getDeclaredFields();

		String table=clazz.getSimpleName().toLowerCase();

		String sql="";
		for(int i=0;i<f.length;i++){
			sql=sql+f[i].getName()+",";
		}
		sql=sql.substring(0, sql.length()-1);
		String sql2="";
	
		for(int j=0;j<f.length;j++){
			
			String str="get"+f[j].getName();
			
			for(int k=0;k<m.length;k++){
				
				if(str.equalsIgnoreCase(m[k].getName())){
					//�жϡ����ط���bug
					/*
					 * new ��4������û��������Ҫ������
					 */
			
					Object p=m[k].invoke(obj);
			
					if(p==null){
						p="null";
						sql2=sql2+p+",";
					}else{
					sql2=sql2+"'"+p+"'"+",";
					}
				}
			}	
			
		}
		sql2=sql2.substring(0,sql2.length()-1);
		sql="insert into "+table+"("+sql+")"+" values"+"("+sql2+")";
		System.out.println(sql);
		PreparedStatement pst=conn.prepareStatement(sql);
		pst.executeUpdate();
	}
	
	
	
	
	public static void update(Object obj,Connection conn) throws Exception{
        //�޸�
        Class clazz=obj.getClass();
        Method[] m=clazz.getMethods();
        Field[] f=clazz.getDeclaredFields();
        /*
         * ƴ��Sql
         */
        String str1="";
        String str3="";
        for(int i=0;i<f.length;i++){
            //str1=str1+","+f[i].getName()+"="+"?";
            for(int j=0;j<m.length;j++){
                String str2="get"+f[i].getName();
                if(str2.equalsIgnoreCase(m[j].getName())){
                    str1=str1+f[i].getName()+"="+"'"+m[j].invoke(obj)+"'"+",";
                    if("getId".equalsIgnoreCase(m[j].getName())){
                     str3=m[j].invoke(obj).toString();
                    }
                }
            }
        }
        str1=str1.substring(0,str1.length()-1);
        String sql="update "+clazz.getSimpleName().toLowerCase()+" set "+str1+" where id="+"'"+str3+"'";
        System.out.println(sql);
      
        PreparedStatement pst=conn.prepareStatement(sql);
        pst.execute();
       
    }
	
	
	
	
	public static void delById(Object obj,String id,Connection conn) throws SQLException{
		 Class clazz=obj.getClass();
		 String table=clazz.getSimpleName();
		 String sql="delete from "+table+" where id="+"'"+id+"'";
		 System.out.println(sql);
		 conn.prepareStatement(sql).executeUpdate();
	}
	
	
	
}

三层框架下的BaseDao的抽取 我们在做传统项目中会利用到三层架构,一般在dao层我们会使用到一些增删改查,由于模块的个数比较多我们可能会在相应的dao层写很多重复的代码块,这时我们可以对众多的dao做一个抽取,就是将一些都会用到的功能代码块集合放在一个BaseDao类里,然后再去继承这个BaseDao,这样我们就只需要在本Dao类里只去实现独有的功能就可以了,从而简化代码的书写量。 在这里我们利用spring整合三层框架下的 阅读详情

相关推荐

真·奥义 ssm整合BaseDao

真·奥义 ssm整合BaseDao 前言 本来我一直使用的是逆向工程生成的Mybatis和pojo,但是前几天和一位大佬合作,大佬说他用惯了BaseDao,没办法,我只好学习BaseDao,在网上看了很多同学的BaseDao,坑爹啊!只给你贴出主要代码,不给你导包的代码,看上去能复制,其实复制进去就一大堆红线,有的还凭空冒出个工具类…不说了,都是泪啊!下面是我的ssm整合的BaseDao. 首先是...

weixin_43865764的博客 555

BaseDao或BaseRepository类的设计

packageorg.mo.open.common.repository; importjava.io.Serializable; importjava.util.Date; importjava.util.List; /** * *@authormoziqi * *...

chiyingliao3565的博客 229

万能的BaseDao设计

BaseDao设计的初衷是为了方便我们的使用,不用写很多的重复的代码,今天就说说它的设计思路。我们就是要用反射加泛型加面向接口编程来实现,从网上找了一个UML图,我们就用下图大体简单设计一下。     大体按图中的内容写吧,首先定义一个interface BaseDao,

不知不觉已变淡 2万+

Kotlin基础(六)接口、泛型

接口定义:Interface 接口名{//各种属性或方法定义} //接口和泛型interface IBaseDao<T> { val city : String get() = "北京" var grade : Int fun <T>add(t : T) fun del(id: Int) fun update(id: Int, stu: Student)

大雄的专栏 1038

spring data jpa 定义全局接口BaseDao

好,现在我要搭一个项目,我想定义一个BaseDao,然后直接让其他模块的dao直接继承我这个BaseDao,BaseDao有通用的方法也有spring data jpa提供的便捷方法那就新建一个BaseDao呗,这个BaseDao应该是继承JpaRepository,JpaSpecificationExecutor因为我们想用spring data jpa,然后你再定义自己一些常用方法,例如myM

打不死的小强 1万+

Windows安全中心空白问题修复:服务重置与系统组件修复实战指南

Windows系统服务是操作系统后台运行的核心组件,负责管理硬件资源、应用程序执行和系统功能。其稳定运行依赖于服务控制管理器、注册表配置和系统文件完整性。当关键服务(如Windows Update、安全中心服务)因更新失败、权限错误或组件损坏而无法正常启动时,依赖其功能的应用程序界面便会出现加载异常。在系统维护与故障排除领域,通过命令行工具重置服务状态、修复系统映像已成为工程师的必备技能。本文聚焦Windows安全中心界面空白这一典型故障,深入剖析其与Windows Update服务、组件存储损坏的关联,并

weixin_30859423的博客 425

Kotlin中使用Room数据库

最近在kotlin环境下,写了一个room数据库的demo,各种情况跑了一下,在此总结一下。 涉及情况:增、删、改、查、排序 1、环境搭建 1.1、Android Studio下,新建一个kotlin项目, 1.2、去app的build.gradle中进行一些配置 顶部增加 apply plugin: 'kotlin-kapt' 然后 defaultConfig { … javaCompi...

qq_28952543的博客 1560

智能气象站:ESP32驱动的心知天气数据可视化实践

本文详细介绍了基于ESP32微控制器和心知天气API构建智能气象站的完整实践。通过Arduino开发环境,实现天气数据的获取、JSON解析与OLED屏可视化展示,涵盖硬件连接、API配置、低功耗优化及部署问题排查,为物联网开发者提供实用指南。

jump7的博客 210

java basedao t_BaseDAO使用

BaseDao接口的过人之处在于:一般是提供从数据库 增加、删除、修改记录、查询所有记录、查询符合某个条件记录、取得某条记录等方法的底层数据操作自定义类。由于我们可能操作多个数据库表,这样就需要为每个表提供一个操作他的类 xxDAO, 这些DAO继承BaseDAO 就可以省略很多重复代码(从数据库 增加、删除、修改记录、查询所有记录、查询符合某个条件记录、取得某条记录等方法的代码)。其次对于泛型是...

weixin_39876145的博客 525

从零开始:TexLive(Latex)安装与配置全指南

本文提供了一份详尽的TexLive(Latex)安装与配置全指南,旨在帮助用户从零开始快速搭建LaTeX工作环境。内容涵盖从镜像下载、安装步骤详解、环境验证到高效编辑器(如VS Code)配置,并特别强调了中文排版支持与宏包管理,确保用户能顺利处理学术论文等专业文档的排版需求。

weixin_29284885的博客 903

C# 量子级跨平台开发:用Uno Platform实现Windows、iOS、Android的“量子纠缠”UI同步

墨瑾轩推出编程学习平台,通过XAML的“量子纠缠”技术,实现跨平台开发的高效与一致性。传统方案中,多平台代码重复率高,UI差异大,而量子级方案则通过一套代码构建全平台应用,UI原子化同步,开发效率提升5倍。Uno Platform的“量子纠缠”架构解决了代码碎片化、性能瓶颈和调试难题,实现UI原子化同步、性能提升300%和跨平台数据无缝同步。核心架构包括XAML的跨平台渲染、MVVM的量子叠加态架构、平台差异的量子退相干处理以及性能优化的量子隧穿效应,为开发者提供高效、一致的跨平台开发体验。

java专栏 1165

BaseDAO封装

将从数据库获取信息,都需要写一遍使用util工具类建立连接,使用util工具类断开连接...写在一个方法里面,需要使用时只要写sql语句,传List参数列表,调用该方法->就能实现增删查改操作...BaseDAO进阶——要用到来动态获取实体类数据——并给数据保存在中,针对。

2301_77631791的博客 888

60、磁悬浮主动隔振系统的LQR控制研究

本研究针对磁悬浮主动隔振系统,提出了一种结合ANN建模、LQR控制与MPGA优化的综合控制方案。通过建立系统的动力学与状态空间模型,利用混合训练算法的ANN精确描述MSVI的非线性和滞后特性,并设计基于最小力传递率的LQR控制器。为优化LQR的Q和R矩阵,引入多群体遗传算法(MPGA),有效克服传统GA的早熟收敛问题,提升搜索效率与控制性能。仿真结果表明,在单频、扫频、随机及冲击激励下,该方法显著降低传递力幅值,隔振效果远优于被动系统。研究验证了所提方法的有效性,为磁悬浮隔振技术的实际应用奠定了基础,并展望

linux6sysadmin的博客 125

java分层开发中的BaseDao

这里介绍的是在不使用持久层框架的情况下,用Java反射写的BaseDao,简化Dao层的操作,让Dao的实现层每个方法体只有一行。所有的Dao的实现类继承BaseDao。 下面具体讲如何使用BaseDao 。 1、BaseDao 的写法 package dao; import java.lang.reflect.Field; import java.lang.reflect.Me

paul50060049的专栏 4462

AUTOSAR模式管理-EcuM多核处理及其他概念

因此,EcuM不请求状态。因此,BswM必须确保,例如,在调用EcuM_GoHalt或EcuM_GoPoll之前,必须将关机目标从其默认值更改为ECUM_STATE_SLEEP。对于ECU的关闭,BswM(位于主EcuM的同一个分区中)最终调用主核上的GoOff,该GoOff将请求分发给所有的从核。在ECU Manager模块的早期版本中,睡眠目标被特殊处理,因为在ECU中实现的睡眠模式取决于ECU的功能。在使用了外部的SBC控制相关的MCU的下电的时候,在OFF阶段最后调用SBC进入到Sleep的指令。

m0_49148264的博客 1340

BMS控制板硬件设计核心要点与工程避坑指南

电池管理系统(BMS)硬件设计是保障锂电安全与寿命的关键环节,其本质是模拟前端精度、数字控制可靠性、电源完整性及电磁兼容性四大要素的系统协同。理解AFE芯片(如BQ76920)的物理层约束、MCU与专用监控IC的异构分工逻辑,是构建高鲁棒BMS的基础;而晶振布局、I²C总线匹配、MOSFET体二极管方向、开尔文采样等细节,直接决定量产良率与EMC合规性。在电动工具、储能系统、两轮电动车等中低功耗BMS应用中,成本敏感型方案常采用STM32F0+AFE架构,此时电源滤波电容选型、复位电路ESR控制、TVS/齐

weixin_30591519的博客 260

BaseDao接口方法抽取

BaseDao接口方法抽取BaseDao接口方法抽取一、问题:二、解决方案:三、原理图四、代码实例4-1、Jdbc版的BaseDao如何使用代码图解4-2、Hibernate版的BaseDaoBaseDaoImpl如何使用代码五、总结 BaseDao接口方法抽取 一、问题: 通常来说一个项目中,我们会使用到多个Dao,例如一个学生管理系统,可能就包含AdminDao,StudentDao等模块...

weixin_43415130的博客 1095

IEEE69节点数据(Matlab)

IEEE69节点数据(Matlab)

weixin_46039719的博客 1162

java-BaseDao

package dao; import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; public class BaseDao { private static String driver; private static String url...

drl_blogs的博客 325

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

BaseDao的封装

书城项目,basedao封装模板(参考) public abstract class BaseDao { QueryRunner queryRunner = new QueryRunner(); /** * update方法执行insert、update、delete语句 * * @return */ public int update(String sql, Obje...

No_mingzi的博客 368

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Basedao

Basedao   为什么要建立basedao: 若有新的功能需要添加,但是该功能与现有的dao层的接口的功能无关, 就需要新建一个dao层,实现要添加的方法,如果有和userdao或者recorddao相类似,但是参数类型不同的方法,也得再写一遍方法,这样大大提高了代码的工作量。所以建立basedao,把通用的方法放到里面,让其他的dao层接口继承该接口,其他的dao层实现类也继承该实现...

儒雅随和丶mata坤的博客 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

刚刚,改造了下BaseDao……

今天在上课的时候,带着学生们写底层的jdbc连接数据库并且对数据表进行增删改查,写的那就一个痛苦啊……从创建实体类到写Dao层代码再到表现层的Jsp页面,写了好久好久……终于写完...

穆雄雄的博客 439

BaseDao封装JavaWeb的增删改查

BaseDao封装JavaWeb的增删改查

weixin_72083767的博客 1122

NC65通过BaseDAO操作数据库

完整代码下载链接:https://download.youkuaiyun.com/download/d_c_hao/10987189 接口类: public interface IMyDB { /** * 根据表名与某一字段条件返回list */ public List&lt;Map&lt;String, String&gt;&gt; doQueryList(Strin...

渡安H的博客 5178

BaseDao入门使用

BaseDao是一个基于数据访问对象(Data Access Object,简称 DAO)设计模式的通用数据库操作类,它封装了对数据库的基本操作,如增加、删除、修改和查询等。使用 BaseDAO 可以简化数据库操作的代码编写,提高开发效率。

2301_80263923的博客 998

baseDao的用法

baseDao的用法:     BaseDAO dao= new BaseDAO();                  for(int j=0;j             InspectReportB2VO[] bvo2 = (InspectReportB2VO[])vos[0].getChildren(nc.vo.bgymem.qc40.InspectReportB2VO.

u010890857的专栏 2032
上一篇: oracle数据库的导出和导入
下一篇: DBUtils
职业驱魔师
博客等级 码龄16年 16粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值