热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JDBC优化之Dao操作的抽取Java进阶篇学习笔记

目录Dao操作的通用步骤Dao里面实现的操作代码示例实体类Admin常用方法的封装BaseDaoAdminDaoAdminDaotestDao操作的通用步骤0.编写s

目录

 

Dao操作的通用步骤

Dao里面实现的操作

代码示例

实体类 Admin

常用方法的封装 BaseDao

AdminDao

AdminDaotest



Dao操作的通用步骤

//0.编写sql语句
String sql = "select * from dept ";//1.获取连接
Connection conn = JDBCUtil.getConnection(); //2.创建Statement preparedStatement是Statement的一个子类
pstmt = conn.prepareStatement(sql);//Statement stmt = conn.createStatement(); //3.执行sql并返回结果集//a.更新删除添加
int rs = pstmt.executeUpdate(sql); //影响的记录条数// b 查询 Resultset rs = pstmt.execute.Query(sql);//4..关闭
JDBCUtil.close(conn, pstmt,rs);

Dao里面实现的操作

1. 更新 删除 添加 类似
String sql = “select * from admin”;
String sql = “select * from admin where id=? And pwd =?”;
public void update(String sql, Object[] paramValues);2. 查询
String sql = “select * from admin”;
String sql = “select * from admin where id=? And pwd =?”;
// 传入的什么类型的对象,就封装为什么类型
// 要求: 列的名称,要与指定类型的对象的属性名称一样
Public List query (String sql , Object[] paramValues , Class clazz);
T t; // 对象赋值

代码示例


实体类 Admin

package cn.itcase.dao;
/*** 实体类* @author Administrator**/
public class Admin {private int id;
private String user;
private String pwd;public int getId() {return id;
}
public void setId(int id) {this.id = id;}
public String getUser() {return user;
}
public void setUser(String user) {this.user = user;
}
public String getPwd() {return pwd;
}
public void setPwd(String pwd) {this.pwd = pwd;
}public Admin(int id, String user, String pwd){super();this.id = id;this.user = user;this.pwd = pwd;
}
public Admin(){}
}

常用方法的封装 BaseDao

package cn.itcase.dao;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;import org.apache.commons.beanutils.BeanUtils;/*** BaseDao 封装通用的操作方法,自己写的dao都继承此类 1.更新 2.查询* * @author Administrator* */
public class BaseDao {// 初始化对象private Connection conn;private PreparedStatement pstmt;private ResultSet rs;/*** 更新的通用方法* * @param sql* 更新的sql语句(update/insert/delete)* @param paramsValue* sql语句中占位符对应的值(如果没有占位符,传入null)*/public void update(String sql, Object paramsValue[]) {try {// 1.获取连接conn = JDBCUtil.getConnection();// 2.创建执行命令的stmt对象pstmt = conn.prepareStatement(sql);// 3.参数元数据,得到占位符参数的个数int count = pstmt.getParameterMetaData().getParameterCount();// 设置占位符参数的值if (paramsValue != null && paramsValue.length > 0) {// 循环给参数赋值for (int i = 0; i List query(String sql, Object paramsValue[], Class clazz) {/* List* 第一个 告诉编译器用T作为泛型* 第二个 表示泛型* 泛型的意思是类型可以在以后指定,* */try {// 返回的集合List list = new ArrayList();// 初始化对象T t = null;// 1.获取连接conn = JDBCUtil.getConnection();// 2.创建stmt对象pstmt = conn.prepareStatement(sql);// 3.获取占位符参数个数,并设置每个参数的值int count = pstmt.getParameterMetaData().getParameterCount();if(paramsValue != null && paramsValue.length > 0){for(int i = 0; i}

AdminDao

package cn.itcase.dao;import java.util.List;public class AdminDao extends BaseDao {// 删除public void delete(int id) {String sql = "delete from admin where id = ?;";Object paramsValue[] = { id };super.update(sql, paramsValue);}// 插入public void save(Admin admin) {String sql = "insert into admin(userName,pwd) values(?,?);";Object paramsValue[] = { admin.getUser(), admin.getPwd() };super.update(sql, paramsValue);}// 查询全部public List getAll() {String sql = "select * from admin";List list = super.query(sql, null, Admin.class);return list;}// 根据条件查询public Admin findById(int id){String sql = "select * from admin where id=?";List list = super.query(sql,new Object[]{id},Admin.class);return (list != null && list.size() > 0) ? list.get(0) :null;}}

AdminDaotest

package cn.itcase.dao;import java.util.List;import org.junit.Before;
import org.junit.Test;/*** AdminDao的测试类* * @author Administrator* */
public class AdminDaotest {// 初始化对象AdminDao adminDao = null;@Beforepublic void init() {adminDao = new AdminDao();}// 插入数据@Testpublic void testsave() {adminDao = new AdminDao();Admin admin = new Admin();admin.setUserName("张三");admin.setPwd("0000");adminDao.save(admin);}// 删除数据@Testpublic void delete() {adminDao = new AdminDao();System.out.println();}// 查询全部测试@Testpublic void getAlltest() {adminDao = new AdminDao();List list = adminDao.getAll();for(Admin admin :list){System.out.println(list);}}// 根据条件查询(主键)@Testpublic void findByIdtest() {adminDao = new AdminDao();Admin admin = adminDao.findById(1);System.out.println(admin);}}

 


推荐阅读
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • 提升Android开发效率:Clean Code的最佳实践与应用
    在Android开发中,提高代码质量和开发效率是至关重要的。本文介绍了如何通过Clean Code的最佳实践来优化Android应用的开发流程。以SQLite数据库操作为例,详细探讨了如何编写高效、可维护的SQL查询语句,并将其结果封装为Java对象。通过遵循这些最佳实践,开发者可以显著提升代码的可读性和可维护性,从而加快开发速度并减少错误。 ... [详细]
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • 在本节课程中,我们将深入探讨 JSP 编程中的实际案例,通过具体代码示例 `code316.java` 来解析数据库连接的实现。该示例展示了如何使用 Java 的 JDBC API 进行数据库操作,包括加载数据库驱动、建立连接等关键步骤。通过本课程的学习,读者将能够更好地理解和应用 JSP 中的数据库连接技术。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 本文深入解析了Java面向对象编程的核心概念及其应用,重点探讨了面向对象的三大特性:封装、继承和多态。封装确保了数据的安全性和代码的可维护性;继承支持代码的重用和扩展;多态则增强了程序的灵活性和可扩展性。通过具体示例,文章详细阐述了这些特性在实际开发中的应用和优势。 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • 本文详细介绍了267 Collections的特性和应用场景。作为Java集合框架中的核心接口,Collection接口是所有单列集合类的顶级接口,涵盖了列表、集合和队列等数据结构。通过具体的应用实例,本文深入解析了Collection接口的各种方法和功能,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文探讨了 Java 中 Pair 类的历史与现状。虽然 Java 标准库中没有内置的 Pair 类,但社区和第三方库提供了多种实现方式,如 Apache Commons 的 Pair 类和 JavaFX 的 javafx.util.Pair 类。这些实现为需要处理成对数据的开发者提供了便利。此外,文章还讨论了为何标准库未包含 Pair 类的原因,以及在现代 Java 开发中使用 Pair 类的最佳实践。 ... [详细]
  • 深入理解 Java 控制结构的全面指南 ... [详细]
  • 在Eclipse中批量转换Java源代码文件的编码格式从GBK到UTF-8是一项常见的需求。通过编写简单的Java代码,可以高效地实现这一任务。该方法不仅适用于Java文件,还可以用于其他类型的文本文件编码转换。具体实现可以通过导入`java.io.File`类来操作文件系统,从而完成批量转换。此外,建议在转换过程中添加异常处理机制,以确保代码的健壮性和可靠性。 ... [详细]
  • 探索偶数次幂二项式系数的求和方法及其数学意义 ... [详细]
  • Objective-C 中的委托模式详解与应用 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
author-avatar
你是我的小心肝啊哈哈
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有