热门标签 | 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);}}

 


推荐阅读
  • 感谢大家对IT十八掌大数据的支持,今天的作业如下:1.实践PreparedStament的CRUD操作。2.对比Statement和PreparedStatement的大批量操作耗时?(1 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • 本文整理了Java中org.apache.hadoop.hive.ql.plan.ExprNodeColumnDesc.getTypeInfo()方法的一些代码示例,展 ... [详细]
  • go channel 缓冲区最大限制_Golang学习笔记之并发.协程(Goroutine)、信道(Channel)
    原文作者:学生黄哲来源:简书Go是并发语言,而不是并行语言。一、并发和并行的区别•并发(concurrency)是指一次处理大量事情的能力 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 开发笔记:Spark Java API 之 CountVectorizer
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了SparkJavaAPI之CountVectorizer相关的知识,希望对你有一定的参考价值。 ... [详细]
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社区 版权所有