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万+

RocketMQ 5.3.1 集成 Spring Boot 3.4.3 就这么简单

RocketMQ 是一个分布式消息中间件,支持发布/订阅模型,具有高吞吐量、高可用性和事务消息等特性。它广泛应用于日志处理、订单系统和异步任务等场景。Spring Boot 3.4.3 集成 RocketMQ 5.3.1 的过程异常简单,仅需少量配置即可实现消息的生产和消费。本文从环境搭建到代码实现,覆盖了核心步骤。

lssffy的博客 1385

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

Windows显卡TDR超时导致Unity崩溃?手把手教你修改注册表延长响应时间

本文详细解析了Windows显卡TDR超时导致Unity崩溃的问题,并提供了修改注册表延长响应时间的完整解决方案。通过调整TdrDelay和TdrDdiDelay键值,开发者可以有效避免D3D11设备丢失错误,提升Unity编辑器的稳定性。文章还包含显卡驱动优化、系统性能调优等实用技巧,帮助开发者彻底解决编辑器崩溃问题。

weixin_33737774的博客 622

java basedao t_BaseDAO使用

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

weixin_39876145的博客 525

USRP B210 运行gnuradio时 FPGA固件版本冲突错误解决方法

事情起源于昨天拿到USRP后开始调试,结果整了一个下午都没解决这个问题。 昨天晚上自己思考了一下,觉得还是版本问题。 首先,uhd_find_devices和uhd_usrp_probe均可以正常运行,没有报错,固件正常加载,序列号也可看到。 teray@teray-X550JK:~$ uhd_find_devices [INFO] [UHD] linux; GNU C++ version 7.5...

斯哈研究所 4243

类银河恶魔城学习记录1-1 Player状态机的搭建 P28

什么是状态机?一篇文章就够了 - 知乎说实话,目前并不能深入理解状态机的奇妙之处(当然,我觉得状态机作为教程的重要组成部分是不得不理解的,所以以下我会对游戏教程内的状态机做一些我认为的解释,如有错误,请多包涵)

Homura_的博客 2340

BaseDAO封装

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

2301_77631791的博客 888

KUKA-外部自动运行模板程序——个人设计模式&思路

用于说明KUKA与西门子PLC外部自动交互模板的设计思路与使用流程

qq_39024187的博客 5612

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

linux上使用tun/tap设备模拟一个虚拟网卡,并将该虚拟网卡连接到新创建的网桥上

tun/tap设备是操作系统内核中的虚拟网络设备,是用软件模拟的网络设备,提供与硬件网络设备完全相同的功能。主要用于用户空间和内核空间传递报文。tun/tap对于硬件网络设备而言,一端连接的是物理网络,一端连接的是网络协议栈。对于tun/tap设备而言,一端连接的是应用程序(通过 字符设备文件),一端连接的是网络协议栈。

糖果墙的博客 6411

【STM32系统】基于STM32+手机APP设计的智能停车场系统

功能简介1、进出停车场时需要刷卡,进行一个记时、计费的功能。2、停车位配有超声波检测,主要识别车位是否被占用。3、车位区域配有OLED显示屏,用户可以通过显示屏看到空闲车位。4、车位配有车位灯。当用户找不到车位可以通过手机点亮车位灯5、停车场配有温湿度检测和烟雾检测模块。当环境发生异常状态。会触动紧急报警。6、停车场信息会通过Wi-Fi发送数据上传至阿里云。用户可以通过手机了解到停车场空闲车位和停车时间、费用。

嵌入式阿齐Archie 2万+

BaseDao接口方法抽取

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

weixin_43415130的博客 1095

TC3XX - MCAL知识点(三十三):基于EB Tresos配置Tc3xx的MCAL代码如何产生中心对称的三相六路发波波形

本文用于记录如何在英飞凌 tc3xx 芯片的应用开发中,借助 EB Tresos 配置工具生成的配置代码与 MCAL 源码相结合,进而实现三相六路中心对称互补的 PWM 输出效果。外部资源需求:EB Tresos23.0以上、Tasking\Hightec编译器、示波器\逻辑分析仪。

梦想技术家 1211

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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

BaseDao的封装

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

No_mingzi的博客 368

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Basedao

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

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

刚刚,改造了下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、付费专栏及课程。

余额充值