`
实学实战
  • 浏览: 15664 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
文章分类
社区版块
存档分类
最新评论

DAO设计模式之禅之数据库万能查询操作

 
阅读更多

DAO设计模式


DAO(Data Access Object) 数据访问对象是第一个面向对象的接口,它显露了 Microsoft Jet 数据库引擎(由 Microsoft Access 所使用),并允许 Visual Basic 开发者通过 ODBC 像直接连接到其他数据库一样,直接连接到 Access 表。DAO 最适用于单系统应用程序或小范围本地分布使用。

这里的DAO也就一个功能实现重用的效果、直接来示例代码吧!


第一类:用户类

package com.dao.bean;

/*
 * 属性的封装类
 * A class to do one thing
 */
public class Animals {
		private int id;
		private String name;
		private int age;
		private int anId;
		
		public Animals(){
			
		}
		
		public int getId() {
			return id;
		}
		public void setId(int id) {
			this.id = id;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public int getAge() {
			return age;
		}
		public void setAge(int age) {
			this.age = age;
		}
		public int getAnId() {
			return anId;
		}
		public void setAnId(int anId) {
			this.anId = anId;
		}
		
}


第二:数据库链接类

package com.jdbc.uitl;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/*
 *  DAO工具类
 *  A class to do one thing
 * 
 */
public class JDBCUtil {
		public static Connection open(){
			
			Connection conn = null;
			
			try {				
				//加载驱动
				Class.forName("com.mysql.jdbc.Driver");
				//获取连接数据库
				conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/animal","root","123456");  
				
			}catch (Exception e) {
				System.out.println("数据库连接失败!");
			}
			return conn;
		}
		
		//关闭 2种 资源的方法
		public static void closeRes(Connection conn ,PreparedStatement ps){
			try {
				if(ps!=null){
					ps.close();
				}
				if(conn!=null){
					conn.close();
				}
			} catch (Exception e) {
				System.out.println("数据库资源已经关闭!");
			}
		}
		
		//关闭 3种 资源的方法
		public static void closeRes(Connection conn ,PreparedStatement ps,ResultSet rs){
			try {
				if(rs!=null){
					rs.close();
				}
				if(ps!=null){
					ps.close();
				}
				if(conn!=null){
					conn.close();
				}
			} catch (Exception e) {
				System.out.println("数据库资源已经关闭!");
			}
		}
}

第三:Dao类
package com.dao.data;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import com.jdbc.uitl.JDBCUtil;

/*
 * 万能DAO
 * 
 * */
public class DaoSelect {
	
	//1、查询所有属性[返回一个集合、ArrayList]
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public ArrayList getList(Class<?> cl){
		
		ArrayList ar = new ArrayList();	
		
		Connection conn = JDBCUtil.open();
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		//获取类型名字、这里表示表名[对象.getSimpleName()]
		String sql = "select *  from "+ cl.getSimpleName();
		//获取属性[对象.getDeclaredFields()]
		Field[] fi = cl.getDeclaredFields();
		
		try {
			//链接数据库
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			Object ob = null;
			
			while(rs.next()){
		
				ob = cl.newInstance();
				
				for(Field ff : fi){
					//属性可见
					ff.setAccessible(true);
					ff.set(ob, rs.getObject(ff.getName()));
				}
				ar.add(ob);
			}
		} catch (Exception e) {
			System.out.println("查询所以属性操作失败!");
		}finally{
			//关闭资源
			JDBCUtil.closeRes(conn, ps, rs);
		}
		return ar;
	}
	
	//2、查询单个属性[返回一个属性、Object]
	@SuppressWarnings("rawtypes")
	public Object getObById(Class cl,int id){
		
		Object ob = null;
		
		Connection conn = JDBCUtil.open();
		PreparedStatement ps = null;
		ResultSet rs =null;
		
		//获取属性[对象.getDeclaredFields()]
		Field[] fi = cl.getDeclaredFields();
		//获取属性名[对象.getSimpleName()]
		String sql = "select * from "+cl.getSimpleName()+" where "+fi[0].getName()+" = "+id;     
		
		try {
			//链接数据库
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			
			while(rs.next()){
				
				ob = cl.newInstance();
				
				for(Field ff : fi){
					ff.setAccessible(true);
					ff.set(ob,rs.getObject(ff.getName()));
				}
			}
		} catch (Exception e) {
			System.out.println("查询单个属性操作失败!");
		}finally{
			JDBCUtil.closeRes(conn, ps, rs);
		}
		return ob;
	}
	
	//3、查询未知属性[返回一个集合、ArrayList]
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public ArrayList getListBySome(Class cl ,String name,Object value){
		
		ArrayList ar = new ArrayList();
		Object ob = null;
		
		Connection conn = JDBCUtil.open();
		PreparedStatement ps = null;
		ResultSet rs = null;
		
		//获取属性、属性名[对象.getDeclaredFields()][对象.getSimpleName()]
		Field[] fi = cl.getDeclaredFields();
		String sql = "select * from "+cl.getSimpleName()+" where "+name+" = '"+value+"'";
		
		try {
			//连接数据库
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			
			while(rs.next()){
				
				ob = cl.newInstance();
				
				for(Field ff : fi){
					ff.setAccessible(true);
					ff.set(ob, rs.getObject(ff.getName()));
				}
				ar.add(ob);
			}
			
		} catch (Exception e) {
			System.out.println("查询未知属性操作失败!");
		}finally{
			JDBCUtil.closeRes(conn, ps, rs);
		}
		return ar;
	
	}
}

第四:实现类

package com.dao.data;

import java.util.ArrayList;
import com.dao.bean.Animals;


/*
 * 万能测试Class
 * 
 */
public class TestSelect {
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {

		DaoSelect dao = new DaoSelect();
		
//		//1、Animals类、所有属性
		ArrayList<Animals> ar = dao.getList(Animals.class);
		for (Animals an: ar) {
			System.out.print("编号:" + an.getId() + "——名字:" + an.getName());
			System.out.println("——年龄:" + an.getAge() + "——类型ID:" + an.getAnId());
		}
		
//		//2、Animals类、查询单个属性
//		Animals ar1 = (Animals) dao.getObById(Animals.class, 2);
//		System.out.println("id为2的名字是:" + ar1.getName());
		
		//3、Animals类、查询单个属性
//		ArrayList<Animals> ar1 = dao.getListBySome(Animals.class, "name", "陈郑游");
//		
//		ArrayList<Animals> ar = dao.getListBySome(Animals.class, "age", "21");
//		for (Animals an: ar ) {
//			System.out.println("编号:" + an.getId() + "——名字:" + an.getName());
//		}
	}

}

第五:数据库SQL语句

//动物类数据库

create database animals ;
use  animals;

create table  animals 
(	id int primary key,  
	name varchar(20) ,
	sex char(2), 
	age int ,
	anid int 
);


分享到:
评论

相关推荐

    Java Dao设计模式操作数据库

    Java DAO(Data Access Object)设计模式是一种常用的软件设计模式,用于在Java应用程序中与数据库进行交互。DAO模式的主要目的是为了实现数据访问层的隔离,它将业务逻辑与数据存储细节分离开来,使得代码更加模块...

    DAO设计模式 DAO 设计模式 JAVA设计模式

    在Java开发中,DAO模式广泛应用于数据库操作,为应用程序提供了一种抽象层,避免了直接与SQL语句打交道。 DAO模式的主要组成部分包括以下几个方面: 1. **接口定义**:DAO接口定义了对数据存储的操作方法,如增、...

    DAO设计模式DAO设计模式

    ### DAO设计模式详解 #### 一、概述 数据访问对象(Data Access Object,简称DAO)设计模式是一种在软件工程特别是企业级应用开发中非常常见的设计模式。它的主要目的是分离业务逻辑与数据访问逻辑,使系统架构...

    Dao设计模式教程

    这样,当业务代码需要与数据库交互时,它只需要与DAO接口打交道,而不是直接操作数据库,增强了代码的可测试性和可维护性。 在本教程中,我们将深入探讨DAO设计模式的各个方面,包括其概念、优点、结构以及如何在...

    DAO设计模式辅助资料

    DAO设计模式的基本思想是为数据库操作创建一个独立的接口,这个接口称为DAO接口。通过这个接口,业务层可以调用各种数据访问方法,而无需直接与数据库交互。这样做的好处在于,一旦数据库发生变化,如表结构、查询...

    李兴华 DAO设计模式 实现 增删改查 分页查询 完整代码

    在这个“李兴华 DAO设计模式 实现 增删改查 分页查询 完整代码”项目中,我们将探讨DAO模式如何应用于实现数据库的CRUD(创建、读取、更新、删除)操作以及分页查询。 1. DAO设计模式基础: DAO设计模式的核心是...

    DAO模式数据库操作源代码

    本例子是自己做的,,有很强的可读性。。代码使用率高。是用DAO模式设计的, 实现了对数据库的添加、删除、查询、更新等操作。。不懂的可以联系我:qq:420804832

    工厂模式dao模式操作数据库小例子

    在这个“工厂模式DAO模式操作数据库小例子”中,我们可以预期看到以下结构: 1. 数据库连接配置:通常会有一个配置类或.properties文件来存储数据库连接信息,如URL、用户名和密码。 2. 数据库接口:定义了对数据库...

    DAO设计模式(工厂+代理)

    在DAO设计模式中,我们可以创建一个DAOFactory,它根据传入的参数(如数据库类型)返回相应的DAO实例。这样,代码在需要使用DAO时,只需要调用工厂方法,而无需直接new某个特定的DAO,增加了系统的灵活性。 例如: ...

    李兴华DAO设计模式

    DAO(Data Access Object)设计模式是一种在软件开发中用于封装对数据库操作的模式,它将数据访问逻辑与业务逻辑分离,使得系统更易于维护和扩展。在这个设计模式中,DAO作为数据层,提供了对数据库的一系列原子性...

    基于DAO设计模式的新闻发布系统

    2. 数据库操作:DAO模式通常涉及SQL查询的编写,用于从数据库中读取、插入、更新和删除数据。这些操作可以通过预编译的SQL语句或者ORM(Object-Relational Mapping)框架如Hibernate或MyBatis来实现,以提高性能并...

    DAO设计模式

    DAO(Data Access Object)设计模式是一种软件设计模式,主要用于数据库操作的封装,它将业务逻辑与数据访问逻辑分离开来,使得代码更加模块化,易于维护。DAO模式在实际开发中广泛应用,尤其是在Java和.NET等面向...

    WEB开发经典之 DAO设计模式

    DAO设计模式的核心思想是将数据访问操作封装到一个独立的对象中,这个对象负责处理所有与数据库相关的操作,包括查询、插入、更新和删除等。通过这种方式,业务逻辑层可以与数据存储的具体实现细节隔离开来,提高了...

    9.DAO数据库操作演示(Visual C++编程 源代码)

    9.DAO数据库操作演示(Visual C++编程 源代码)9.DAO数据库操作演示(Visual C++编程 源代码)9.DAO数据库操作演示(Visual C++编程 源代码)9.DAO数据库操作演示(Visual C++编程 源代码)9.DAO数据库操作演示...

    Dao Jet数据库引擎

    这些数据库文件可以包含表、查询、窗体、报表、宏和模块等对象,使得非程序员也能通过直观的界面设计和操作数据库。 在使用Dao Jet数据库引擎时,需要注意以下几点: - 性能:虽然适用于小型应用,但相比现代的...

    JSP+Servlet+AJAX的dao设计模式

    在DAO设计模式中,Servlet接收用户请求,调用服务层方法,这些方法又会进一步调用DAO来与数据库交互。 **3. AJAX (Asynchronous JavaScript and XML)** AJAX允许Web页面在不重新加载整个页面的情况下与服务器交换...

    dao3.5数据库+引擎.zip

    它会将必要的DLL和OCX文件复制到系统目录,注册这些文件以便于其他应用程序能够调用DAO接口进行数据库操作。安装过程可能会涉及到设置环境变量,确保系统路径包含DAO的库文件,例如dbdao35.dll。此安装程序对于那些...

    8.DAO数据库表查询操作演示(Visual C++编程 源代码).rar

    8.DAO数据库表查询操作演示(Visual C++编程 源代8.DAO数据库表查询操作演示(Visual C++编程 源代码)8.DAO数据库表查询操作演示(Visual C++编程 源代码)8.DAO数据库表查询操作演示(Visual C++编程 源代码)8....

    Dao设计模式

    总结来说,DAO设计模式涉及Java集合框架的使用,对象的序列化,JDBC的数据库操作,数据分层的概念,以及类与数据库表之间的映射关系。掌握这些知识点对于理解并实现一个健壮的DAO层是非常有必要的。

    DAO的设计模式 里面transfer 数据库的映射

    DAO(Data Access Object)设计模式是一种在软件工程中用于封装对数据库操作的模式,它的主要目的是将业务逻辑层与数据访问层分离,提高代码的可重用性、可测试性和可维护性。在这个主题中,我们将深入探讨DAO设计...

Global site tag (gtag.js) - Google Analytics