BaseDao入门使用

目录

  • 一、什么是BaseDao?
    • BaseDao的优点:
    • BaseDao用来做什么操作?
  • 二、BaseDao封装增删改查 案例演示:
    • 1、java与数据库进行连接
    • 2、连接后可对其进行操作(增、删、改)返回影响行数
    • 3、查询 查询一个字段(返回一条记录且只有一个条件,常用场景:单个条件查询)
    • 4、有连接自然就有有关闭 使用完关闭数据库连接
  • 三、演示BaseDao增删改查方法:

一、什么是BaseDao?

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

BaseDao的优点:

  • 代码复用性:BaseDao封装了通用的数据库操作方法,这些方法可以被不同的业务逻辑类重复调用,这样可以减少重复编写相同数据库操作代码的工作,提高了代码的复用性。
  • 业务逻辑与数据库访问解耦:BaseDao不直接与具体的数据库表对应,而是通过数据映射层(如DTO、VO等)来实现业务逻辑与数据库表的映射。这样的设计使得开发者在编写业务逻辑时,无需关心具体的数据库表结构,只需专注于业务逻辑的实现,从而降低了业务逻辑与数据库访问之间的耦合度。
  • 灵活的数据操作方法:BaseDao提供了多种灵活的数据操作方法,如分页查询、条件查询等,这些方法可以满足业务逻辑的各种需求,使得数据处理更加灵活和高效。
  • 模块化DAO(Data Access Object)的设计原则是为了实现功能的模块化,这有利于代码的维护和升级。在实际开发中,DAO层主要负责数据的持久化,而不包含任何业务相关的信息,这有助于保持代码的清晰和易于管理。

BaseDao的使用可以简化数据库操作,提高开发效率和代码质量。

BaseDao用来做什么操作?

  • 提供通用的数据库操作:BaseDao提供了一些通用的方法,
    如插入数据、更新数据、删除数据和查询数据等,这些方法可以在不同的数据访问对象中重复使用。
  • 减少冗余代码
  • 提高开发效率
  • 降低出错概率

二、BaseDao封装增删改查 案例演示:

1、java与数据库进行连接

//数据库连接
public class BaseDao {private String driver = "com.mysql.jdbc.Driver";// 数据库驱动字符串private String url = "jdbc:mysql://localhost:3306/数据库名";// 连接URL字符串private String user = "root"; // 数据库用户名private String password = "20040417"; // 用户密码Connection conn=null; // 数据连接对象/*** 获取数据库连接对象*/public Connection getConnection() {Connection conn=null; // 数据连接对象// 获取连接并捕获异常try {Class.forName(driver);conn = DriverManager.getConnection(url, user, password);} catch (Exception e) {e.printStackTrace();				// 异常处理}return conn;							// 返回连接对象}

2、连接后可对其进行操作(增、删、改)返回影响行数

 /*** 增、删、改的操作* @param sql 预编译的 SQL 语句* @param param 参数的字符串数组* @return 影响的行数*/public int exceuteUpdate (String sql, Object[] param) {PreparedStatement ps = null;int row = 0;conn =  getConnection();try {ps = conn.prepareStatement(sql);if (param != null) {for (int i = 0; i < param.length; i++) {//为预编译sql设置参数ps.setObject(i + 1, param[i]);}}row = ps.executeUpdate();} catch (SQLException e) {e.printStackTrace();} finally{closeAll(conn,ps,null);}return row;}

3、查询 查询一个字段(返回一条记录且只有一个条件,常用场景:单个条件查询)

/*** 查询方法* @param sql* @param objs* @return*/public List<Names> executeQuery(String sql, Object[] objs) {List<Names> resultList = new ArrayList<>();Connection con = getConnection();try {PreparedStatement ps = con.prepareStatement(sql);// 设置参数for (int i = 0; i < objs.length; i++) {ps.setObject(i + 1, objs[i]);}ResultSet rs = ps.executeQuery();while (rs.next()) {Names a = new Names();// 根据实际表结构设置属性值a.setId(rs.getInt("id"));a.setName(rs.getString("name"));a.setPwd(rs.getString("pwd"));resultList.add(a);System.out.println(a.getId()+a.getName()+a.getPwd());}closeAll(con, rs, ps);} catch (Exception e) {e.printStackTrace();}return resultList;}

4、有连接自然就有有关闭 使用完关闭数据库连接

/*** 关闭数据库连接* @param conn 数据库连接* @param stmt Statement对象* @param rs 结果集*/public void closeAll(Connection conn, Statement stmt, ResultSet rs) {// 若结果集对象不为空,则关闭if (rs != null) {try {rs.close();} catch (Exception e) {e.printStackTrace();}}// 若Statement对象不为空,则关闭if (stmt != null) {try {stmt.close();} catch (Exception e) {e.printStackTrace();}}// 若数据库连接对象不为空,则关闭if (conn != null) {try {conn.close();} catch (Exception e) {e.printStackTrace();}}}

三、演示BaseDao增删改查方法:

public class Test {public static void main(String[] args) throws SQLException {BaseDao1 dao=new BaseDao1();//新增功能String sqlAdd="insert into names(name,age) values(?,?)";Object []objAdd={"老九",11};int r1=dao.executeUpdate(sqlAdd,objAdd);if(r1>0){System.out.println("新增成功");}//删除功能String sqlDel="delete from names where id=?";Object []objDel={2};int r2= dao.executeUpdate(sqlDel,objDel);if(r2>0){System.out.println("删除成功");}//修改功能String sqlUpdate="update  names set name=? where id=?";Object []objUpdate={"小尹",1};int r3= dao.executeUpdate(sqlUpdate,objUpdate);if(r3>0){System.out.println("修改成功");}//查询功能String sqlShow = "select * from names where id=?";Object[] objShow = {1};//返回结果集dao.executeQuery(sqlShow,objShow);}}

总结:以上就是BaseDao的使用入门了 如有错误望指点 谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/783376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python基础练习题6

1、找出10000以内能被5或6整除&#xff0c;但不能被两者同时整除的数&#xff08;函数&#xff09; def find_numbers(m,n):result []for num in range(m,n):if (num % 5 0 or num % 6 0) and not (num % 5 0 and num % 6 0):result.append(num)return resultprint(find_…

Linux: 进程优先级

Linux: 进程优先级 一、进程优先级概念二、如何查看进程优先级三、如何修改进程的优先级&#xff08;PRL vs NI&#xff09;四、为何优先级PRL必须限定范围五、进程其他特性 一、进程优先级概念 优先级的本质就是排队&#xff0c;而排队则是资源不足所引起的。在计算机中&#…

static修饰的方法为什么不能被覆盖?

在Java中&#xff0c;static方法不能被覆盖&#xff08;overridden&#xff09;的根本原理可以从以下几个角度进行解释&#xff1a; 静态绑定与动态绑定&#xff1a; 非静态方法&#xff08;非static方法&#xff09;的调用遵循动态绑定原则&#xff0c;即在运行时根据对象的实…

分布式系统概述(重要关键词加粗)

学习目标&#xff1a; 了解分布式 学习内容&#xff1a; 分布式系统是由多个计算机节点组成的系统&#xff0c;这些节点通过网络相互连接并协同工作&#xff0c;以完成共同的任务或服务。在分布式系统中&#xff0c;每个节点都运行着一部分应用程序&#xff0c;并且通常拥有自…

Leetcode 3100. Water Bottles II

Leetcode 3100. Water Bottles II 1. 解题思路2. 代码实现 题目链接&#xff1a;3100. Water Bottles II 1. 解题思路 这一题就是按照题目翻译一下&#xff0c;按照题中给出的规则不断进行bottle的兑换&#xff0c;直至无法兑换为止&#xff0c;即可得到最终的答案。 2. 代…

【3.31】

智乃想考一道完全背包(Easy version) 思路&#xff1a;虚拟物品的思路。可以把 l ∈ [ 1 , k ] , r ∈ [ k , n ] l\in[1, k], r\in[k, n] l∈[1,k],r∈[k,n] 的区间 ( l , r ) (l, r) (l,r) 看作一个虚拟物品&#xff0c;体积和价值为区间的体积和与价值和。这样做完全背包…

【项目技术介绍篇】若依开源项目RuoYi-Cloud前端技术介绍

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

鸿蒙ARKTS--简易的购物网站

目录 一、media 二、string.json文件 三、pages 3.1 登录页面&#xff1a;gouwuPage.ets 3.2 PageResource.ets 3.3 商品页面&#xff1a;shangpinPage.ets 3.4 我的页面&#xff1a;wodePage.ets 3.5 注册页面&#xff1a;zhucePage.ets 3. 购物网站主页面&#xff…

STM32学习笔记(10_2)- I2C通信协议MPU6050简介

无人问津也好&#xff0c;技不如人也罢&#xff0c;都应静下心来&#xff0c;去做该做的事。 最近在学STM32&#xff0c;所以也开贴记录一下主要内容&#xff0c;省的过目即忘。视频教程为江科大&#xff08;改名江协科技&#xff09;&#xff0c;网站jiangxiekeji.com 本期开…

[Linux_IMX6ULL驱动开发]-基础驱动

驱动的含义 如何理解嵌入式的驱动呢&#xff0c;我个人认为&#xff0c;驱动就是嵌入式上层应用操控底层硬件的桥梁。因为上层应用是在用户态&#xff0c;是无法直接操控底层的硬件的。我们需要利用系统调用&#xff08;open、read、write等&#xff09;&#xff0c;进入内核态…

synchronized的使用方式

1、修饰实例方法 public synchronized void A(){} 这个时候锁的是当前的实例对象。多线程操作同一个实例的实例方法时&#xff0c;才会阻塞。 2、修饰静态方法 public synchronized static void A(){}这个时候锁的是整个类下所有的实例对象&#xff0c;静态方法是存在于方法…

自然语言处理:大模型LLM论文整理

LLMs 九层妖塔 地址&#xff1a;https://github.com/km1994/LLMsNineStoryDemonTower LLMs 千面郎君 地址&#xff1a;https://github.com/km1994/LLMs_interview_notes LLMs 论文学习笔记&#xff1a;https://gitee.com/km601/llms_paper NLP 百面百搭 地址&#xff1a;htt…

os模块篇(三)

文章目录 os.putenv(key, value, /)os.setegid(egid, /)os.seteuid(euid, /)os.setgid(gid, /)os.setgroups(groups, /)os.setns(fd, nstype0)os.setpgrp()os.setpgid(pid, pgrp, /)os.setpriority(which, who, priority) os.putenv(key, value, /) os.putenv(key, value) 是 …

看懂Spring和Spring Boot的区别与联系

一、概述 Spring和Spring Boot是Java应用程序开发中最受欢迎的框架之一。Spring提供了一个全功能的、开放式源代码的Java应用程序框架&#xff0c;可以帮助开发人员在基于Java的代码中快速编写而不必关心底层技术实现。而Spring Boot则是基于Spring框架之上的快速开发框架&…

Java编程实战:疫情物资分配系统的设计与实现

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

小程序运营秘籍,5步打造爆款!

在数字化的浪潮中&#xff0c;小程序以其轻便、快捷的特性迅速走红&#xff0c;成为连接用户与服务的重要桥梁。然而&#xff0c;一个成功的小程序离不开精细化的运营策略。如何做运营&#xff0c;才能让小程序在激烈的市场竞争中脱颖而出&#xff1f;以下是几个关键步骤的解析…

RocketMQ笔记(三)SpringBoot整合RocketMQ发送单向消息

目录 一、简介1.1、特点1.2、场景 二、Maven依赖三、application配置四、生产者4.1、测试类4.2、运行结果 一、简介 RocketMQ 提供了一种单向发送消息的方法&#xff0c;在这种模式下&#xff0c;生产者只负责尽快地发送消息&#xff0c;而不需要关心消息是否被Broker接收&…

Opencv相机的读取、拍摄、保存

Opencv相机的读取、拍摄、保存 以下是OpenCV相机的读取、拍摄和保存的基本步骤&#xff1a; 1、读取相机数据 要从相机中读取数据&#xff0c;可以使用cv2.VideoCapture()函数。该函数接受两个参数&#xff0c;即相机的索引和视频捕获模式。例如&#xff0c;要从名为“camera…

Qt 富文本处理 (字体颜色大小加粗等)

Qt中支持HTML的控件有textEdit 、label 、textBrowser 。 接口&#xff1a;setHtml("Qt"); toHtml(). 文本样式设置 : 可分字设置 &#xff0c;主要使用QTextCharFormat类进行文本样式设置。 示例&#xff1a; QTextCharFormat fmt; //粗体 fmt.setFontWeight…

在 IntelliJ IDEA 中部署 Java 项目的详细步骤

在进行 Java 项目的部署前&#xff0c;确保你已经完成了以下准备工作&#xff1a; 项目开发完成&#xff1a;确保 Java 项目已经经过完整的开发&#xff0c;并且通过了相关的测试。依赖管理&#xff1a;确认项目中所有的依赖项都已经正确配置&#xff0c;并且可以被正常引入。…