当前位置: 首页 > news >正文

JDBC封装与设计模式

什么是 DAO ?

  • Data Access Object(数据存取对象)
  • 位于业务逻辑和持久化数据之间
  • 实现对持久化数据的访问

         DAO起着转换器的作用,将数据在实体类和数据库记录之间进行转换。

-----------------------------------------------------

DAO模式的组成部分

  • DAO接口
  • DAO实现类
  • 实体类
  • 数据库连接和关闭工具类

优势:

  • 隔离了数据访问代码和业务逻辑代码
  • 隔离了不同数据库实现


 封装JDBC

/*** 数据库工具类*/
public class BaseDao {Connection conn = null;PreparedStatement ps = null;//获取Conn对象 打开数据库链接public boolean getConn() {boolean bool = false;//默认 false 未打开数据库try {//加载驱动  方言Class.forName("com.mysql.jdbc.Driver");//准备数据库连接路径String url = "jdbc:mysql://127.0.0.1:3306/xxshop?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull";//用户名与密码String username = "root";String userpwd = "root";//根据路径,用户名,密码 使用DriverManager获取数据库connection连接conn = DriverManager.getConnection(url,username,userpwd);bool = true;//已经打开} catch (Exception e) {e.printStackTrace();bool = false ;//已经打开}return  bool;}/*** 添加,修改,删除数据* @param sql* @param objs* @return*/public int executeUpdate(String sql,Object objs[]){int res = 0;//初始化执行结果  失败0try {if(getConn())//打开数据库链接{ps = conn.prepareStatement(sql);if(objs!=null){for (int i = 0; i < objs.length; i++) {ps.setObject((i+1),objs[i]);}}res = ps.executeUpdate();}} catch (Exception e) {e.printStackTrace();} finally {closeResource();//关闭数据源}return res;}/*** 查询* @param sql* @param objs* @return*/public ResultSet executeSQL(String sql,Object objs[]){ResultSet rs = null;try {if(getConn())//打开数据库链接{ps = conn.prepareStatement(sql);//判断是否有参数if (objs != null) {//循环封装参数for (int i = 0; i < objs.length; i++) {ps.setObject((i + 1), objs[i]);}}rs = ps.executeQuery();}} catch (Exception e) {e.printStackTrace();} finally {closeResource();//释放资源}return rs;}//关闭资源public void closeResource(){try {if(ps!=null){ps.close();}if(conn!=null) {conn.close();}} catch (SQLException e) {e.printStackTrace();}}
}

调用工具类

实现类 继承 工具类(BaseDao)

查询:ResultSet rs = this.executeSQL(SQL语句,Object数组<参数数组>)

增,删,改: int i = this.executeUpdate(SQL语句,Object数组<参数数组>)


配置文件连接信息

 使用配置文件存储连接信息properties文件)

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/xxshop?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
jdbc.username=root
jdbc.pwd=root

  1. Properties properties = new Properties();
  2. //读取properties文件 BaseDao为当前所在类
  3. InputStream is = BaseDao.class.getClassLoader().getResourceAsStream("jdbc.properties");
  4. //将文件信息转换成properties对象
  5. properties.load(is);
  6. //通过getProperty(KEY)方法获取属性值
  7. String driver = properties.getProperty("jdbc.driver");

写信息 

package com.hz.util;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;import com.hz.dao.BaseDao;//读取数据库属性文件,获取数据库连接信息
//如何让用户只能创建一个ConfigManger----单例模式:(1)构造方法私有(2)程序提供给别人唯一对象
//ConfigManager.getInstance().getString("jdbc.Driver")public class ConfigManager {private static ConfigManager configManager;private Properties properties;private ConfigManager() {String configFile = "database.properties";// 读取properties文件 BaseDao为当前所在类InputStream is = ConfigManager.class.getClassLoader().getResourceAsStream("database.properties");properties = new Properties();try {// 将文件信息转换成properties对象properties.load(is);is.close();} catch (IOException e) {e.printStackTrace();}}//提供给别人一个唯一的ConfigManger对象//通过 类名. 调用public static ConfigManager getInstance() {if (configManager == null) {configManager = new ConfigManager();}return configManager;}// 通过getProperty(KEY)方法获取属性值public String getString(String key) {return properties.getProperty(key);}}

在整个程序运行期间,有且仅有一个实例若违背这一点,所设计的类就不是单例类。

 


连接池与数据源

        使用JDBC访问数据库时,频繁的连接导致系统的安全性和稳定性差,通过数据源和连接池来解决问题。

连接池

        连接池是由容器提供的,用来管理池中连接对象。

 数据源

 

http://www.lryc.cn/news/129000.html

相关文章:

  • 小程序扫描二维码获取网址,通过Jsoup进行解析
  • Kubernetes+EFK构建日志分析平台
  • 客服如何减轻工作压力?浅析客服压力管理方法
  • 知识储备--基础算法篇-二分搜索
  • 【MySQL系列】表内容的基本操作(增删查改)
  • docker搭建LNMP
  • 未出现过的最小正整数
  • 易服客工作室:WordPress是什么?初学者的解释
  • 2019年9月全国计算机等级考试真题(C语言二级)
  • LLaMA模型泄露 Meta成最大受益者
  • 企业中商业智能BI,常见的工具和技术
  • item_password-获得淘口令真实url
  • 基于SOLIDWORKS配置功能建立塑料模具标准件库
  • 1.物联网LWIP网络,TCP/IP协议簇
  • 拷贝公钥文件后,ssh 服务器仍提示输入密码
  • 算法|Day45 动态规划13
  • 基于随机森林的手写体数字识别,基于RF的手写体数字识别,基于RF的MNIST数据集分类识别
  • vite初始化vue3项目(配置自动格式化工具与git提交规范工具)
  • leetcode473. 火柴拼正方形(回溯算法-java)
  • git-fatal: No url found for submodule path ‘packages/libary‘ in .gitmodules
  • Android开发之性能优化:过渡绘制解决方案
  • Wireshark 抓包过滤命令汇总
  • 配资平台app(正规股票配资软件)架构是怎么搭建的?
  • 【实用黑科技】如何 把b站的缓存视频弄到本地——数据恢复软件WinHex 和 音视频转码程序FFmpeg
  • 神经网络基础-神经网络补充概念-57-多任务学习
  • CMake教程6:调用lib、dll
  • 行业资讯丨“燃气智慧化”到底是什么?
  • angular注入方法providers
  • Git提交规范指南
  • QT之UDP通信